/* ==========================================================================
   GTpos · MODERN THEME OVERLAY
   Capa de modernización visual cargada DESPUÉS de los estilos compilados
   (cssmin/main.css, pos.css, pos_c.css, login.css) o de los estilos de
   desarrollo. No sustituye Bootstrap 3 / AdminLTE 2: los reviste con un
   sistema de diseño propio, moderno, responsivo y con modo claro/oscuro.
   ========================================================================== */

@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Manrope:wght@600;700;800&display=swap');

/* --------------------------------------------------------------------------
   1. TOKENS / VARIABLES DE DISEÑO
   -------------------------------------------------------------------------- */
:root {
    /* Tipografía */
    --gt-font: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    --gt-font-display: 'Manrope', var(--gt-font);

    /* Radios */
    --gt-r-xs: 6px;
    --gt-r-sm: 8px;
    --gt-r-md: 12px;
    --gt-r-lg: 16px;
    --gt-r-xl: 22px;
    --gt-r-pill: 999px;

    /* Sombras (modo claro) */
    --gt-shadow-xs: 0 1px 2px rgba(16, 24, 40, .06);
    --gt-shadow-sm: 0 2px 6px rgba(16, 24, 40, .07);
    --gt-shadow-md: 0 8px 20px -4px rgba(16, 24, 40, .12);
    --gt-shadow-lg: 0 20px 40px -8px rgba(16, 24, 40, .18);
    --gt-shadow-focus: 0 0 0 4px;

    /* Transiciones */
    --gt-fast: 140ms cubic-bezier(.4, 0, .2, 1);
    --gt-med: 220ms cubic-bezier(.4, 0, .2, 1);

    /* Métricas de layout — usadas por topbar, sidebar y contenido para que
       todas las piezas queden alineadas. AdminLTE asumía 40px de topbar y
       180px de sidebar; aquí se centralizan para no volver a desincronizarlas. */
    --gt-topbar-h: 54px;
    --gt-sidebar-w: 180px;
    --gt-sidebar-mini-w: 50px;
    --gt-sidebar-mobile-w: 268px;
    --gt-flyout-w: 220px;

    /* Marca */
    --gt-accent-h: 160;
    --gt-accent: #0ea472;
    --gt-accent-600: #0c8f63;
    --gt-accent-700: #0a7a55;
    --gt-accent-800: #075c3f;
    --gt-accent-soft: #e3f8ef;
    --gt-accent-soft-strong: #c3f0dd;
    --gt-accent-contrast: #ffffff;
    --gt-accent-ring: rgba(14, 164, 114, .25);

    --gt-violet: #6366f1;
    --gt-blue: #3b82f6;
    --gt-amber: #f59e0b;
    --gt-red: #ef4444;
    --gt-red-soft: #fdecec;
    --gt-teal: #06b6d4;

    /* Superficies modo claro */
    --gt-bg: #eef1f6;
    --gt-bg-alt: #e6eaf1;
    --gt-surface: #ffffff;
    --gt-surface-2: #f8fafc;
    --gt-surface-hover: #f1f5f9;
    --gt-border: #e3e8f0;
    --gt-border-strong: #cbd5e1;

    --gt-text: #17202e;
    --gt-text-muted: #5b6779;
    --gt-text-soft: #8a94a6;
    --gt-text-on-accent: #ffffff;

    /* Sidebar / Topbar — ahora SÍ acompaña al tema (antes quedaba oscura en
       modo claro). Se añaden tokens de hover/submenú/filtro de iconos para
       que ninguna regla tenga que cablear #fff. */
    --gt-side-bg: #ffffff;
    --gt-side-bg-2: #f3f6fb;
    --gt-side-border: #e3e8f0;
    --gt-side-text: #4c5a6e;
    --gt-side-text-active: #16202f;
    --gt-side-hover-bg: #eef2f8;
    --gt-side-hover-text: #16202f;
    --gt-side-submenu-bg: #f6f8fc;
    --gt-side-active-bg: linear-gradient(90deg, rgba(14, 164, 114, .16), rgba(14, 164, 114, .03));
    --gt-side-active-border: #0ea472;
    --gt-side-icon: #64738a;
    --gt-side-shadow: 1px 0 0 var(--gt-side-border);
    /* Filtro para el sprite de iconos dentro de la barra lateral. */
    --gt-side-icon-filter: brightness(0) saturate(100%) opacity(.5);
    --gt-side-icon-filter-active: brightness(0) saturate(100%) opacity(.9);
    --gt-side-search-bg: #eef2f8;
    --gt-side-search-text: #16202f;

    --gt-top-bg: #ffffff;
    --gt-top-border: #e6eaf1;

    --gt-scrollbar: #c7cfdb;
    --gt-scrollbar-track: transparent;

    /* Login — modo claro: fondo realmente claro y aireado */
    --gt-login-bg:
        radial-gradient(circle at 12% 10%, #ffffff 0%, transparent 55%),
        linear-gradient(160deg, #f7fafc 0%, #eef3f9 48%, #e7eef7 100%);
    --gt-login-aurora:
        radial-gradient(circle at 20% 25%, rgba(14, 164, 114, .40), transparent 55%),
        radial-gradient(circle at 78% 70%, rgba(99, 102, 241, .30), transparent 55%),
        radial-gradient(circle at 60% 15%, rgba(6, 182, 212, .26), transparent 50%);
    --gt-login-aurora-opacity: .5;
    --gt-login-grid: rgba(23, 32, 46, .05);
    --gt-login-card: rgba(255, 255, 255, .82);
    --gt-login-card-border: rgba(255, 255, 255, .9);
    --gt-login-card-shadow: 0 26px 60px -18px rgba(16, 24, 40, .28), 0 2px 8px rgba(16, 24, 40, .06);
    --gt-login-addon: #f1f5f9;

    /* Contorno de los campos: visible por defecto, verde oscuro al enfocar */
    /* Verificados a >=3:1 sobre la superficie (WCAG 1.4.11, contorno de
       componentes de interfaz). Con #b9c4d4 el borde daba 1.76:1 y por eso
       apenas se distinguia. */
    --gt-field-border: #8795ab;
    --gt-field-border-hover: #64748b;
    --gt-field-border-focus: #067a52;

    /* Tooltip de la barra superior */
    --gt-tip-bg: #16202f;
    --gt-tip-text: #ffffff;
    --gt-tip-border: rgba(255, 255, 255, .10);

    color-scheme: light;
}

[data-theme="dark"] {
    color-scheme: dark;

    --gt-accent: #2fdba0;
    --gt-accent-600: #22c391;
    --gt-accent-700: #17a87c;
    --gt-accent-800: #b9f5dc;
    --gt-accent-soft: rgba(47, 219, 160, .14);
    --gt-accent-soft-strong: rgba(47, 219, 160, .22);
    --gt-accent-contrast: #062018;
    --gt-accent-ring: rgba(47, 219, 160, .28);

    --gt-red-soft: rgba(239, 68, 68, .14);

    --gt-bg: #0a0f1a;
    --gt-bg-alt: #0c1220;
    --gt-surface: #121a2a;
    --gt-surface-2: #16203350;
    --gt-surface-hover: #1b2537;
    --gt-border: #232f47;
    --gt-border-strong: #303f5e;

    --gt-text: #e7ecf5;
    --gt-text-muted: #9baac2;
    --gt-text-soft: #6d7c96;
    --gt-text-on-accent: #062018;

    --gt-side-bg: #070c17;
    --gt-side-bg-2: #0f1728;
    --gt-side-border: rgba(255, 255, 255, .06);
    --gt-side-text: #8a9bb8;
    --gt-side-text-active: #ffffff;
    --gt-side-hover-bg: rgba(255, 255, 255, .06);
    --gt-side-hover-text: #ffffff;
    --gt-side-submenu-bg: rgba(0, 0, 0, .28);
    --gt-side-active-bg: linear-gradient(90deg, rgba(47, 219, 160, .20), rgba(47, 219, 160, .03));
    --gt-side-active-border: #22d3a4;
    --gt-side-icon: #6d84a6;
    --gt-side-shadow: 4px 0 24px rgba(0, 0, 0, .30);
    --gt-side-icon-filter: brightness(0) invert(1) opacity(.55);
    --gt-side-icon-filter-active: brightness(0) invert(1) opacity(1);
    --gt-side-search-bg: rgba(255, 255, 255, .05);
    --gt-side-search-text: #ffffff;

    --gt-top-bg: #0e1524;
    --gt-top-border: #202c44;

    --gt-scrollbar: #2a3550;
    --gt-scrollbar-track: transparent;

    /* Login — modo oscuro: azul profundo + aurora esmeralda/violeta y
       tarjeta de vidrio, con bastante más contraste que el gris plano. */
    --gt-login-bg:
        radial-gradient(circle at 50% -10%, #16264a 0%, transparent 62%),
        linear-gradient(165deg, #0a1120 0%, #05080f 100%);
    --gt-login-aurora:
        radial-gradient(circle at 18% 22%, rgba(47, 219, 160, .55), transparent 55%),
        radial-gradient(circle at 82% 72%, rgba(99, 102, 241, .48), transparent 55%),
        radial-gradient(circle at 62% 8%, rgba(6, 182, 212, .38), transparent 52%);
    --gt-login-aurora-opacity: .42;
    --gt-login-grid: rgba(255, 255, 255, .045);
    --gt-login-card: rgba(20, 29, 47, .72);
    --gt-login-card-border: rgba(255, 255, 255, .10);
    --gt-login-card-shadow: 0 30px 70px -20px rgba(0, 0, 0, .8), 0 0 0 1px rgba(255, 255, 255, .04);
    --gt-login-addon: rgba(255, 255, 255, .06);

    --gt-field-border: #586990;
    --gt-field-border-hover: #74879f;
    --gt-field-border-focus: #2fdba0;

    --gt-tip-bg: #1d283c;
    --gt-tip-text: #f2f6fc;
    --gt-tip-border: rgba(255, 255, 255, .14);

    --gt-shadow-xs: 0 1px 2px rgba(0, 0, 0, .35);
    --gt-shadow-sm: 0 2px 8px rgba(0, 0, 0, .35);
    --gt-shadow-md: 0 10px 26px -6px rgba(0, 0, 0, .55);
    --gt-shadow-lg: 0 24px 48px -10px rgba(0, 0, 0, .6);
}

/* Evita parpadeo al cambiar de tema */
html { color-scheme: light; }
html[data-theme="dark"] { color-scheme: dark; }
html.gt-theme-ready body,
html.gt-theme-ready body * {
    transition: background-color var(--gt-fast), border-color var(--gt-fast), color var(--gt-fast), box-shadow var(--gt-fast);
}

/* --------------------------------------------------------------------------
   2. RESET / BASE
   -------------------------------------------------------------------------- */
html, body {
    background: var(--gt-bg) !important;
}

body {
    font-family: var(--gt-font) !important;
    color: var(--gt-text) !important;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

h1, h2, h3, h4, h5, h6,
.box-title, .content-header > h1 {
    font-family: var(--gt-font-display) !important;
    color: var(--gt-text) !important;
    letter-spacing: -0.01em;
}

a { color: var(--gt-accent); }
a:hover, a:focus { color: var(--gt-accent-700); }

::-webkit-scrollbar { width: 9px; height: 9px; }
::-webkit-scrollbar-track { background: var(--gt-scrollbar-track); }
::-webkit-scrollbar-thumb {
    background-color: var(--gt-scrollbar);
    border-radius: var(--gt-r-pill);
    border: 2px solid transparent;
    background-clip: padding-box;
}
* { scrollbar-width: thin; scrollbar-color: var(--gt-scrollbar) transparent; }

::selection { background: var(--gt-accent-soft-strong); color: var(--gt-text); }

hr { border-color: var(--gt-border) !important; }

/* --------------------------------------------------------------------------
   3. LAYOUT GENERAL
   -------------------------------------------------------------------------- */
.wrapper { background: var(--gt-bg) !important; }

.content-wrapper, .right-side {
    background: var(--gt-bg) !important;
}

.content-header {
    background: transparent !important;
    padding: 22px 26px 6px !important;
}
.content-header > h1 {
    font-size: 22px !important;
    font-weight: 800 !important;
    display: flex;
    align-items: center;
    gap: 10px;
}
.content-header > h1 > small {
    color: var(--gt-text-soft) !important;
    font-weight: 500 !important;
}
.content-header > .breadcrumb {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-pill) !important;
    padding: 7px 16px !important;
    box-shadow: var(--gt-shadow-xs);
    font-size: 12.5px;
}
.content-header > .breadcrumb > li > a { color: var(--gt-text-muted) !important; }
.content-header > .breadcrumb > li.active { color: var(--gt-accent) !important; font-weight: 600; }

.content { padding: 8px 26px 26px !important; }

@media (max-width: 767px) {
    .content-header { padding: 16px 14px 4px !important; }
    .content { padding: 6px 14px 20px !important; }
}

/* --------------------------------------------------------------------------
   4. TOPBAR / HEADER PRINCIPAL
   -------------------------------------------------------------------------- */
.main-header {
    box-shadow: none !important;
}
.main-header > .navbar,
.skin-black .main-header > .navbar,
.skin-blue .main-header > .navbar,
.skin-green .main-header > .navbar,
.skin-red .main-header > .navbar,
.skin-yellow .main-header > .navbar {
    background: var(--gt-top-bg) !important;
    border-bottom: 1px solid var(--gt-top-border) !important;
    min-height: var(--gt-topbar-h);
}
.main-header .navbar-custom-menu, .main-header .navbar-right { background: transparent; }

.main-header > .logo {
    border-bottom: 1px solid transparent;
    border-right: none !important;
    font-family: var(--gt-font-display) !important;
    font-weight: 800 !important;
    letter-spacing: .01em;
    height: var(--gt-topbar-h);
    line-height: var(--gt-topbar-h);
}
[data-theme="dark"] .main-header > .logo {
    background: var(--gt-side-bg) !important;
    color: #fff !important;
    border-bottom: 1px solid var(--gt-side-border) !important;
}
[data-theme="dark"] .main-header > .logo:hover { background: var(--gt-side-bg-2) !important; }
.main-header .logo-mini b {
    background: var(--gt-accent);
    color: var(--gt-accent-contrast);
    width: 30px; height: 30px; line-height: 30px;
    border-radius: var(--gt-r-sm);
    display: inline-block;
    font-weight: 800;
}

.main-header .navbar .sidebar-toggle,
.skin-black .main-header .navbar .sidebar-toggle {
    color: var(--gt-text) !important;
    height: var(--gt-topbar-h);
    display: flex;
    align-items: center;
    padding: 0 16px;
}
.main-header .navbar .sidebar-toggle:hover {
    background: var(--gt-surface-hover) !important;
    color: var(--gt-accent) !important;
}

.main-header .navbar-nav > li > a {
    color: var(--gt-text-muted) !important;
    padding: 0 12px;
    height: var(--gt-topbar-h);
    display: flex;
    align-items: center;
    border-radius: 0;
}
.main-header .navbar-nav > li > a:hover,
.main-header .navbar-nav > li > a:focus,
.main-header .navbar-nav > .active > a,
.main-header .navbar-nav > .open > a {
    background: var(--gt-surface-hover) !important;
    color: var(--gt-accent) !important;
}
.main-header .navbar-nav > li.sell-btn > a,
.main-header .navbar-nav > li.active.sell-btn > a {
    color: var(--gt-accent) !important;
}
.main-header .svg-icon {
    width: 19px; height: 19px;
    vertical-align: middle;
}
.main-header .navbar-nav > li > a .label {
    border-radius: var(--gt-r-pill) !important;
    font-weight: 700;
    padding: 2px 6px;
}
#live_datetime { color: var(--gt-text-muted) !important; font-weight: 600; font-size: 12.5px; }

.main-header .dropdown-menu {
    border-radius: var(--gt-r-md) !important;
    border: 1px solid var(--gt-border) !important;
    box-shadow: var(--gt-shadow-md) !important;
    background: var(--gt-surface) !important;
    padding: 6px !important;
    margin-top: 8px !important;
}
.main-header .dropdown-menu > li > a {
    color: var(--gt-text) !important;
    border-radius: var(--gt-r-sm) !important;
    padding: 8px 10px !important;
}
.main-header .dropdown-menu > li > a:hover { background: var(--gt-surface-hover) !important; }

/* Botón de acceso rápido a POS: destacado como CTA */
.main-header .navbar-nav > li.sell-btn {
    margin: 0 4px;
}
.main-header .navbar-nav > li.sell-btn > a {
    background: var(--gt-accent) !important;
    color: var(--gt-accent-contrast) !important;
    border-radius: var(--gt-r-pill) !important;
    height: 40px !important;
    margin-top: 11px;
    padding: 0 18px !important;
    font-weight: 700;
    box-shadow: var(--gt-shadow-sm);
}
.main-header .navbar-nav > li.sell-btn > a:hover { background: var(--gt-accent-600) !important; color: #fff !important; }
.main-header .navbar-nav > li.sell-btn .svg-icon { margin-right: 6px; }

/* --------------------------------------------------------------------------
   4.1 TOGGLE DE TEMA (claro/oscuro)
   -------------------------------------------------------------------------- */
.gt-theme-toggle {
    display: flex !important;
    align-items: center;
    justify-content: center;
    height: var(--gt-topbar-h) !important;
    padding: 0 12px !important;
    cursor: pointer;
    background: none;
    border: 0;
}
.gt-theme-toggle .gt-toggle-track {
    position: relative;
    width: 46px;
    height: 26px;
    border-radius: var(--gt-r-pill);
    background: var(--gt-surface-hover);
    border: 1px solid var(--gt-border);
    transition: background var(--gt-med);
}
.gt-theme-toggle .gt-toggle-thumb {
    position: absolute;
    top: 2px; left: 2px;
    width: 20px; height: 20px;
    border-radius: 50%;
    background: var(--gt-surface);
    box-shadow: var(--gt-shadow-sm);
    display: flex;
    align-items: center;
    justify-content: center;
    transition: transform var(--gt-med), background var(--gt-med);
    color: var(--gt-amber);
}
.gt-theme-toggle .gt-toggle-thumb svg { width: 12px; height: 12px; }
[data-theme="dark"] .gt-theme-toggle .gt-toggle-track { background: var(--gt-accent-soft); border-color: var(--gt-accent); }
[data-theme="dark"] .gt-theme-toggle .gt-toggle-thumb { transform: translateX(20px); color: var(--gt-accent); background: var(--gt-side-bg); }
.gt-theme-toggle .icon-sun { display: block; }
.gt-theme-toggle .icon-moon { display: none; }
[data-theme="dark"] .gt-theme-toggle .icon-sun { display: none; }
[data-theme="dark"] .gt-theme-toggle .icon-moon { display: block; }

/* --------------------------------------------------------------------------
   5. SIDEBAR PRINCIPAL
   -------------------------------------------------------------------------- */
.main-sidebar,
.left-side {
    box-shadow: 4px 0 24px rgba(0, 0, 0, .18);
}
[data-theme="dark"] .main-sidebar,
[data-theme="dark"] .left-side {
    background: var(--gt-side-bg) !important;
}
.sidebar { background: transparent !important; padding-bottom: 20px; }

.sidebar-mini.sidebar-collapse .main-sidebar { box-shadow: none; }

.user-panel {
    padding: 18px 15px !important;
    border-bottom: 1px solid var(--gt-side-border) !important;
    margin-bottom: 6px;
}
.user-panel > .image .svg-icon,
.skin-black .sidebar .user-panel > .image > svg { color: var(--gt-side-text); }
.user-panel > .image img,
.user-panel .user-thumbnail {
    border-radius: var(--gt-r-md) !important;
    border: 2px solid var(--gt-side-border);
}
.user-panel > .info,
.user-panel > .info > a {
    color: var(--gt-side-text) !important;
}
.user-panel > .info > p.username {
    color: #fff !important;
    font-weight: 700 !important;
    font-family: var(--gt-font-display);
}
.user-panel > .info > a .fa.user-status-dot { color: var(--gt-accent) !important; font-size: 9px; }

.sidebar-menu { padding: 6px 10px; }
.sidebar-menu > li {
    margin-bottom: 2px;
}
.sidebar-menu > li > a,
.skin-black .sidebar-menu > li > a {
    color: var(--gt-side-text) !important;
    border-radius: var(--gt-r-sm) !important;
    padding: 10px 12px !important;
    font-weight: 500;
    font-size: 13.5px;
    border-left: none !important;
    display: flex;
    align-items: center;
    gap: 12px;
}
.sidebar-menu > li > a > .svg-icon,
.sidebar-menu > li > a > svg {
    width: 18px; height: 18px;
    flex: 0 0 auto;
    color: var(--gt-side-icon);
    fill: var(--gt-side-icon);
    transition: color var(--gt-fast);
}
.sidebar-menu > li > a > span:not(.label) { flex: 1; }
.sidebar-menu > li > a > .fa.pull-right,
.sidebar-menu > li > a > i.fa {
    color: var(--gt-side-icon);
    transition: transform var(--gt-fast);
}

.sidebar-menu > li:hover > a,
.sidebar-menu > li > a:hover,
.sidebar-menu > li > a:focus,
.skin-black .sidebar-menu > li:hover > a {
    background: rgba(255, 255, 255, .06) !important;
    color: #fff !important;
}
.sidebar-menu > li:hover > a > .svg-icon,
.sidebar-menu > li:hover > a svg { color: #fff; fill: #fff; }

.sidebar-menu > li.active > a,
.sidebar-menu > li.active.treeview > a,
.skin-black .sidebar-menu > li.active > a,
.skin-black .sidebar-menu > li.active.treeview > a {
    background: var(--gt-side-active-bg) !important;
    color: var(--gt-side-text-active) !important;
    border-left: none !important;
    box-shadow: inset 3px 0 0 var(--gt-side-active-border);
    font-weight: 700;
}
.sidebar-menu > li.active > a > .svg-icon,
.sidebar-menu > li.active > a svg { color: var(--gt-accent) !important; fill: var(--gt-accent) !important; }

.sidebar-menu li.treeview-menu {
    background: rgba(0, 0, 0, .18) !important;
    border-radius: var(--gt-r-sm);
    margin: 2px 0 6px 0;
    padding: 4px !important;
}
.sidebar-menu > li > .treeview-menu {
    background: rgba(0, 0, 0, .18) !important;
    border-radius: var(--gt-r-sm);
    margin: 2px 4px 6px 4px;
    padding: 4px !important;
}
.sidebar-menu .treeview-menu > li > a {
    color: var(--gt-side-text) !important;
    padding: 8px 12px 8px 38px !important;
    border-radius: var(--gt-r-xs) !important;
    font-size: 13px;
    display: flex;
    align-items: center;
    gap: 10px;
}
.sidebar-menu .treeview-menu > li > a > .svg-icon { width: 15px; height: 15px; color: var(--gt-side-icon); fill: var(--gt-side-icon); }
.sidebar-menu .treeview-menu > li.active > a,
.sidebar-menu .treeview-menu > li > a:hover {
    background: rgba(255, 255, 255, .07) !important;
    color: #fff !important;
}
.sidebar-menu .treeview-menu > li.active > a { color: var(--gt-accent) !important; font-weight: 600; }

#sidebar-bottom { height: 10px; }

/* El buscador debe ocultarse en modo mini-colapsado (igual que AdminLTE oculta
   .sidebar-form), o queda desbordado y tapa los submenús flotantes. */
.sidebar-mini.sidebar-collapse .sidebar-search,
.sidebar-mini.sidebar-collapse .sidebar-search-empty {
    display: none !important;
}

/* ---- Sidebar colapsado (mini): geometría del flyout ----------------------
   AdminLTE posiciona el flyout en `left: 50px` medido desde el <li>. Como
   esta capa añadió `padding: 6px 10px` a .sidebar-menu, el <li> empezaba
   10px a la derecha y el flyout aparecía separado de la barra: al mover el
   mouse hacia él se cruzaba ese hueco muerto, se perdía el :hover y el menú
   se cerraba antes de poder hacer clic. Se anula el padding lateral en modo
   mini y se recalcula el desplazamiento. */
@media (min-width: 768px) {
    .sidebar-mini.sidebar-collapse .sidebar-menu {
        padding-left: 0 !important;
        padding-right: 0 !important;
    }
    .sidebar-mini.sidebar-collapse .sidebar-menu > li {
        margin-bottom: 0;
    }
    .sidebar-mini.sidebar-collapse .sidebar-menu > li > a {
        position: relative;
        z-index: 1;
        justify-content: center;
        gap: 0 !important;
        padding: 12px 0 !important;
        border-radius: 0 !important;
        width: var(--gt-sidebar-mini-w);
    }

    /* Etiqueta flotante del elemento (nivel 1) */
    .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span:not(.pull-right) {
        left: var(--gt-sidebar-mini-w) !important;
        top: 0 !important;
        width: var(--gt-flyout-w) !important;
        min-height: 100%;
        margin-left: 0 !important;
        display: flex !important;
        align-items: center;
        padding: 10px 16px !important;
        /* `background-color: inherit` de AdminLTE resolvía a transparente, así
           que el texto quedaba flotando ilegible sobre el contenido. */
        background: var(--gt-side-bg-2) !important;
        color: #fff !important;
        font-weight: 600;
        border-radius: 0 var(--gt-r-sm) 0 0;
        box-shadow: var(--gt-shadow-lg);
        /* Los rótulos largos se ajustan en vez de desbordarse. */
        white-space: normal !important;
        overflow-wrap: anywhere;
        line-height: 1.25;
        z-index: 901;
    }
    /* En elementos sin submenú, la etiqueta redondea también abajo. */
    .sidebar-mini.sidebar-collapse .sidebar-menu > li:not(.treeview):hover > a > span:not(.pull-right) {
        border-radius: 0 var(--gt-r-sm) var(--gt-r-sm) 0;
    }

    /* Submenú flotante (nivel 2) */
    .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu {
        left: var(--gt-sidebar-mini-w) !important;
        width: var(--gt-flyout-w) !important;
        /* AdminLTE lo fijaba en `top: 30px`; las filas ahora miden ~44px, así
           que el submenú se montaba encima de la etiqueta. */
        top: 100% !important;
        margin-left: 0 !important;
        margin-top: 0 !important;
        padding: 6px !important;
        border-radius: 0 0 var(--gt-r-sm) var(--gt-r-sm) !important;
        background: var(--gt-side-bg-2) !important;
        box-shadow: var(--gt-shadow-lg);
        pointer-events: auto !important;
        z-index: 900 !important;
    }
    /* Cuando el elemento tiene etiqueta visible, el submenú arranca debajo. */
    .sidebar-mini.sidebar-collapse .sidebar-menu > li.treeview:hover > a > span:not(.pull-right) {
        border-radius: 0 var(--gt-r-sm) 0 0;
    }
    .sidebar-mini.sidebar-collapse .sidebar-menu .treeview-menu > li > a {
        padding: 8px 12px !important;
        white-space: normal !important;
        overflow-wrap: anywhere;
        line-height: 1.3;
    }

    /* Puente invisible que cubre cualquier holgura entre la barra y el
       flyout, para que el hover no se pierda al desplazar el mouse. */
    .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover::after {
        content: "";
        position: absolute;
        top: 0;
        left: 100%;
        width: 14px;
        height: 100%;
        z-index: 899;
    }

    /* El contenedor no debe recortar los flyouts. */
    .sidebar-mini.sidebar-collapse .sidebar,
    .sidebar-mini.sidebar-collapse .sidebar-menu,
    .sidebar-mini.sidebar-collapse .main-sidebar {
        overflow: visible !important;
    }
}

/* Overlay para modo móvil (offcanvas) */
.gt-sidebar-overlay {
    display: none;
    position: fixed;
    inset: 0;
    background: rgba(6, 10, 18, .55);
    -webkit-backdrop-filter: blur(2px);
    backdrop-filter: blur(2px);
    z-index: 1030;
}
body.sidebar-open .gt-sidebar-overlay { display: block; }

/* ---- Sidebar en móvil: cajón (drawer) real -------------------------------
   AdminLTE ocultaba la barra con `translate(-180px)` porque medía 180px de
   ancho. Esta capa la ensanchó a 270px sin tocar el desplazamiento, así que
   quedaban ~90px de barra permanentemente encima del contenido (esto es lo
   que tapaba pagos_create_form en el celular). Ahora se desplaza el 100% de
   su ancho y el contenido ya no se empuja: se usa overlay, que además evita
   el scroll horizontal. */
@media (max-width: 767px) {
    .main-sidebar,
    .left-side {
        z-index: 1041 !important;
        width: var(--gt-sidebar-mobile-w) !important;
        max-width: 86vw !important;
        padding-top: 0 !important;
        top: 0 !important;
        height: 100% !important;
        overflow-y: auto !important;
        -webkit-overflow-scrolling: touch;
        transform: translate3d(-100%, 0, 0) !important;
        transition: transform var(--gt-med) !important;
    }
    body.sidebar-open .main-sidebar,
    body.sidebar-open .left-side {
        transform: translate3d(0, 0, 0) !important;
        box-shadow: var(--gt-shadow-lg);
    }

    /* El contenido ya no se desplaza al abrir el menú. */
    .sidebar-open .content-wrapper,
    .sidebar-open .right-side,
    .sidebar-open .main-footer {
        transform: none !important;
        margin-left: 0 !important;
    }

    .gt-sidebar-overlay { z-index: 1040; }

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

/* Scrolling sidebar (accesos rápidos a reportes) */
.scrolling-sidebar {
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    box-shadow: var(--gt-shadow-lg);
}
.scrolling-sidebar-title {
    color: var(--gt-text) !important;
    font-family: var(--gt-font-display);
    font-weight: 800;
    padding: 16px 18px !important;
    border-bottom: 1px solid var(--gt-border);
}
.scrolling-sidebar .list-group-item {
    background: transparent !important;
    border: none !important;
}
.scrolling-sidebar-mask { background: rgba(6, 10, 18, .5) !important; }

/* --------------------------------------------------------------------------
   6. FOOTER
   -------------------------------------------------------------------------- */
.main-footer {
    background: transparent !important;
    border-top: 1px solid var(--gt-border) !important;
    color: var(--gt-text-soft) !important;
    padding: 14px 22px !important;
    font-size: 12.5px;
}
.main-footer .copyright a { color: var(--gt-text-muted) !important; font-weight: 600; }

/* --------------------------------------------------------------------------
   7. BOTONES
   -------------------------------------------------------------------------- */
.btn {
    border-radius: var(--gt-r-sm) !important;
    font-weight: 600 !important;
    letter-spacing: .01em;
    border-width: 1px !important;
    box-shadow: none !important;
    transition: background var(--gt-fast), border-color var(--gt-fast), color var(--gt-fast), transform var(--gt-fast), box-shadow var(--gt-fast) !important;
}
.btn:active { transform: translateY(1px); }
.btn-lg { border-radius: var(--gt-r-md) !important; }
.btn.r-50, .btn.r-100 { border-radius: var(--gt-r-pill) !important; }

.btn-default {
    background: var(--gt-surface) !important;
    border-color: var(--gt-border) !important;
    color: var(--gt-text) !important;
}
.btn-default:hover, .btn-default:focus {
    background: var(--gt-surface-hover) !important;
    border-color: var(--gt-border-strong) !important;
    color: var(--gt-text) !important;
}

.btn-primary {
    background: var(--gt-violet) !important;
    border-color: var(--gt-violet) !important;
    color: #fff !important;
}
.btn-primary:hover, .btn-primary:focus { background: #4f52e0 !important; border-color: #4f52e0 !important; }

.btn-success {
    background: var(--gt-accent) !important;
    border-color: var(--gt-accent) !important;
    color: var(--gt-accent-contrast) !important;
}
.btn-success:hover, .btn-success:focus { background: var(--gt-accent-600) !important; border-color: var(--gt-accent-600) !important; }

.btn-info {
    background: var(--gt-blue) !important;
    border-color: var(--gt-blue) !important;
    color: #fff !important;
}
.btn-info:hover, .btn-info:focus { background: #2f6fe0 !important; border-color: #2f6fe0 !important; }

.btn-warning {
    background: var(--gt-amber) !important;
    border-color: var(--gt-amber) !important;
    color: #241a02 !important;
}
.btn-warning:hover, .btn-warning:focus { background: #dd960a !important; border-color: #dd960a !important; }

.btn-danger {
    background: var(--gt-red) !important;
    border-color: var(--gt-red) !important;
    color: #fff !important;
}
.btn-danger:hover, .btn-danger:focus { background: #dc2626 !important; border-color: #dc2626 !important; }

.btn-link { color: var(--gt-accent) !important; font-weight: 600 !important; }

.btn.disabled, .btn[disabled] { opacity: .55 !important; }

.btn-group .btn { border-radius: var(--gt-r-sm) !important; }
.btn-group-sm > .btn, .btn-sm { border-radius: var(--gt-r-xs) !important; }

.action-button-sm .svg-icon { width: 15px; height: 15px; }

/* --------------------------------------------------------------------------
   8. FORMULARIOS
   -------------------------------------------------------------------------- */
label {
    color: var(--gt-text) !important;
    font-weight: 600 !important;
    font-size: 13px;
}
.form-control {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    color: var(--gt-text) !important;
    border-radius: var(--gt-r-sm) !important;
    box-shadow: none !important;
    height: 40px;
    padding: 8px 12px !important;
    transition: border-color var(--gt-fast), box-shadow var(--gt-fast) !important;
}
textarea.form-control { height: auto !important; }
.form-control::placeholder { color: var(--gt-text-soft) !important; opacity: 1; }
.form-control:focus {
    border-color: var(--gt-accent) !important;
    box-shadow: var(--gt-shadow-focus) var(--gt-accent-ring) !important;
}
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
    background: var(--gt-surface-2) !important;
    color: var(--gt-text-soft) !important;
}
.input-group-addon {
    background: var(--gt-surface-2) !important;
    border: 1px solid var(--gt-border) !important;
    color: var(--gt-text-muted) !important;
    border-radius: var(--gt-r-sm);
}
.input-group input.input-login,
.input-login .form-control { border-radius: 0 var(--gt-r-sm) var(--gt-r-sm) 0 !important; }

.checkbox label, .radio label { font-weight: 500 !important; }

.has-error .form-control { border-color: var(--gt-red) !important; }
.has-error .help-block, .has-error .control-label { color: var(--gt-red) !important; }
.help-block { color: var(--gt-text-soft) !important; }

/* Select2 */
.select2-container--default .select2-selection--single,
.select2-container--default .select2-selection--multiple {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-sm) !important;
    min-height: 40px !important;
}
.select2-container--default .select2-selection--single .select2-selection__rendered {
    color: var(--gt-text) !important;
    line-height: 38px !important;
}
.select2-container--default .select2-selection--single .select2-selection__arrow { height: 38px !important; }
.select2-dropdown {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md) !important;
    box-shadow: var(--gt-shadow-md) !important;
    overflow: hidden;
}
.select2-search--dropdown .select2-search__field {
    background: var(--gt-surface-2) !important;
    border: 1px solid var(--gt-border) !important;
    color: var(--gt-text) !important;
    border-radius: var(--gt-r-xs) !important;
}
.select2-results__option { color: var(--gt-text) !important; }
.select2-container--default .select2-results__option--highlighted[aria-selected] {
    background: var(--gt-accent) !important;
    color: var(--gt-accent-contrast) !important;
}
.select2-container--default .select2-results__option[aria-selected=true] { background: var(--gt-surface-hover) !important; }
.select2-container--default .select2-selection--multiple .select2-selection__choice {
    background: var(--gt-accent-soft) !important;
    border: 1px solid var(--gt-accent-soft-strong) !important;
    color: var(--gt-accent-700) !important;
    border-radius: var(--gt-r-xs) !important;
}

/* Datepicker / Timepicker */
.datepicker.dropdown-menu, .bootstrap-timepicker-widget {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md) !important;
    box-shadow: var(--gt-shadow-md) !important;
    color: var(--gt-text) !important;
}
.datepicker table tr td, .datepicker table tr th { color: var(--gt-text) !important; }
.datepicker table tr td.old, .datepicker table tr td.new { color: var(--gt-text-soft) !important; }
.datepicker table tr td.active.active,
.datepicker table tr td.today { background: var(--gt-accent) !important; color: var(--gt-accent-contrast) !important; background-image: none !important; }
.datepicker table tr td:hover { background: var(--gt-surface-hover) !important; }
.bootstrap-timepicker-widget table td input { background: var(--gt-surface-2) !important; color: var(--gt-text) !important; border: 1px solid var(--gt-border) !important; }

/* --------------------------------------------------------------------------
   9. CAJAS / TARJETAS (box, small-box, info-box)
   -------------------------------------------------------------------------- */
.box {
    background: var(--gt-surface) !important;
    border-top: none !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-lg) !important;
    box-shadow: var(--gt-shadow-sm) !important;
    margin-bottom: 22px;
}
.box.box-solid { border: 1px solid var(--gt-border) !important; }
.box-header {
    padding: 18px 20px !important;
    border-radius: var(--gt-r-lg) var(--gt-r-lg) 0 0;
}
.box-header.with-border { border-bottom: 1px solid var(--gt-border) !important; }
.box-title {
    font-size: 15.5px !important;
    font-weight: 800 !important;
}
.box-body { padding: 20px; color: var(--gt-text); }
.box-body.no-padding { padding: 0 !important; }
.box-footer {
    background: var(--gt-surface-2) !important;
    border-top: 1px solid var(--gt-border) !important;
    border-radius: 0 0 var(--gt-r-lg) var(--gt-r-lg);
    padding: 14px 20px !important;
}
/* Solo los botones-icono de la caja (.btn-box-tool) van sin fondo. Antes
   esta regla alcanzaba a TODOS los .btn dentro de .box-tools, así que los
   botones reales (btn-info, btn-danger, btn-success…) perdían su relleno y
   quedaban con texto blanco sobre cabecera clara: invisibles en modo claro.
   Es lo que ocurría en product.php y expired.php. */
.box-header .box-tools .btn-box-tool { background: transparent !important; }

/* Color de acento superior según variante box-<color> (sutil, moderno) */
.box.box-primary { border-top: 3px solid var(--gt-violet) !important; }
.box.box-info { border-top: 3px solid var(--gt-blue) !important; }
.box.box-success { border-top: 3px solid var(--gt-accent) !important; }
.box.box-warning { border-top: 3px solid var(--gt-amber) !important; }
.box.box-danger { border-top: 3px solid var(--gt-red) !important; }

.nav-tabs-custom {
    background: var(--gt-surface) !important;
    border-radius: var(--gt-r-lg) !important;
    box-shadow: var(--gt-shadow-sm) !important;
    border: 1px solid var(--gt-border) !important;
}
.nav-tabs-custom > .nav-tabs {
    border-bottom: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-lg) var(--gt-r-lg) 0 0;
    background: var(--gt-surface-2) !important;
}
.nav-tabs-custom > .nav-tabs > li > a { color: var(--gt-text-muted) !important; font-weight: 600; border-radius: 0 !important; }
.nav-tabs-custom > .nav-tabs > li.active > a {
    color: var(--gt-accent) !important;
    background: var(--gt-surface) !important;
    border-color: transparent !important;
}
.nav-tabs-custom > .nav-tabs > li.active { border-top-color: var(--gt-accent) !important; }

.small-box {
    border-radius: var(--gt-r-lg) !important;
    box-shadow: var(--gt-shadow-sm) !important;
    overflow: hidden;
}
.small-box > .inner { padding: 20px !important; }
.small-box h3 { font-family: var(--gt-font-display) !important; font-weight: 800 !important; font-size: 28px !important; }
.small-box .icon { opacity: .35 !important; }
.small-box > .small-box-footer {
    background: rgba(0, 0, 0, .08) !important;
    color: #fff !important;
    position: relative;
    z-index: 2;
}

.info-box {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-lg) !important;
    box-shadow: var(--gt-shadow-sm) !important;
}
.info-box-icon { border-radius: var(--gt-r-lg) 0 0 var(--gt-r-lg) !important; }
.info-box-text { color: var(--gt-text-muted) !important; font-weight: 600; }
.info-box-number { color: var(--gt-text) !important; font-family: var(--gt-font-display); font-weight: 800; }
.progress { background: var(--gt-surface-2) !important; border-radius: var(--gt-r-pill) !important; overflow: hidden; }
.progress-bar { background-color: var(--gt-accent) !important; }

.callout {
    border-radius: var(--gt-r-md) !important;
    background: var(--gt-surface-2) !important;
    border-left-width: 4px !important;
}

/* --------------------------------------------------------------------------
   10. TABLAS
   -------------------------------------------------------------------------- */
.table { color: var(--gt-text) !important; }
.table > thead > tr > th {
    border-bottom: 2px solid var(--gt-border) !important;
    color: var(--gt-text-soft) !important;
    font-size: 11.5px !important;
    text-transform: uppercase;
    letter-spacing: .04em;
    font-weight: 700 !important;
    background: var(--gt-surface-2) !important;
    white-space: nowrap;
}
.table > tbody > tr > td, .table > tbody > tr > th {
    border-top: 1px solid var(--gt-border) !important;
    vertical-align: middle !important;
    padding: 11px 12px !important;
}
.table-bordered, .table-bordered > thead > tr > th, .table-bordered > tbody > tr > td {
    border: 1px solid var(--gt-border) !important;
}
.table-striped > tbody > tr:nth-of-type(odd) { background: var(--gt-surface-2) !important; }
.table-hover > tbody > tr:hover { background: var(--gt-surface-hover) !important; }

/* Filas/celdas contextuales de Bootstrap (.active/.success/.info/.warning/.danger):
   por defecto usan fondos pasteles CLAROS fijos (ej. #f2dede, #dff0d8) que en
   modo oscuro, combinados con el texto claro forzado de .table, quedaban
   ilegibles -- tanto en reposo como (sobre todo) al pasar el mouse, donde el
   propio Bootstrap compilado define un hover aún más específico que el
   nuestro. Aquí se igualan esas reglas con selectores de la misma forma para
   garantizar que ganen, con tintes oscuros y texto claro coherente. */
[data-theme="dark"] .table > tbody > tr.active > td,
[data-theme="dark"] .table > tbody > tr > td.active,
[data-theme="dark"] .table > tbody > tr.active > th {
    background-color: rgba(255, 255, 255, .06) !important;
    color: var(--gt-text) !important;
}
[data-theme="dark"] .table > tbody > tr.success > td,
[data-theme="dark"] .table > tbody > tr > td.success,
[data-theme="dark"] .table > tbody > tr.success > th {
    background-color: rgba(16, 185, 129, .16) !important;
    color: #b7f5da !important;
}
[data-theme="dark"] .table > tbody > tr.info > td,
[data-theme="dark"] .table > tbody > tr > td.info,
[data-theme="dark"] .table > tbody > tr.info > th {
    background-color: rgba(59, 130, 246, .16) !important;
    color: #bcdcff !important;
}
[data-theme="dark"] .table > tbody > tr.warning > td,
[data-theme="dark"] .table > tbody > tr > td.warning,
[data-theme="dark"] .table > tbody > tr.warning > th {
    background-color: rgba(245, 158, 11, .16) !important;
    color: #ffdca3 !important;
}
[data-theme="dark"] .table > tbody > tr.danger > td,
[data-theme="dark"] .table > tbody > tr > td.danger,
[data-theme="dark"] .table > tbody > tr.danger > th {
    background-color: rgba(239, 68, 68, .16) !important;
    color: #ffc4c4 !important;
}

/* Mismas filas, al pasar el mouse (hover) */
[data-theme="dark"] .table-hover > tbody > tr.active:hover > td,
[data-theme="dark"] .table-hover > tbody > tr:hover > .active,
[data-theme="dark"] .table-hover > tbody > tr > td.active:hover {
    background-color: rgba(255, 255, 255, .1) !important;
    color: var(--gt-text) !important;
}
[data-theme="dark"] .table-hover > tbody > tr.success:hover > td,
[data-theme="dark"] .table-hover > tbody > tr:hover > .success,
[data-theme="dark"] .table-hover > tbody > tr > td.success:hover {
    background-color: rgba(16, 185, 129, .26) !important;
    color: #d2fbe9 !important;
}
[data-theme="dark"] .table-hover > tbody > tr.info:hover > td,
[data-theme="dark"] .table-hover > tbody > tr:hover > .info,
[data-theme="dark"] .table-hover > tbody > tr > td.info:hover {
    background-color: rgba(59, 130, 246, .26) !important;
    color: #dbebff !important;
}
[data-theme="dark"] .table-hover > tbody > tr.warning:hover > td,
[data-theme="dark"] .table-hover > tbody > tr:hover > .warning,
[data-theme="dark"] .table-hover > tbody > tr > td.warning:hover {
    background-color: rgba(245, 158, 11, .26) !important;
    color: #ffe8c2 !important;
}
[data-theme="dark"] .table-hover > tbody > tr.danger:hover > td,
[data-theme="dark"] .table-hover > tbody > tr:hover > .danger,
[data-theme="dark"] .table-hover > tbody > tr > td.danger:hover {
    background-color: rgba(239, 68, 68, .26) !important;
    color: #ffdada !important;
}
.table > tfoot > tr > td, .table > tfoot > tr > th {
    border-top: 2px solid var(--gt-border) !important;
    font-weight: 700;
}

/* DataTables */
.dataTables_wrapper { color: var(--gt-text) !important; }
.dataTables_wrapper .dataTables_filter input,
.dataTables_wrapper .dataTables_length select {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    color: var(--gt-text) !important;
    border-radius: var(--gt-r-sm) !important;
    padding: 6px 10px !important;
}
.dataTables_wrapper .dataTables_info,
.dataTables_wrapper .dataTables_length,
.dataTables_wrapper .dataTables_filter label { color: var(--gt-text-muted) !important; }
.dataTables_wrapper .dataTables_paginate .paginate_button {
    border-radius: var(--gt-r-sm) !important;
    border: 1px solid transparent !important;
    color: var(--gt-text-muted) !important;
    margin: 0 2px;
}
.dataTables_wrapper .dataTables_paginate .paginate_button.current,
.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
    background: var(--gt-accent) !important;
    border-color: var(--gt-accent) !important;
    color: var(--gt-accent-contrast) !important;
}
.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
    background: var(--gt-surface-hover) !important;
    color: var(--gt-text) !important;
    border-color: var(--gt-border) !important;
}
.dataTables_wrapper .dt-buttons .dt-button,
.dataTables_wrapper .dt-button {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    color: var(--gt-text) !important;
    border-radius: var(--gt-r-sm) !important;
}
.dataTables_wrapper .dt-buttons .dt-button:hover { background: var(--gt-surface-hover) !important; }
table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:after { opacity: .55; }

.pagination > li > a, .pagination > li > span {
    color: var(--gt-text-muted) !important;
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
}
.pagination > .active > a, .pagination > .active > span {
    background: var(--gt-accent) !important;
    border-color: var(--gt-accent) !important;
    color: var(--gt-accent-contrast) !important;
}
.pagination > li:first-child > a, .pagination > li:first-child > span { border-radius: var(--gt-r-sm) 0 0 var(--gt-r-sm) !important; }
.pagination > li:last-child > a, .pagination > li:last-child > span { border-radius: 0 var(--gt-r-sm) var(--gt-r-sm) 0 !important; }

/* --------------------------------------------------------------------------
   11. ALERTAS / BADGES / LABELS
   -------------------------------------------------------------------------- */
.alert {
    border-radius: var(--gt-r-md) !important;
    border: 1px solid transparent !important;
    font-weight: 500;
}
.alert-success { background: var(--gt-accent-soft) !important; color: var(--gt-accent-700) !important; border-color: var(--gt-accent-soft-strong) !important; }
.alert-danger  { background: var(--gt-red-soft) !important; color: #b91c1c !important; border-color: rgba(239,68,68,.25) !important; }
[data-theme="dark"] .alert-danger { color: #fca5a5 !important; }
.alert-warning { background: rgba(245, 158, 11, .12) !important; color: #92620a !important; border-color: rgba(245,158,11,.3) !important; }
[data-theme="dark"] .alert-warning { color: #fbbf74 !important; }
.alert-info    { background: rgba(59, 130, 246, .1) !important; color: #1d4ed8 !important; border-color: rgba(59,130,246,.25) !important; }
[data-theme="dark"] .alert-info { color: #93c5fd !important; }

.label { border-radius: var(--gt-r-xs) !important; font-weight: 700 !important; padding: 3px 8px !important; }
.label-success { background: var(--gt-accent) !important; color: var(--gt-accent-contrast) !important; }
.label-danger { background: var(--gt-red) !important; }
.label-warning { background: var(--gt-amber) !important; color: #241a02 !important; }
.label-info { background: var(--gt-blue) !important; }
.label-primary { background: var(--gt-violet) !important; }
.label-default { background: var(--gt-surface-2) !important; color: var(--gt-text-muted) !important; border: 1px solid var(--gt-border); }

.badge { border-radius: var(--gt-r-pill) !important; font-weight: 700 !important; }

/* --------------------------------------------------------------------------
   12. MODALES / DROPDOWNS / TOOLTIPS
   -------------------------------------------------------------------------- */
.modal-content {
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    border-radius: var(--gt-r-lg) !important;
    border: 1px solid var(--gt-border) !important;
    box-shadow: var(--gt-shadow-lg) !important;
}
.modal-header {
    border-bottom: 1px solid var(--gt-border) !important;
    padding: 18px 22px !important;
}
.modal-title { font-family: var(--gt-font-display) !important; font-weight: 800 !important; }
.modal-body { padding: 20px 22px !important; }
.modal-footer {
    border-top: 1px solid var(--gt-border) !important;
    padding: 14px 22px !important;
}
.modal-backdrop { background: #050810 !important; }
.modal-backdrop.in { opacity: .65 !important; }
.close { color: var(--gt-text) !important; text-shadow: none !important; opacity: .6; }
.close:hover { opacity: 1; color: var(--gt-text) !important; }

.dropdown-menu {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md) !important;
    box-shadow: var(--gt-shadow-md) !important;
    padding: 6px !important;
}
.dropdown-menu > li > a { color: var(--gt-text) !important; border-radius: var(--gt-r-xs) !important; padding: 8px 10px !important; }
.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { background: var(--gt-surface-hover) !important; }
.dropdown-menu .divider { background: var(--gt-border) !important; }

.tooltip-inner { background: var(--gt-text) !important; color: var(--gt-bg) !important; border-radius: var(--gt-r-xs) !important; }
.popover {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md) !important;
    box-shadow: var(--gt-shadow-md) !important;
    color: var(--gt-text) !important;
}
.popover-title { background: var(--gt-surface-2) !important; border-bottom: 1px solid var(--gt-border) !important; }

/* Toastr */
#toast-container > div { border-radius: var(--gt-r-md) !important; box-shadow: var(--gt-shadow-lg) !important; opacity: .98 !important; }
.toast-success { background-color: var(--gt-accent-600) !important; }
.toast-error { background-color: var(--gt-red) !important; }
.toast-info { background-color: var(--gt-blue) !important; }
.toast-warning { background-color: var(--gt-amber) !important; }

/* Sweetalert (v1) */
.sweet-alert {
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    border-radius: var(--gt-r-lg) !important;
    box-shadow: var(--gt-shadow-lg) !important;
}
.sweet-alert h2 { color: var(--gt-text) !important; }
.sweet-alert p { color: var(--gt-text-muted) !important; }

/* --------------------------------------------------------------------------
   13. LOGIN / LOCKSCREEN / SELECCIÓN DE TIENDA
   -------------------------------------------------------------------------- */
/* El fondo del login usa tokens propios (--gt-login-*) en lugar de
   --gt-side-bg, que permanece oscuro en ambos modos. Así el modo claro
   sí se aclara por completo. */
body.login-page {
    background: var(--gt-login-bg) !important;
    background-attachment: fixed !important;
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 24px;
    position: relative;
    overflow-x: hidden;
}

/* Capa decorativa: aurora suave que da profundidad sin tapar el formulario. */
body.login-page::before {
    content: "";
    position: fixed;
    inset: -20% -10%;
    background: var(--gt-login-aurora);
    filter: blur(70px);
    opacity: var(--gt-login-aurora-opacity);
    pointer-events: none;
    z-index: 0;
    animation: gtAuroraDrift 22s ease-in-out infinite alternate;
}

/* Rejilla técnica muy tenue, solo en oscuro, para dar textura. */
body.login-page::after {
    content: "";
    position: fixed;
    inset: 0;
    background-image:
        linear-gradient(var(--gt-login-grid) 1px, transparent 1px),
        linear-gradient(90deg, var(--gt-login-grid) 1px, transparent 1px);
    background-size: 46px 46px;
    -webkit-mask-image: radial-gradient(ellipse at 50% 40%, #000 0%, transparent 72%);
    mask-image: radial-gradient(ellipse at 50% 40%, #000 0%, transparent 72%);
    pointer-events: none;
    z-index: 0;
}

@keyframes gtAuroraDrift {
    0%   { transform: translate3d(0, 0, 0) scale(1); }
    100% { transform: translate3d(2%, -3%, 0) scale(1.08); }
}

@media (prefers-reduced-motion: reduce) {
    body.login-page::before { animation: none; }
}

body.login-page > * { position: relative; z-index: 1; }
.login-box, .login-card {
    background: var(--gt-login-card) !important;
    -webkit-backdrop-filter: blur(18px) saturate(140%);
    backdrop-filter: blur(18px) saturate(140%);
    border-radius: var(--gt-r-xl) !important;
    box-shadow: var(--gt-login-card-shadow) !important;
    border: 1px solid var(--gt-login-card-border) !important;
    width: 380px;
    max-width: 100%;
    padding: 8px 0 0 0;
    overflow: hidden;
}

/* Filo superior de acento: detalle de marca en ambos modos. */
.login-box::before, .login-card::before {
    content: "";
    display: block;
    height: 3px;
    margin: -8px 0 0;
    background: linear-gradient(90deg, var(--gt-accent), var(--gt-teal), var(--gt-violet));
}
.login-logo {
    text-align: center;
    padding: 34px 24px 10px;
}
.login-logo .logo-img img { max-width: 92px; margin-bottom: 10px; }
.login-logo .store-name {
    color: var(--gt-text) !important;
    font-family: var(--gt-font-display);
    font-weight: 800;
    font-size: 19px;
}
.login-box-body { padding: 14px 30px 26px !important; }
.login-box-msg {
    text-align: center;
    color: var(--gt-text-soft) !important;
    margin-bottom: 18px !important;
    text-transform: uppercase;
    font-size: 12px;
    letter-spacing: .08em;
}
.login-box-body .svg-icon { width: 17px; height: 17px; color: var(--gt-text-soft); }
.alert-login { border-radius: var(--gt-r-md) !important; margin: 0 30px 14px !important; }
.btn-login {
    height: 46px !important;
    border-radius: var(--gt-r-sm) !important;
    font-size: 15px !important;
    margin-top: 6px;
    box-shadow: var(--gt-shadow-sm) !important;
}
.login-box .copyright, .login-card .copyright {
    text-align: center;
    padding: 14px 20px 22px;
    color: var(--gt-text-soft) !important;
    font-size: 12px;
}
.login-box .copyright a, .login-card .copyright a { color: var(--gt-text-muted) !important; }

/* Selección de tienda */
.store-list { max-height: 360px; }
.store-list .list-group-item {
    background: var(--gt-surface) !important;
    border: none !important;
    border-bottom: 1px solid var(--gt-border) !important;
    padding: 0 !important;
}
.store-list .list-group-item a.activate-store {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 14px 22px;
    color: var(--gt-text) !important;
    font-weight: 600;
    transition: background var(--gt-fast);
}
.store-list .list-group-item a.activate-store:hover { background: var(--gt-surface-hover) !important; }
.store-icon .svg-icon { width: 20px; height: 20px; color: var(--gt-accent); }
.store-name { flex: 1; }

/* Lockscreen (hereda .login-page) */
.lockscreen-logo, .lockscreen-name { color: var(--gt-text) !important; }
.lockscreen-item {
    background: var(--gt-surface) !important;
    border-radius: var(--gt-r-xl) !important;
    box-shadow: var(--gt-shadow-lg) !important;
    border: 1px solid var(--gt-border);
}
.lockscreen-image img { border-radius: 50% !important; box-shadow: var(--gt-shadow-md); }
.lockscreen-credentials .form-control { background: var(--gt-surface-2) !important; }

/* --------------------------------------------------------------------------
   14. PANTALLA POS
   -------------------------------------------------------------------------- */
.pos-body, body.right-panel, body.left-panel { background: var(--gt-bg) !important; }

#pos-content, .pos-wrapper, .products-content {
    background: transparent !important;
}
.product-item, .item-box, .single-product {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md) !important;
    box-shadow: var(--gt-shadow-xs) !important;
    transition: transform var(--gt-fast), box-shadow var(--gt-fast), border-color var(--gt-fast) !important;
    overflow: hidden;
}
.product-item:hover, .item-box:hover, .single-product:hover {
    transform: translateY(-2px);
    box-shadow: var(--gt-shadow-md) !important;
    border-color: var(--gt-accent) !important;
}
.product-item .name, .item-box .name { color: var(--gt-text) !important; font-weight: 600; }
.product-item .price, .item-box .price { color: var(--gt-accent) !important; font-weight: 800; }

.pos-category, .category-list li, .nav-category > li > a {
    border-radius: var(--gt-r-pill) !important;
}
.category-list li.active a, .nav-category > li.active > a {
    background: var(--gt-accent) !important;
    color: var(--gt-accent-contrast) !important;
}

.cart-panel, .order-panel, #cart, .side-panel {
    background: var(--gt-surface) !important;
    border-left: 1px solid var(--gt-border) !important;
}
.cart-item, .order-item-row { border-bottom: 1px solid var(--gt-border) !important; }
.cart-total, .order-summary {
    background: var(--gt-surface-2) !important;
    border-top: 1px solid var(--gt-border) !important;
}
.numpad button, .keypad button, .num-key {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    color: var(--gt-text) !important;
    border-radius: var(--gt-r-sm) !important;
}
.numpad button:hover, .keypad button:hover, .num-key:hover { background: var(--gt-surface-hover) !important; }

/* --------------------------------------------------------------------------
   15. FILTER BOX / SEARCH PANEL
   -------------------------------------------------------------------------- */
#filter-box, .filter-box {
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    box-shadow: var(--gt-shadow-lg) !important;
    border-left: 1px solid var(--gt-border) !important;
}

/* Perfect scrollbar rail (tema oscuro) */
.ps__rail-y, .ps__rail-x { background: transparent !important; }
.ps__thumb-y, .ps__thumb-x { background: var(--gt-scrollbar) !important; }

/* --------------------------------------------------------------------------
   16. ICONOS SVG GENERALES
   -------------------------------------------------------------------------- */
.svg-icon { fill: currentColor; }
[data-theme="dark"] .svg-icon:not(.gt-theme-toggle *) { filter: none; }

/* --------------------------------------------------------------------------
   17. RESPONSIVE — MÓVIL Y TABLET
   -------------------------------------------------------------------------- */

/* Tablets */
@media (max-width: 1024px) {
    .content { padding: 8px 18px 20px !important; }
    .box-header, .box-body { padding: 16px !important; }
    .col-md-3, .col-md-4 { margin-bottom: 14px; }
}

/* Móviles y tablets pequeñas: sidebar off-canvas con overlay */
@media (max-width: 767px) {
    .main-header .logo { width: auto !important; padding: 0 14px !important; }
    .main-header .navbar { margin-left: 0 !important; }
    .main-header .navbar-nav > li > a span.text { display: none; }
    .main-header .navbar-nav > li.sell-btn > a { padding: 0 12px !important; }
    .main-header .navbar-nav > li.sell-btn > a span.text { display: inline; }

    .content-header > h1 { font-size: 18px !important; }

    .box { border-radius: var(--gt-r-md) !important; margin-bottom: 14px; }
    .box-header, .box-body, .box-footer { padding: 14px !important; }

    .table-responsive { border: none !important; }

    .modal-dialog { margin: 10px !important; }

    .login-box, .login-card { border-radius: var(--gt-r-lg) !important; }
    .login-box-body { padding: 10px 20px 20px !important; }

    .btn { padding: 8px 14px !important; }

    .small-box > .inner { padding: 16px !important; }
    .small-box h3 { font-size: 22px !important; }
}

@media (max-width: 480px) {
    .content { padding: 6px 12px 16px !important; }
    .content-header { padding: 14px 12px 2px !important; }
    .box-header, .box-body, .box-footer { padding: 12px !important; }
    .gt-theme-toggle { padding: 0 8px !important; }
}

/* En pantallas muy pequeñas la app transforma las DataTables en "tarjetas"
   apiladas (ver responsive.css: .dataTable td:before { content: attr(data-title) })
   con colores fijos claros que no se adaptaban al modo oscuro. */
[data-theme="dark"] .dataTable tr {
    border-color: var(--gt-border) !important;
    background: var(--gt-surface) !important;
}
[data-theme="dark"] .dataTable td {
    border-bottom-color: var(--gt-border) !important;
    color: var(--gt-text) !important;
}
[data-theme="dark"] .dataTable td:before {
    color: var(--gt-text) !important;
    background: var(--gt-surface-2) !important;
}

/* Reporte resumen (#overview-report) también se convierte en tarjetas en
   móvil con fondo blanco fijo. */
[data-theme="dark"] #overview-report table,
[data-theme="dark"] #overview-report table tr {
    background: var(--gt-surface) !important;
}
[data-theme="dark"] #overview-report table td,
[data-theme="dark"] #overview-report table td.o-50 {
    border-color: var(--gt-border) !important;
    color: var(--gt-text) !important;
}

/* Píldoras de longitud/filtro de DataTables en móvil (≤610px, ver
   responsive.css) usan un gris claro fijo. */
[data-theme="dark"] .dataTables_length,
[data-theme="dark"] .dataTables_filter {
    background: var(--gt-surface-2) !important;
}

/* Mejora de zonas táctiles en pantallas táctiles */
@media (hover: none) and (pointer: coarse) {
    .btn, .sidebar-menu > li > a, .dataTables_wrapper .dt-button, .paginate_button {
        min-height: 40px;
    }
}

/* --------------------------------------------------------------------------
   18. UTILIDADES
   -------------------------------------------------------------------------- */
.gt-text-muted { color: var(--gt-text-muted) !important; }
.gt-card-flat {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-lg) !important;
    box-shadow: var(--gt-shadow-sm) !important;
}

/* --------------------------------------------------------------------------
   19. TOGGLE DE TEMA FLOTANTE (pantallas sin topbar: login, lockscreen, etc.)
   -------------------------------------------------------------------------- */
.gt-theme-toggle-floating {
    position: fixed;
    top: 18px;
    right: 18px;
    height: auto !important;
    padding: 8px !important;
    background: var(--gt-surface) !important;
    border-radius: var(--gt-r-pill) !important;
    box-shadow: var(--gt-shadow-md) !important;
    border: 1px solid var(--gt-border) !important;
    z-index: 60;
}
@media (max-width: 480px) {
    .gt-theme-toggle-floating { top: 12px; right: 12px; }
}

/* --------------------------------------------------------------------------
   20. SIDEBAR — BUSCADOR Y ENCABEZADOS DE SECCIÓN (mejora estructural real)
   -------------------------------------------------------------------------- */
.sidebar-search {
    position: relative;
    margin: 4px 14px 10px;
}
.sidebar-search-icon {
    position: absolute;
    left: 11px;
    top: 50%;
    transform: translateY(-50%);
    width: 15px;
    height: 15px;
    color: var(--gt-side-icon);
    pointer-events: none;
}
.sidebar-search-input {
    width: 100%;
    background: rgba(255, 255, 255, .05);
    border: 1px solid var(--gt-side-border);
    color: #fff;
    border-radius: var(--gt-r-pill);
    padding: 8px 12px 8px 34px;
    font-size: 12.5px;
    outline: none;
    transition: background var(--gt-fast), border-color var(--gt-fast);
}
.sidebar-search-input::placeholder { color: var(--gt-side-text); opacity: .8; }
.sidebar-search-input:focus {
    background: rgba(255, 255, 255, .09);
    border-color: var(--gt-accent);
}

.sidebar-menu > li.header {
    padding: 14px 16px 6px !important;
    font-size: 10.5px !important;
    font-weight: 800 !important;
    letter-spacing: .09em;
    text-transform: uppercase;
    color: var(--gt-side-icon) !important;
    background: transparent !important;
    pointer-events: none;
}
.sidebar-menu > li.header:first-child { padding-top: 4px !important; }

/* Resultado del buscador: oculta elementos no coincidentes */
.sidebar-menu li.gt-search-hide { display: none !important; }
.sidebar-menu .treeview-menu.gt-search-open { display: block !important; }

/* Aviso de "sin resultados" */
.sidebar-search-empty {
    display: none;
    color: var(--gt-side-text);
    font-size: 12px;
    padding: 10px 20px;
    text-align: center;
}
.sidebar-search-empty.is-visible { display: block; }

/* --------------------------------------------------------------------------
   21. ACCESOS RÁPIDOS DEL DASHBOARD (action_buttons.php / .panel-app)
   -------------------------------------------------------------------------- */
.panel-app {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-lg) !important;
    box-shadow: var(--gt-shadow-xs) !important;
    transition: transform var(--gt-fast), box-shadow var(--gt-fast), border-color var(--gt-fast) !important;
    overflow: hidden;
}
.panel-app:hover {
    transform: translateY(-3px);
    box-shadow: var(--gt-shadow-md) !important;
    border-color: var(--gt-accent) !important;
}
.panel-app .panel-body {
    padding: 18px 12px !important;
}
.panel-app a.panel-app-link {
    display: block;
    text-decoration: none;
}
.panel-app .icon {
    display: flex !important;
    align-items: center;
    justify-content: center;
    margin: 0 auto 10px;
    width: 52px;
    height: 52px;
    border-radius: var(--gt-r-md);
    font-size: 24px;
    line-height: 1;
    color: var(--gt-accent);
    /* Tinte de acento en ambos modos. El sprite icon.svg puede traer rellenos
       fijos, así que en la sección 23 se normaliza su color por filtro; ya no
       hace falta forzar un fondo claro en oscuro. */
    background: var(--gt-accent-soft);
    border: 1px solid transparent;
    transition: background var(--gt-fast), transform var(--gt-fast), border-color var(--gt-fast);
}
.panel-app:hover .icon {
    background: var(--gt-accent-soft-strong);
    transform: scale(1.05);
}
.panel-app .icon img,
.panel-app .icon svg {
    width: 26px !important;
    height: 26px !important;
    display: inline-block;
}
.panel-app .small.small2 {
    display: block;
    text-align: center;
    font-size: 12.5px !important;
    font-weight: 700;
    color: var(--gt-text) !important;
    letter-spacing: .01em;
    line-height: 1.3;
}
[data-theme="dark"] .panel-app .icon {
    background: var(--gt-accent-soft);
    border-color: rgba(47, 219, 160, .22);
}

/* --------------------------------------------------------------------------
   22. COMPONENTES BOOTSTRAP SIN CUBRIR (well, list-group, panel genérico)
   Usados en varias pantallas (store_single, analytics, backup_restore,
   user_profile, supplier_profile, footer/filter-box, etc.) que antes se
   quedaban con el blanco/gris claro por defecto de Bootstrap 3 en modo
   oscuro.
   -------------------------------------------------------------------------- */
.well {
    background: var(--gt-surface-2) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md) !important;
    box-shadow: none !important;
    color: var(--gt-text) !important;
}
.well-sm { border-radius: var(--gt-r-sm) !important; }

.list-group-item {
    background: var(--gt-surface) !important;
    border-color: var(--gt-border) !important;
    color: var(--gt-text) !important;
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
    background: var(--gt-accent) !important;
    border-color: var(--gt-accent) !important;
    color: var(--gt-accent-contrast) !important;
}
a.list-group-item:hover,
a.list-group-item:focus {
    background: var(--gt-surface-hover) !important;
    color: var(--gt-text) !important;
}

.panel:not(.panel-app) {
    background: var(--gt-surface) !important;
    border-color: var(--gt-border) !important;
    border-radius: var(--gt-r-md) !important;
    box-shadow: var(--gt-shadow-sm) !important;
    color: var(--gt-text) !important;
}
.panel:not(.panel-app) > .panel-heading {
    border-color: var(--gt-border) !important;
    border-top-left-radius: var(--gt-r-md) !important;
    border-top-right-radius: var(--gt-r-md) !important;
}
.panel:not(.panel-app) > .panel-body { color: var(--gt-text) !important; }
.panel:not(.panel-app) > .panel-footer {
    background: var(--gt-surface-2) !important;
    border-color: var(--gt-border) !important;
}

/* ==========================================================================
   23. CORRECCIONES DE CONTRASTE, LAYOUT Y MODO OSCURO
   Esta sección va al final a propósito: al tener la misma especificidad que
   las reglas anteriores, gana por orden de cascada y sirve como capa única
   de correcciones sobre AdminLTE 2 / Bootstrap 3 y los skins.
   ========================================================================== */

/* --------------------------------------------------------------------------
   23.1 ICONOS SVG DEL SPRITE (icon.svg)
   El sprite se referencia como #icon-<nombre>-<base_color>, donde base_color
   es una preferencia del usuario (black/blue/green/red/yellow) con rellenos
   FIJOS. Por eso algunos íconos desaparecían: relleno claro sobre topbar
   clara, u oscuro sobre fondo oscuro. Como no se puede recolorear el
   contenido de un <use> con rellenos fijos, se normaliza por filtro:
   `brightness(0)` aplana cualquier color a negro conservando el alfa, y a
   partir de ahí se decide el tono final. Funciona sea cual sea el sprite.
   -------------------------------------------------------------------------- */
.main-header .navbar-nav > li > a .svg-icon,
.main-header .navbar-nav > li > a > svg {
    filter: brightness(0) saturate(100%) opacity(.62);
    transition: filter var(--gt-fast);
}
.main-header .navbar-nav > li > a:hover .svg-icon,
.main-header .navbar-nav > li.active > a .svg-icon {
    filter: brightness(0) saturate(100%) opacity(1);
}
[data-theme="dark"] .main-header .navbar-nav > li > a .svg-icon,
[data-theme="dark"] .main-header .navbar-nav > li > a > svg {
    filter: brightness(0) invert(1) opacity(.72);
}
[data-theme="dark"] .main-header .navbar-nav > li > a:hover .svg-icon,
[data-theme="dark"] .main-header .navbar-nav > li.active > a .svg-icon {
    filter: brightness(0) invert(1) opacity(1);
}

/* El botón CTA (POS / ajustes) va sobre fondo de acento: ícono siempre claro. */
.main-header .navbar-nav > li.sell-btn > a .svg-icon,
[data-theme="dark"] .main-header .navbar-nav > li.sell-btn > a .svg-icon {
    filter: brightness(0) invert(1) opacity(1);
}

/* Íconos del menú lateral (la barra es oscura en ambos modos). */
.sidebar-menu > li > a > .svg-icon,
.sidebar-menu .treeview-menu > li > a > .svg-icon,
.user-panel > .image .svg-icon {
    filter: brightness(0) invert(1) opacity(.55);
    transition: filter var(--gt-fast);
}
.sidebar-menu > li:hover > a > .svg-icon,
.sidebar-menu > li.active > a > .svg-icon,
.sidebar-menu .treeview-menu > li:hover > a > .svg-icon,
.sidebar-menu .treeview-menu > li.active > a > .svg-icon {
    filter: brightness(0) invert(1) opacity(1);
}

/* Íconos de los accesos rápidos del dashboard: verde de marca en claro,
   verde luminoso en oscuro. */
.panel-app .icon .svg-icon,
.panel-app .icon svg {
    filter: brightness(0) saturate(100%) invert(45%) sepia(85%) saturate(420%) hue-rotate(115deg) brightness(92%) contrast(92%);
}
[data-theme="dark"] .panel-app .icon .svg-icon,
[data-theme="dark"] .panel-app .icon svg {
    filter: brightness(0) saturate(100%) invert(78%) sepia(38%) saturate(720%) hue-rotate(105deg) brightness(102%) contrast(96%);
}

/* Íconos dentro del formulario de login / selector de tienda. */
.login-box-body .svg-icon,
.store-icon .svg-icon {
    filter: brightness(0) saturate(100%) opacity(.55);
}
[data-theme="dark"] .login-box-body .svg-icon,
[data-theme="dark"] .store-icon .svg-icon {
    filter: brightness(0) invert(1) opacity(.72);
}

/* --------------------------------------------------------------------------
   23.2 TOPBAR — COMPACTA Y EN UNA SOLA LÍNEA
   Con ~12 elementos a 62px de alto y padding generoso, la barra desbordaba y
   AdminLTE permitía una segunda fila (max-height: 100px). Ahora la fila es
   flex, no se envuelve y hace scroll horizontal solo si de verdad no cabe.
   -------------------------------------------------------------------------- */
.main-header {
    max-height: var(--gt-topbar-h) !important;
}
.main-header > .navbar {
    min-height: var(--gt-topbar-h) !important;
    height: var(--gt-topbar-h);
}
.main-header .navbar-custom-menu {
    float: right;
    max-width: calc(100% - 60px);
}
.main-header .navbar-custom-menu > .navbar-nav,
.main-header .navbar-nav.navbar-left {
    display: flex !important;
    flex-wrap: nowrap !important;
    align-items: center;
    margin: 0 !important;
}
.main-header .navbar-custom-menu > .navbar-nav > li,
.main-header .navbar-nav.navbar-left > li {
    float: none !important;
    flex: 0 0 auto;
}
.main-header .navbar-nav > li > a {
    padding: 0 8px !important;
    height: var(--gt-topbar-h);
    white-space: nowrap;
}
.main-header .navbar-nav > li > a .label {
    margin-left: 2px;
    font-size: 10px;
    padding: 1px 5px !important;
}
.main-header .svg-icon {
    width: 17px;
    height: 17px;
}
.main-header .navbar-nav > li > a .fa {
    font-size: 15px;
}
/* Etiquetas de texto: se muestran solo cuando hay espacio real. */
.main-header .navbar-nav > li > a span.text {
    font-size: 12.5px;
    font-weight: 600;
    margin-left: 6px;
}
@media (max-width: 1400px) {
    .main-header .navbar-nav > li:not(.sell-btn) > a span.text { display: none; }
}
/* Botones CTA más discretos para que no dominen la barra. */
.main-header .navbar-nav > li.sell-btn { margin: 0 3px; }
.main-header .navbar-nav > li.sell-btn > a {
    height: 34px !important;
    margin-top: 10px;
    padding: 0 12px !important;
    font-size: 12.5px;
}
.main-header .navbar .sidebar-toggle {
    height: var(--gt-topbar-h);
    padding: 0 14px !important;
}
#live_datetime { font-size: 12px; }
.main-header .navbar-nav > li > a img.language-img,
.main-header .navbar-left img { max-height: 16px; }
.gt-theme-toggle { height: var(--gt-topbar-h) !important; padding: 0 8px !important; }

/* Alinea la barra lateral y el contenido con la nueva altura de topbar
   (AdminLTE tenía 40px cableado y quedaba un salto). */
.main-sidebar, .left-side { padding-top: var(--gt-topbar-h); }
.main-header > .logo { width: var(--gt-sidebar-w); }

/* --------------------------------------------------------------------------
   23.3 BOTÓN COLAPSAR/EXPANDIR SIDEBAR
   main.css lo dibuja como un triángulo CSS con `border-*: 8px solid #ffffff`,
   es decir blanco sobre una topbar blanca: invisible en modo claro. Se
   sustituye por un ícono hamburguesa con currentColor, visible en ambos modos.
   -------------------------------------------------------------------------- */
.sidebar-mini .sidebar-toggle,
.sidebar-collapse .sidebar-toggle,
.skin-black.sidebar-mini .sidebar-toggle,
.skin-black.sidebar-collapse .sidebar-toggle {
    text-indent: 0 !important;
    position: relative;
    color: var(--gt-text-muted) !important;
}
.sidebar-mini .sidebar-toggle:after,
.sidebar-collapse .sidebar-toggle:after,
.skin-black.sidebar-mini .sidebar-toggle:after,
.skin-black.sidebar-collapse .sidebar-toggle:after,
.skin-blue.sidebar-mini .sidebar-toggle:after,
.skin-blue.sidebar-collapse .sidebar-toggle:after,
.skin-green.sidebar-mini .sidebar-toggle:after,
.skin-green.sidebar-collapse .sidebar-toggle:after,
.skin-red.sidebar-mini .sidebar-toggle:after,
.skin-red.sidebar-collapse .sidebar-toggle:after,
.skin-yellow.sidebar-mini .sidebar-toggle:after,
.skin-yellow.sidebar-collapse .sidebar-toggle:after {
    content: "" !important;
    border: 0 !important;
    position: static !important;
    margin: 0 !important;
}
.main-header .navbar .sidebar-toggle .sr-only {
    position: static !important;
    width: auto !important;
    height: auto !important;
    overflow: visible !important;
    clip: auto !important;
    font-size: 0 !important;
    line-height: 0 !important;
}
/* Hamburguesa dibujada con currentColor: hereda el color del tema. */
.main-header .navbar .sidebar-toggle .sr-only::before {
    content: "";
    display: block;
    width: 19px;
    height: 15px;
    background-color: currentColor;
    -webkit-mask: linear-gradient(currentColor, currentColor) top/100% 2.6px no-repeat,
                  linear-gradient(currentColor, currentColor) center/100% 2.6px no-repeat,
                  linear-gradient(currentColor, currentColor) bottom/100% 2.6px no-repeat;
    mask: linear-gradient(currentColor, currentColor) top/100% 2.6px no-repeat,
          linear-gradient(currentColor, currentColor) center/100% 2.6px no-repeat,
          linear-gradient(currentColor, currentColor) bottom/100% 2.6px no-repeat;
    border-radius: 1px;
}
[data-theme="dark"] .main-header .navbar .sidebar-toggle,
[data-theme="dark"] .skin-black .main-header > .navbar .sidebar-toggle {
    color: var(--gt-text) !important;
}
.main-header .navbar .sidebar-toggle:hover { color: var(--gt-accent) !important; }

/* --------------------------------------------------------------------------
   23.4 MAIN-HEADER EN MODO OSCURO
   Los skins (.skin-black/.skin-blue/...) definen la navbar con selectores más
   específicos que los de la sección 4, así que en oscuro seguían imponiendo
   su color. Se igualan aquí con la misma forma de selector.
   -------------------------------------------------------------------------- */
[data-theme="dark"] .main-header > .navbar,
[data-theme="dark"] .skin-black .main-header > .navbar,
[data-theme="dark"] .skin-blue .main-header > .navbar,
[data-theme="dark"] .skin-green .main-header > .navbar,
[data-theme="dark"] .skin-red .main-header > .navbar,
[data-theme="dark"] .skin-yellow .main-header > .navbar {
    background: var(--gt-top-bg) !important;
    border-bottom: 1px solid var(--gt-top-border) !important;
}
[data-theme="dark"] .skin-black .main-header > .navbar .nav > li > a,
[data-theme="dark"] .skin-blue .main-header > .navbar .nav > li > a,
[data-theme="dark"] .skin-green .main-header > .navbar .nav > li > a,
[data-theme="dark"] .skin-red .main-header > .navbar .nav > li > a,
[data-theme="dark"] .skin-yellow .main-header > .navbar .nav > li > a {
    color: var(--gt-text-muted) !important;
    background: transparent !important;
}
[data-theme="dark"] .skin-black .main-header > .navbar .nav > li > a:hover,
[data-theme="dark"] .skin-black .main-header > .navbar .nav > li > a:focus,
[data-theme="dark"] .skin-black .main-header > .navbar .nav .open > a,
[data-theme="dark"] .skin-black .main-header > .navbar .nav > .active > a,
[data-theme="dark"] .skin-blue .main-header > .navbar .nav > li > a:hover,
[data-theme="dark"] .skin-green .main-header > .navbar .nav > li > a:hover,
[data-theme="dark"] .skin-red .main-header > .navbar .nav > li > a:hover,
[data-theme="dark"] .skin-yellow .main-header > .navbar .nav > li > a:hover {
    background: var(--gt-surface-hover) !important;
    color: var(--gt-accent) !important;
}
[data-theme="dark"] .skin-black .main-header > .logo,
[data-theme="dark"] .skin-blue .main-header > .logo,
[data-theme="dark"] .skin-green .main-header > .logo,
[data-theme="dark"] .skin-red .main-header > .logo,
[data-theme="dark"] .skin-yellow .main-header > .logo {
    background: var(--gt-side-bg) !important;
    color: #fff !important;
}
/* La barra lateral es oscura siempre; el panel de usuario debe acompañarla. */
.skin-black .user-panel,
.skin-blue .user-panel,
.skin-green .user-panel,
.skin-red .user-panel,
.skin-yellow .user-panel {
    background-color: transparent !important;
}
.skin-black .main-sidebar,
.skin-blue .main-sidebar,
.skin-green .main-sidebar,
.skin-red .main-sidebar,
.skin-yellow .main-sidebar,
.skin-black .left-side {
    background: var(--gt-side-bg) !important;
}

/* --------------------------------------------------------------------------
   23.5 DATATABLES — CONTRASTE AL PASAR EL MOUSE
   Bootstrap compila `.table-hover > tbody > tr:hover > td` y las variantes
   contextuales con especificidad mayor que un simple `tr:hover`, así que el
   fondo pálido fijo se mantenía bajo texto claro y no se podía leer. Se
   iguala la forma del selector y se fuerza el color de texto.
   -------------------------------------------------------------------------- */
.table-hover > tbody > tr:hover,
.table-hover > tbody > tr:hover > td,
.table-hover > tbody > tr:hover > th,
table.dataTable.hover tbody tr:hover,
table.dataTable.hover tbody tr:hover > td,
table.dataTable.display tbody tr:hover,
table.dataTable.display tbody tr:hover > td {
    background-color: var(--gt-surface-hover) !important;
    color: var(--gt-text) !important;
}
/* Enlaces y etiquetas dentro de la fila resaltada. */
.table-hover > tbody > tr:hover a,
table.dataTable.hover tbody tr:hover a,
table.dataTable.display tbody tr:hover a {
    color: var(--gt-accent-700) !important;
}
[data-theme="dark"] .table-hover > tbody > tr:hover a,
[data-theme="dark"] table.dataTable.hover tbody tr:hover a,
[data-theme="dark"] table.dataTable.display tbody tr:hover a {
    color: var(--gt-accent) !important;
}
/* Filas alternas (odd/even) que DataTables pinta con blancos fijos. */
table.dataTable.stripe tbody tr.odd,
table.dataTable.display tbody tr.odd {
    background-color: var(--gt-surface-2) !important;
}
table.dataTable.stripe tbody tr.even,
table.dataTable.display tbody tr.even {
    background-color: var(--gt-surface) !important;
}
table.dataTable.display tbody tr.odd > .sorting_1,
table.dataTable.display tbody tr.even > .sorting_1,
table.dataTable.order-column tbody tr > .sorting_1 {
    background-color: var(--gt-surface-hover) !important;
    color: var(--gt-text) !important;
}
table.dataTable.display tbody tr.odd:hover > .sorting_1,
table.dataTable.display tbody tr.even:hover > .sorting_1,
table.dataTable.hover tbody tr:hover > .sorting_1 {
    background-color: var(--gt-accent-soft) !important;
    color: var(--gt-text) !important;
}
/* Cabecera y pie de las DataTables en oscuro. */
[data-theme="dark"] table.dataTable thead th,
[data-theme="dark"] table.dataTable tfoot th {
    background: var(--gt-surface-2) !important;
    color: var(--gt-text-soft) !important;
    border-color: var(--gt-border) !important;
}
[data-theme="dark"] .dataTables_wrapper .dataTables_paginate .paginate_button {
    color: var(--gt-text-muted) !important;
    background: transparent !important;
}
[data-theme="dark"] .dataTables_wrapper .dataTables_paginate .paginate_button.disabled {
    color: var(--gt-text-soft) !important;
    opacity: .5;
}

/* --------------------------------------------------------------------------
   23.6 CLASES DE FONDO FIJO DE ADMINLTE (bg-gray, bg-white, ...)
   Usadas en recent_activities y en varias pantallas para cabeceras de tabla.
   -------------------------------------------------------------------------- */
.bg-gray, tr.bg-gray, .bg-gray-light {
    background-color: var(--gt-surface-2) !important;
    color: var(--gt-text) !important;
}
.bg-gray > th, tr.bg-gray > th, .bg-gray > td {
    background-color: var(--gt-surface-2) !important;
    color: var(--gt-text-soft) !important;
    border-color: var(--gt-border) !important;
}
.bg-white { background-color: var(--gt-surface) !important; color: var(--gt-text) !important; }
[data-theme="dark"] .bg-light-blue,
[data-theme="dark"] .bg-aqua { color: #fff !important; }

/* --------------------------------------------------------------------------
   23.7 ACTIVIDAD RECIENTE (recent_activities.php)
   -------------------------------------------------------------------------- */
.nav-tabs-custom > .nav-tabs > li > a:hover {
    background: var(--gt-surface-hover) !important;
    color: var(--gt-text) !important;
}
[data-theme="dark"] .nav-tabs-custom > .nav-tabs > li.active > a {
    background: var(--gt-surface) !important;
    color: var(--gt-accent) !important;
}
.nav-tabs-custom > .tab-content { background: transparent !important; padding: 14px !important; }
/* Las cajas anidadas dentro de las pestañas no necesitan doble marco. */
.nav-tabs-custom .tab-content .box.banking-box {
    box-shadow: none !important;
    border: 1px solid var(--gt-border) !important;
    background: var(--gt-surface-2) !important;
}
.nav-tabs-custom .tab-content .box.banking-box .box-footer {
    background: transparent !important;
}
/* Grupos de progreso (columna derecha de la pestaña Ventas). */
.progress-group-container {
    background: var(--gt-surface-2) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md);
    padding: 16px;
}
.progress-group .progress-text { color: var(--gt-text-muted) !important; font-weight: 600; font-size: 12.5px; }
.progress-group .progress-number { color: var(--gt-text) !important; font-weight: 700; }
[data-theme="dark"] .progress-bar-aqua { background-color: var(--gt-teal) !important; }
[data-theme="dark"] .progress-bar-warning { background-color: var(--gt-amber) !important; }
[data-theme="dark"] .progress-bar-red { background-color: var(--gt-red) !important; }
[data-theme="dark"] .progress-bar-success { background-color: var(--gt-accent) !important; }

/* --------------------------------------------------------------------------
   23.8 PANTALLAS DE CONFIGURACIÓN (store_single y similares)
   Restos de Bootstrap 3 con blancos fijos: .nav-tabs, .tab-content, tablas
   de formulario, .form-horizontal, .input-group y .thumbnail.
   -------------------------------------------------------------------------- */
.nav-tabs {
    border-bottom: 1px solid var(--gt-border) !important;
}
.nav-tabs > li > a {
    color: var(--gt-text-muted) !important;
    border-radius: var(--gt-r-sm) var(--gt-r-sm) 0 0 !important;
    border-color: transparent !important;
}
.nav-tabs > li > a:hover {
    background: var(--gt-surface-hover) !important;
    border-color: transparent !important;
    color: var(--gt-text) !important;
}
.nav-tabs > li.active > a,
.nav-tabs > li.active > a:hover,
.nav-tabs > li.active > a:focus {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-bottom-color: transparent !important;
    color: var(--gt-accent) !important;
}
.tab-content { background: transparent !important; color: var(--gt-text) !important; }
.tab-pane { color: var(--gt-text) !important; }

.thumbnail, .img-thumbnail {
    background: var(--gt-surface-2) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md) !important;
}
.box-no-border { border: 1px solid var(--gt-border) !important; }

/* Tablas de formulario sin clase .table (frecuentes en ajustes). */
[data-theme="dark"] .tab-content table:not(.table) > tbody > tr > td,
[data-theme="dark"] .tab-content table:not(.table) > tbody > tr > th {
    background: transparent !important;
    color: var(--gt-text) !important;
    border-color: var(--gt-border) !important;
}
/* Cualquier elemento con fondo blanco cableado en atributo style. */
[data-theme="dark"] [style*="background:#fff"],
[data-theme="dark"] [style*="background: #fff"],
[data-theme="dark"] [style*="background-color:#fff"],
[data-theme="dark"] [style*="background-color: #fff"],
[data-theme="dark"] [style*="background:#FFF"],
[data-theme="dark"] [style*="background-color:#FFF"],
[data-theme="dark"] [style*="background:white"],
[data-theme="dark"] [style*="background-color:white"] {
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
}
[data-theme="dark"] [style*="color:#000"],
[data-theme="dark"] [style*="color: #000"],
[data-theme="dark"] [style*="color:black"],
[data-theme="dark"] [style*="color: black"] {
    color: var(--gt-text) !important;
}

/* Encabezados de widget de perfil (bg-black/bg-blue/... de AdminLTE). */
.widget-user-header { border-radius: var(--gt-r-lg) var(--gt-r-lg) 0 0 !important; }
[data-theme="dark"] .widget-user-header,
[data-theme="dark"] .widget-user-header h3,
[data-theme="dark"] .widget-user-header h5 { color: #fff !important; }

/* --------------------------------------------------------------------------
   23.9 FORMULARIO DE PAGOS (pagos_create_form.php)
   Compatibilidad con la caja .box-info que lo envuelve en creditos.php: el
   formulario traía su propio sistema de tarjetas y chocaba con el padding y
   el fondo de la caja. También se garantiza que el colapso siga funcionando.
   -------------------------------------------------------------------------- */
.box.box-info > .box-body > .form-section,
.pagos-modern-app .box-body { background: transparent !important; }

/* El botón de colapsar de AdminLTE debe seguir siendo visible y clicable. */
.box-header .btn-box-tool,
.box-header .add-new-btn {
    background: transparent !important;
    color: var(--gt-text-muted) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-sm) !important;
    width: 32px;
    height: 32px;
    padding: 0 !important;
    line-height: 30px;
    position: relative;
    z-index: 5;
}
.box-header .btn-box-tool:hover,
.box-header .add-new-btn:hover {
    background: var(--gt-surface-hover) !important;
    color: var(--gt-accent) !important;
    border-color: var(--gt-accent) !important;
}
/* AdminLTE oculta el cuerpo con .collapsed-box; el formulario usa position
   fixed para su barra móvil, que debe ocultarse también al colapsar. */
.box.collapsed-box .pm-actions-mobile { display: none !important; }

/* Barra de acciones móvil del formulario de pagos: por debajo del cajón
   lateral y de su overlay, para que no se solapen. */
.pm-actions-mobile {
    z-index: 1020 !important;
    padding-bottom: calc(14px + env(safe-area-inset-bottom)) !important;
}
body.sidebar-open .pm-actions-mobile { display: none !important; }

@media (max-width: 767px) {
    /* El formulario ya no queda debajo de la barra lateral. */
    .pagos-modern-app { position: relative; z-index: 1; }
    .pagos-modern-app .pm-card { border-radius: var(--gt-r-md); }
    /* Espacio para la barra fija de acciones. */
    .box.box-info .pagos-modern-app { padding-bottom: 160px; }
}

/* --------------------------------------------------------------------------
   23.10 AJUSTES MÓVILES GENERALES
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
    /* La topbar en móvil es `position: relative` y el logo pasa a 100%:
       se recompone para que quede en una sola fila. */
    .main-header { max-height: none !important; }
    .main-header > .logo {
        width: auto !important;
        float: left !important;
        height: var(--gt-topbar-h);
        line-height: var(--gt-topbar-h);
        max-width: 52% !important;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }
    .main-header .navbar {
        width: auto !important;
        float: none !important;
        margin-left: 0 !important;
        min-height: var(--gt-topbar-h) !important;
    }
    .main-header .navbar-custom-menu {
        float: right !important;
        max-width: 100%;
        overflow-x: auto;
        overflow-y: hidden;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
    }
    .main-header .navbar-custom-menu::-webkit-scrollbar { display: none; }
    .main-header .navbar-nav.navbar-left { display: none !important; }
    .main-header .navbar-nav > li > a { padding: 0 7px !important; }
    .main-header .navbar-nav > li.sell-btn > a { padding: 0 10px !important; }

    /* Contenido a ancho completo: nada de márgenes heredados del sidebar. */
    .content-wrapper, .right-side, .main-footer { margin-left: 0 !important; }

    /* Tablas anchas: scroll horizontal propio en vez de romper el layout. */
    .table-responsive { -webkit-overflow-scrolling: touch; }

    /* Evita desbordes horizontales de toda la app. */
    html, body { max-width: 100%; overflow-x: hidden; }
}

/* Zonas táctiles cómodas en el menú lateral móvil. */
@media (max-width: 767px) {
    .sidebar-menu > li > a { padding: 12px 14px !important; font-size: 14px; }
    .sidebar-menu .treeview-menu > li > a { padding: 10px 12px 10px 34px !important; font-size: 13.5px; }
    .user-panel { padding: 14px !important; }
}

/* --------------------------------------------------------------------------
   23.11 FLYOUT ABIERTO POR TOQUE (pantallas táctiles, sidebar mini)
   Complemento de modern-theme.js: replica el estado :hover con una clase,
   porque en táctil no existe hover y el menú mini quedaba inservible.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) {
    .sidebar-mini.sidebar-collapse .sidebar-menu > li.gt-flyout-open > a > span:not(.pull-right) {
        display: flex !important;
        position: absolute;
        left: var(--gt-sidebar-mini-w) !important;
        top: 0 !important;
        width: var(--gt-flyout-w) !important;
        align-items: center;
        padding: 10px 16px !important;
        background: var(--gt-side-bg-2) !important;
        color: #fff !important;
        white-space: normal !important;
        overflow-wrap: anywhere;
        line-height: 1.25;
        border-radius: 0 var(--gt-r-sm) 0 0;
        box-shadow: var(--gt-shadow-lg);
        z-index: 901;
    }
    .sidebar-mini.sidebar-collapse .sidebar-menu > li.gt-flyout-open > .treeview-menu {
        display: block !important;
        position: absolute;
        left: var(--gt-sidebar-mini-w) !important;
        top: 100% !important;
        width: var(--gt-flyout-w) !important;
        margin: 0 !important;
        padding: 6px !important;
        background: var(--gt-side-bg-2) !important;
        border-radius: 0 0 var(--gt-r-sm) var(--gt-r-sm) !important;
        box-shadow: var(--gt-shadow-lg);
        z-index: 900;
    }
}

/* --------------------------------------------------------------------------
   23.12 DETALLES DE LOS ACCESOS RÁPIDOS (action_buttons.php)
   El <h2> que envuelve el ícono aportaba un margen vertical grande de
   Bootstrap que descuadraba las tarjetas.
   -------------------------------------------------------------------------- */
.panel-app h2 {
    margin: 0 0 6px !important;
    font-size: inherit !important;
    line-height: 1 !important;
}
.panel-app .icon .fa {
    font-size: 24px;
    line-height: 1;
    color: var(--gt-accent);
}
.panel-app:hover .icon { border-color: var(--gt-accent) !important; }
.panel-app a.panel-app-link:hover .small.small2 { color: var(--gt-accent) !important; }

@media (max-width: 767px) {
    .panel-app .panel-body { padding: 14px 8px !important; }
    .panel-app .icon { width: 44px; height: 44px; }
    .panel-app .icon .fa { font-size: 20px; }
    .panel-app .small.small2 { font-size: 11.5px !important; }
}

/* --------------------------------------------------------------------------
   23.13 FILAS CONTEXTUALES EN MODO CLARO (hover)
   La regla general de 23.5 lleva !important y aplanaría el tinte semántico
   de las filas .success/.info/.warning/.danger. Aquí se restituye ese tinte
   con mayor especificidad, ya con contraste suficiente para leer el texto.
   -------------------------------------------------------------------------- */
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > td.success {
    background-color: #cdefdd !important;
    color: #0b5138 !important;
}
.table-hover > tbody > tr.info:hover > td,
.table-hover > tbody > tr:hover > td.info {
    background-color: #cfe3ff !important;
    color: #10386f !important;
}
.table-hover > tbody > tr.warning:hover > td,
.table-hover > tbody > tr:hover > td.warning {
    background-color: #ffe6bd !important;
    color: #6b4405 !important;
}
.table-hover > tbody > tr.danger:hover > td,
.table-hover > tbody > tr:hover > td.danger {
    background-color: #ffd6d6 !important;
    color: #8a1c1c !important;
}
.table-hover > tbody > tr.active:hover > td,
.table-hover > tbody > tr:hover > td.active {
    background-color: var(--gt-surface-hover) !important;
    color: var(--gt-text) !important;
}

/* ==========================================================================
   24. SEGUNDA RONDA DE CORRECCIONES
   ========================================================================== */

/* --------------------------------------------------------------------------
   24.1 BARRA LATERAL CLARA EN MODO CLARO
   Antes la barra quedaba oscura en ambos temas porque varias reglas cableaban
   #fff y rgba(255,255,255,…). Ahora todo pasa por los tokens --gt-side-*.
   -------------------------------------------------------------------------- */
.main-sidebar, .left-side,
.skin-black .main-sidebar, .skin-blue .main-sidebar,
.skin-green .main-sidebar, .skin-red .main-sidebar,
.skin-yellow .main-sidebar, .skin-black .left-side {
    background: var(--gt-side-bg) !important;
    box-shadow: var(--gt-side-shadow) !important;
}

.user-panel > .info > p.username { color: var(--gt-side-text-active) !important; }
.user-panel > .info, .user-panel > .info > a { color: var(--gt-side-text) !important; }
.user-panel > .image .svg-icon,
.skin-black .sidebar .user-panel > .image > svg { color: var(--gt-side-text) !important; }

.sidebar-menu > li > a,
.skin-black .sidebar-menu > li > a,
.skin-blue .sidebar-menu > li > a,
.skin-green .sidebar-menu > li > a,
.skin-red .sidebar-menu > li > a,
.skin-yellow .sidebar-menu > li > a {
    color: var(--gt-side-text) !important;
}
.sidebar-menu > li:hover > a,
.sidebar-menu > li > a:hover,
.sidebar-menu > li > a:focus,
.skin-black .sidebar-menu > li:hover > a,
.skin-blue .sidebar-menu > li:hover > a,
.skin-green .sidebar-menu > li:hover > a,
.skin-red .sidebar-menu > li:hover > a,
.skin-yellow .sidebar-menu > li:hover > a {
    background: var(--gt-side-hover-bg) !important;
    color: var(--gt-side-hover-text) !important;
}
.sidebar-menu > li.active > a,
.sidebar-menu > li.active.treeview > a,
.skin-black .sidebar-menu > li.active > a,
.skin-black .sidebar-menu > li.active.treeview > a {
    background: var(--gt-side-active-bg) !important;
    color: var(--gt-side-text-active) !important;
    box-shadow: inset 3px 0 0 var(--gt-side-active-border);
}
.sidebar-menu li.treeview-menu,
.sidebar-menu > li > .treeview-menu {
    background: var(--gt-side-submenu-bg) !important;
}
.sidebar-menu .treeview-menu > li > a { color: var(--gt-side-text) !important; }
.sidebar-menu .treeview-menu > li > a:hover,
.sidebar-menu .treeview-menu > li.active > a {
    background: var(--gt-side-hover-bg) !important;
    color: var(--gt-side-hover-text) !important;
}
.sidebar-menu .treeview-menu > li.active > a { color: var(--gt-accent-700) !important; }
[data-theme="dark"] .sidebar-menu .treeview-menu > li.active > a { color: var(--gt-accent) !important; }
.sidebar-menu > li.header { color: var(--gt-side-icon) !important; }
.user-panel { border-bottom: 1px solid var(--gt-side-border) !important; }

/* Buscador del menú */
.sidebar-search-input {
    background: var(--gt-side-search-bg);
    border: 1px solid var(--gt-side-border);
    color: var(--gt-side-search-text);
}
.sidebar-search-input::placeholder { color: var(--gt-side-text); opacity: .75; }
.sidebar-search-input:focus { border-color: var(--gt-accent); background: var(--gt-side-search-bg); }
.sidebar-search-icon { color: var(--gt-side-icon); }
.sidebar-search-empty { color: var(--gt-side-text); }

/* Iconos del sprite dentro de la barra: oscuros en claro, claros en oscuro
   (sustituye a la regla fija con invert(1) de la sección 23.1). */
.sidebar-menu > li > a > .svg-icon,
.sidebar-menu .treeview-menu > li > a > .svg-icon,
.user-panel > .image .svg-icon {
    filter: var(--gt-side-icon-filter);
}
.sidebar-menu > li:hover > a > .svg-icon,
.sidebar-menu > li.active > a > .svg-icon,
.sidebar-menu .treeview-menu > li:hover > a > .svg-icon,
.sidebar-menu .treeview-menu > li.active > a > .svg-icon {
    filter: var(--gt-side-icon-filter-active);
}
.sidebar-menu > li > a > i.fa,
.sidebar-menu > li > a > .fa.pull-right { color: var(--gt-side-icon) !important; }

/* Flyouts del modo mini heredan el color de la barra */
@media (min-width: 768px) {
    .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span:not(.pull-right),
    .sidebar-mini.sidebar-collapse .sidebar-menu > li.gt-flyout-open > a > span:not(.pull-right),
    .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu,
    .sidebar-mini.sidebar-collapse .sidebar-menu > li.gt-flyout-open > .treeview-menu {
        background: var(--gt-side-bg-2) !important;
        color: var(--gt-side-text-active) !important;
        border: 1px solid var(--gt-side-border);
    }
}

/* --------------------------------------------------------------------------
   24.2 BOTÓN COLAPSAR — SE VEÍA DOBLE
   theme.css ya dibuja el icono con FontAwesome (`:before { content: "\f0c9" }`),
   pero main.css lo escondía con `text-indent: -9999px` y mostraba un triángulo
   `:after`. Al recuperar el text-indent en la ronda anterior, quedaron los DOS
   iconos visibles. Se conserva únicamente el de FontAwesome.
   -------------------------------------------------------------------------- */
.main-header .navbar .sidebar-toggle .sr-only::before { content: none !important; }
.main-header .navbar .sidebar-toggle .sr-only {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    overflow: hidden !important;
    clip: rect(0 0 0 0) !important;
}
.main-header .sidebar-toggle:before,
.sidebar-mini .sidebar-toggle:before,
.sidebar-collapse .sidebar-toggle:before {
    content: "\f0c9" !important;
    font-family: FontAwesome !important;
    font-size: 17px;
    line-height: 1;
    display: inline-block;
    text-indent: 0 !important;
}
.main-header .navbar .sidebar-toggle {
    color: var(--gt-text-muted) !important;
    text-indent: 0 !important;
}
.main-header .navbar .sidebar-toggle:hover { color: var(--gt-accent) !important; }

/* --------------------------------------------------------------------------
   24.3 SELECTS NATIVOS — LA OPCIÓN ELEGIDA NO SE VEÍA
   El desplegable nativo hereda color/fondo del <select>; sin reglas propias
   para <option> el texto quedaba blanco sobre blanco (o negro sobre negro).
   -------------------------------------------------------------------------- */
select.form-control,
select.pm-input,
select {
    color: var(--gt-text) !important;
    background-color: var(--gt-surface) !important;
}
select.form-control option,
select.pm-input option,
select option,
select optgroup {
    background-color: var(--gt-surface) !important;
    color: var(--gt-text) !important;
}
select.form-control option:checked,
select option:checked,
select option[selected] {
    background: var(--gt-accent) !important;
    color: var(--gt-accent-contrast) !important;
    font-weight: 700;
}
select.form-control option:hover { background: var(--gt-surface-hover) !important; }
select.form-control:disabled,
select.form-control[disabled] { color: var(--gt-text-soft) !important; }

/* Select2: elemento seleccionado en la lista y en el campo */
.select2-container--default .select2-selection--single .select2-selection__rendered,
.select2-container--default .select2-selection--multiple .select2-selection__rendered {
    color: var(--gt-text) !important;
}
.select2-container--default .select2-selection__placeholder { color: var(--gt-text-soft) !important; }
.select2-container--default .select2-results__option[aria-selected=true] {
    background: var(--gt-accent-soft) !important;
    color: var(--gt-text) !important;
    font-weight: 600;
}
.select2-container--default .select2-results__option--highlighted[aria-selected=true] {
    background: var(--gt-accent) !important;
    color: var(--gt-accent-contrast) !important;
}
.select2-results__options { background: var(--gt-surface) !important; }
.select2-container--default .select2-selection--single .select2-selection__arrow b {
    border-color: var(--gt-text-muted) transparent transparent transparent !important;
}

/* --------------------------------------------------------------------------
   24.4 BOX-INFO: EL TEXTO DESAPARECÍA AL PASAR EL MOUSE
   Causa: main.css define `.btn.btn-box-tool.add-new-btn` con
   `width: 100%; height: 100%; position: absolute`, es decir, un botón
   invisible que cubre TODA la cabecera. Al darle fondo en :hover, ese fondo
   se pintaba encima del título. Se acota el botón a su esquina derecha
   (misma especificidad que main.css para poder ganar).
   -------------------------------------------------------------------------- */
.btn.btn-box-tool.add-new-btn,
.box-header .btn-box-tool,
.box-header .add-new-btn {
    position: absolute !important;
    top: 50% !important;
    right: 12px !important;
    left: auto !important;
    transform: translateY(-50%);
    width: 34px !important;
    height: 34px !important;
    margin-top: 0 !important;
    padding: 0 !important;
    text-align: center !important;
    line-height: 32px !important;
    background: transparent !important;
    color: var(--gt-text-muted) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-sm) !important;
    z-index: 5;
}
.btn.btn-box-tool.add-new-btn:hover,
.box-header .btn-box-tool:hover,
.box-header .add-new-btn:hover {
    background: var(--gt-accent-soft) !important;
    color: var(--gt-accent) !important;
    border-color: var(--gt-accent) !important;
}
/* La cabecera reserva espacio SOLO cuando realmente hay un botón de
   herramienta, para no descuadrar el resto de cabeceras. */
.box-header { position: relative; }
.box-header:has(.btn-box-tool),
.box-header:has(.add-new-btn) {
    padding-right: 58px !important;
}
.box-header .box-title { position: relative; z-index: 1; }
/* Cabeceras con color de AdminLTE (bg-warning, bg-info…) legibles en oscuro. */
.box-header.bg-warning {
    background: var(--gt-accent-soft) !important;
    color: var(--gt-text) !important;
    border-bottom: 1px solid var(--gt-border) !important;
}
.box-header.bg-warning .box-title, .box-header.bg-warning a { color: var(--gt-text) !important; }

/* --------------------------------------------------------------------------
   24.5 FILTER-BOX EN MODO OSCURO
   main.css lo fija con .jumbotron blanco, inputs con borde blanco y la
   pestaña de cierre también blanca.
   -------------------------------------------------------------------------- */
#filter-box .jumbotron {
    background-color: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    box-shadow: 0 18px 50px rgba(0, 0, 0, .35) !important;
    border-bottom: 1px solid var(--gt-border) !important;
    border-radius: 0 0 var(--gt-r-lg) var(--gt-r-lg);
    padding: 26px 20px !important;
}
#filter-box input,
#filter-box .form-control {
    font-size: 1.1em !important;
    font-style: normal !important;
    text-transform: none !important;
    color: var(--gt-text) !important;
    background: var(--gt-surface-2) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-pill) !important;
    box-shadow: none !important;
    height: 46px;
    padding: 8px 18px !important;
}
#filter-box input:focus {
    border-color: var(--gt-accent) !important;
    box-shadow: var(--gt-shadow-focus) var(--gt-accent-ring) !important;
}
#filter-box .well {
    background: var(--gt-surface-2) !important;
    border: 1px solid var(--gt-border) !important;
}
#filter-box button {
    border: 1px solid var(--gt-accent) !important;
    box-shadow: none !important;
}
#close-filter-box {
    background-color: var(--gt-surface) !important;
    color: var(--gt-text-muted) !important;
    box-shadow: 0 6px 14px rgba(0, 0, 0, .28) !important;
    border: 1px solid var(--gt-border);
    border-top: none;
    font-size: 0;
    padding: 2px 26px 8px !important;
}
#close-filter-box span {
    color: var(--gt-text-muted) !important;
    font-size: 1.6rem !important;
}
#close-filter-box:hover span { color: var(--gt-accent) !important; }
.filter-searchbox {
    border: 1px solid var(--gt-border) !important;
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
}
.apply-filter .btn { border-radius: var(--gt-r-pill) !important; }

/* --------------------------------------------------------------------------
   24.6 COLAPSO DEL MÓDULO DE PAGOS  (revisado en la sección 25.3)
   -------------------------------------------------------------------------- */

/* --------------------------------------------------------------------------
   24.7 BOTÓN CLARO/OSCURO — REDISEÑO
   Control segmentado: ambos iconos siempre visibles dentro del riel y una
   pastilla que se desplaza. Es más legible que el interruptor anterior,
   porque comunica el estado actual y el destino a la vez.
   Compatible con el marcado antiguo (.icon-sun/.icon-moon dentro del pulgar)
   y con el nuevo (.gt-toggle-ic dentro del riel).
   -------------------------------------------------------------------------- */
.gt-theme-toggle {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    background: none;
    border: 0;
    cursor: pointer;
    padding: 0 10px !important;
    -webkit-tap-highlight-color: transparent;
}
.gt-theme-toggle:focus-visible { outline: none; }
.gt-theme-toggle:focus-visible .gt-toggle-track {
    box-shadow: 0 0 0 3px var(--gt-accent-ring);
}

.gt-theme-toggle .gt-toggle-track {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: space-between;
    gap: 2px;
    width: 62px;
    height: 30px;
    padding: 3px;
    border-radius: var(--gt-r-pill);
    background: var(--gt-surface-2);
    border: 1px solid var(--gt-border);
    transition: background var(--gt-med), border-color var(--gt-med);
    overflow: hidden;
}

/* Pastilla deslizante */
.gt-theme-toggle .gt-toggle-thumb {
    position: absolute;
    top: 3px;
    left: 3px;
    width: 24px;
    height: 22px;
    border-radius: var(--gt-r-pill);
    background: var(--gt-surface);
    box-shadow: var(--gt-shadow-sm);
    border: 1px solid var(--gt-border);
    transition: transform 320ms cubic-bezier(.34, 1.56, .64, 1), background var(--gt-med);
    z-index: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--gt-amber);
}
[data-theme="dark"] .gt-theme-toggle .gt-toggle-track {
    background: rgba(47, 219, 160, .10);
    border-color: rgba(47, 219, 160, .35);
}
[data-theme="dark"] .gt-theme-toggle .gt-toggle-thumb {
    transform: translateX(30px);
    background: var(--gt-accent);
    border-color: var(--gt-accent);
    color: var(--gt-accent-contrast);
}

/* Iconos fijos del riel (marcado nuevo) */
.gt-theme-toggle .gt-toggle-ic {
    position: relative;
    z-index: 2;
    width: 14px;
    height: 14px;
    margin: 0 5px;
    flex: 0 0 auto;
    transition: color var(--gt-med), opacity var(--gt-med);
    pointer-events: none;
}
.gt-theme-toggle .gt-toggle-ic-sun { color: var(--gt-amber); opacity: 1; }
.gt-theme-toggle .gt-toggle-ic-moon { color: var(--gt-text-soft); opacity: .6; }
[data-theme="dark"] .gt-theme-toggle .gt-toggle-ic-sun { color: var(--gt-text-soft); opacity: .55; }
[data-theme="dark"] .gt-theme-toggle .gt-toggle-ic-moon { color: var(--gt-accent-contrast); opacity: 1; }

/* Marcado antiguo: los iconos viven dentro del pulgar. */
.gt-theme-toggle .gt-toggle-thumb .icon-sun,
.gt-theme-toggle .gt-toggle-thumb .icon-moon { width: 12px; height: 12px; }
.gt-theme-toggle .gt-toggle-thumb .icon-sun { display: block; }
.gt-theme-toggle .gt-toggle-thumb .icon-moon { display: none; }
[data-theme="dark"] .gt-theme-toggle .gt-toggle-thumb .icon-sun { display: none; }
[data-theme="dark"] .gt-theme-toggle .gt-toggle-thumb .icon-moon { display: block; }

@media (prefers-reduced-motion: reduce) {
    .gt-theme-toggle .gt-toggle-thumb { transition: none; }
}

/* Variante en línea para el login (debajo del botón Ingresar) */
.gt-theme-toggle-inline {
    display: flex !important;
    width: 100%;
    justify-content: center;
    align-items: center;
    gap: 10px;
    margin-top: 16px;
    padding: 10px 0 0 !important;
    border-top: 1px solid var(--gt-border);
    height: auto !important;
}
.gt-theme-toggle-inline .gt-toggle-label {
    font-size: 12.5px;
    font-weight: 600;
    color: var(--gt-text-muted);
    letter-spacing: .02em;
}
.gt-theme-toggle-inline:hover .gt-toggle-label { color: var(--gt-accent); }

/* --------------------------------------------------------------------------
   24.8 DASHBOARD — TARJETAS DE MÉTRICA (.small-box)
   AdminLTE las pinta con colores planos (bg-red/bg-green/…) y esquinas de
   2px. Se convierten en tarjetas con degradado, brillo superior, icono
   integrado y elevación al pasar el mouse.
   -------------------------------------------------------------------------- */
.small-box {
    border-radius: var(--gt-r-lg) !important;
    box-shadow: var(--gt-shadow-sm) !important;
    overflow: hidden;
    position: relative;
    isolation: isolate;
    transition: transform var(--gt-med), box-shadow var(--gt-med) !important;
}
.small-box:hover {
    transform: translateY(-4px);
    box-shadow: var(--gt-shadow-lg) !important;
}
/* Velo de degradado que unifica los colores planos de AdminLTE. */
.small-box::before {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(135deg, rgba(255, 255, 255, .22) 0%, rgba(255, 255, 255, 0) 45%, rgba(0, 0, 0, .18) 100%);
    pointer-events: none;
    z-index: 0;
}
/* Halo decorativo detrás del icono. */
.small-box::after {
    content: "";
    position: absolute;
    right: -28px;
    top: -28px;
    width: 120px;
    height: 120px;
    border-radius: 50%;
    background: rgba(255, 255, 255, .12);
    pointer-events: none;
    z-index: 0;
}
.small-box > .inner,
.small-box > .icon,
.small-box > .small-box-footer { position: relative; z-index: 1; }
.small-box > .inner { padding: 18px 20px !important; }
.small-box h3, .small-box h4 {
    font-family: var(--gt-font-display) !important;
    font-weight: 800 !important;
    color: #fff !important;
    margin: 0 0 6px !important;
    letter-spacing: -.01em;
}
.small-box h4 {
    font-size: 15px !important;
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
}
.small-box h4 i {
    font-style: normal;
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .07em;
    opacity: .78;
}
.small-box h4 span {
    font-size: 19px;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
}
.small-box p { color: rgba(255, 255, 255, .85) !important; }
.small-box > .icon {
    font-size: 62px !important;
    opacity: .22 !important;
    top: 8px !important;
    right: 12px !important;
    transition: transform var(--gt-med), opacity var(--gt-med);
}
.small-box:hover > .icon { transform: scale(1.08) rotate(-6deg); opacity: .3 !important; }
.small-box > .small-box-footer {
    background: rgba(0, 0, 0, .16) !important;
    color: #fff !important;
    font-weight: 600;
    font-size: 12.5px;
    padding: 9px !important;
    letter-spacing: .02em;
    transition: background var(--gt-fast);
}
.small-box > .small-box-footer:hover { background: rgba(0, 0, 0, .28) !important; }

/* Paleta propia para las variantes de AdminLTE (más armónica que la original) */
/* Rampas verificadas: incluso el extremo MÁS CLARO de cada degradado
   mantiene >=4.5:1 con texto blanco, para que las etiquetas pequeñas en
   mayúsculas de las tarjetas se lean sin problema. */
.small-box.bg-red    { background: linear-gradient(135deg, #d43d4c 0%, #a3162c 100%) !important; }
.small-box.bg-green  { background: linear-gradient(135deg, #10855c 0%, #0a6244 100%) !important; }
.small-box.bg-yellow { background: linear-gradient(135deg, #a85f05 0%, #7d4404 100%) !important; }
.small-box.bg-purple { background: linear-gradient(135deg, #6d5ae0 0%, #4632ad 100%) !important; }
.small-box.bg-aqua   { background: linear-gradient(135deg, #10788c 0%, #0b5a69 100%) !important; }
.small-box.bg-blue   { background: linear-gradient(135deg, #2f6fe0 0%, #1b4aa8 100%) !important; }
/* El velo claro superior se atenúa para no subir la luminancia del fondo. */
.small-box::before {
    background: linear-gradient(135deg, rgba(255, 255, 255, .10) 0%, rgba(255, 255, 255, 0) 45%, rgba(0, 0, 0, .22) 100%);
}
[data-theme="dark"] .small-box { box-shadow: var(--gt-shadow-md) !important; }
[data-theme="dark"] .small-box::before {
    background: linear-gradient(135deg, rgba(255, 255, 255, .12) 0%, rgba(255, 255, 255, 0) 45%, rgba(0, 0, 0, .34) 100%);
}

/* Separador del dashboard y bloques de métricas del gráfico */
.content hr {
    border: 0;
    border-top: 1px solid var(--gt-border);
    margin: 22px 0;
}
.metrica {
    transition: border-color var(--gt-fast), transform var(--gt-fast);
}
.metrica:hover { border-color: var(--gt-accent) !important; transform: translateY(-2px); }
.grafico-subtitulo { color: var(--gt-text-soft) !important; }

@media (max-width: 767px) {
    .small-box > .inner { padding: 14px !important; }
    .small-box h4 { font-size: 13px !important; }
    .small-box h4 span { font-size: 16px; }
    .small-box > .icon { font-size: 44px !important; }
}

/* --------------------------------------------------------------------------
   24.9 REPORT_CASHBOOK — LIBRO DE CAJA
   Pantalla muy densa (ingresos vs egresos, dos columnas y varias tablas).
   Se le da jerarquía: cabecera con acento, separador central real y las
   tablas de totales tratadas como fichas legibles.
   -------------------------------------------------------------------------- */
#cashbook-summary {
    border-top: none !important;
    overflow: hidden;
}
#cashbook-summary > .box-header {
    background: linear-gradient(135deg, var(--gt-accent-soft) 0%, transparent 70%) !important;
    border-bottom: 1px solid var(--gt-border) !important;
    position: relative;
}
#cashbook-summary > .box-header::before {
    content: "";
    position: absolute;
    left: 0; top: 0; bottom: 0;
    width: 4px;
    background: linear-gradient(180deg, var(--gt-accent), var(--gt-teal));
}
#cashbook-summary > .box-header .box-title {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px;
}
#cashbook-summary .no-print .fa-print { margin-right: 4px; }
#cashbook-summary > .box-header a.pull-right {
    color: var(--gt-text-muted) !important;
    font-weight: 600;
    font-size: 12.5px;
    border: 1px solid var(--gt-border);
    border-radius: var(--gt-r-pill);
    padding: 5px 14px;
    background: var(--gt-surface);
    margin-right: 46px;
}
#cashbook-summary > .box-header a.pull-right:hover {
    color: var(--gt-accent) !important;
    border-color: var(--gt-accent);
}

/* Separador vertical entre ingresos y egresos (era un #ECF0F5 fijo). */
.income-expense-row { position: relative; }
.income-expense-row:after {
    background-color: var(--gt-border) !important;
    background-image: linear-gradient(180deg, transparent, var(--gt-border) 12%, var(--gt-border) 88%, transparent) !important;
    width: 1px !important;
}
@media (max-width: 991px) {
    .income-expense-row:after { display: none !important; }
}

/* El select del tipo de fecha estaba forzado a 50px de ancho. */
#cashbook-summary .select2-container,
#monto-apertura .select2-container { width: auto !important; min-width: 160px; }
#monto-apertura .btn-group { max-width: 100% !important; }
#monto-apertura .input-group { width: 100%; }

/* Tablas de totales: números tabulares y filas de total destacadas. */
#cashbook-summary table td,
#cashbook-summary table th { font-variant-numeric: tabular-nums; }
#cashbook-summary table tfoot tr,
#cashbook-summary table tr.total-row {
    background: var(--gt-surface-2) !important;
    font-weight: 800;
}
#cashbook-summary .table > thead > tr > th {
    position: sticky;
    top: 0;
    z-index: 2;
}
/* Cifras positivas/negativas con color semántico legible en ambos temas. */
#cashbook-summary .text-green, #cashbook-summary .text-success { color: var(--gt-accent-700) !important; font-weight: 700; }
#cashbook-summary .text-red, #cashbook-summary .text-danger { color: #b91c1c !important; font-weight: 700; }
[data-theme="dark"] #cashbook-summary .text-green,
[data-theme="dark"] #cashbook-summary .text-success { color: var(--gt-accent) !important; }
[data-theme="dark"] #cashbook-summary .text-red,
[data-theme="dark"] #cashbook-summary .text-danger { color: #fca5a5 !important; }

/* Encabezados de sección de las dos columnas */
#cashbook-summary .box.box-success.box-no-border,
#cashbook-summary .box.box-no-border {
    box-shadow: none !important;
    background: transparent !important;
    border: none !important;
}

/* --------------------------------------------------------------------------
   24.10 STORE_SELECT — SELECTOR DE AGENCIA
   Comparte .login-page, así que hereda el fondo con aurora. Aquí las tiendas
   pasan de lista plana a fichas con icono, flecha y realce al pasar el mouse.
   -------------------------------------------------------------------------- */
body.login-page .login-box { width: 420px; }

#store-launcher { padding: 16px 18px 22px !important; }
.store-list {
    max-height: 380px !important;
    padding: 2px !important;
    overflow-y: auto;
}
.store-list .list-group-item {
    display: block !important;
    width: 100%;
    background: var(--gt-surface-2) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md) !important;
    margin-bottom: 8px;
    padding: 0 !important;
    overflow: hidden;
    transition: transform var(--gt-fast), border-color var(--gt-fast), box-shadow var(--gt-fast);
}
.store-list .list-group-item:last-child { margin-bottom: 0; }
.store-list .list-group-item:hover {
    transform: translateX(3px);
    border-color: var(--gt-accent) !important;
    box-shadow: var(--gt-shadow-sm);
}
.store-list .list-group-item a.activate-store {
    display: flex !important;
    align-items: center;
    gap: 14px;
    padding: 14px 16px !important;
    color: var(--gt-text) !important;
    font-weight: 600;
    text-decoration: none;
}
.store-list .store-icon {
    display: flex !important;
    align-items: center;
    justify-content: center;
    width: 40px !important;
    height: 40px;
    flex: 0 0 40px;
    border-radius: var(--gt-r-sm);
    background: var(--gt-accent-soft);
    transition: background var(--gt-fast);
}
.store-list .list-group-item:hover .store-icon { background: var(--gt-accent-soft-strong); }
.store-list .store-icon .svg-icon {
    width: 20px; height: 20px;
    filter: brightness(0) saturate(100%) invert(45%) sepia(85%) saturate(420%) hue-rotate(115deg) brightness(92%) contrast(92%);
}
[data-theme="dark"] .store-list .store-icon .svg-icon {
    filter: brightness(0) saturate(100%) invert(78%) sepia(38%) saturate(720%) hue-rotate(105deg) brightness(102%) contrast(96%);
}
.store-list .store-name {
    display: flex !important;
    align-items: center;
    justify-content: space-between;
    width: auto !important;
    flex: 1;
    font-weight: 700;
    font-size: 14px;
    color: var(--gt-text) !important;
    gap: 10px;
}
.store-list .store-name .pull-right {
    float: none !important;
    color: var(--gt-text-soft);
    font-size: 18px;
    transition: transform var(--gt-fast), color var(--gt-fast);
}
.store-list .list-group-item:hover .store-name .pull-right {
    color: var(--gt-accent);
    transform: translateX(4px);
}
/* Riel del perfect-scrollbar dentro de la lista */
.store-list .ps__rail-y { background: transparent !important; }

@media (max-width: 480px) {
    body.login-page .login-box { width: 100%; }
    .store-list .list-group-item a.activate-store { padding: 12px 13px !important; }
}

/* ==========================================================================
   25. TERCERA RONDA
   ========================================================================== */

/* --------------------------------------------------------------------------
   25.1 COLAPSAR CAJAS: VUELVE EL CLIC EN TODA LA BARRA
   Se recupera el comportamiento original (el botón cubre toda la cabecera)
   pero SIN fondo propio, que era lo que tapaba el título. La señal visual
   pasa a la cabecera (que se tiñe al pasar el mouse) y al icono, que se
   presenta como una pastilla a la derecha.
   -------------------------------------------------------------------------- */
.btn.btn-box-tool.add-new-btn,
.box-header .add-new-btn {
    position: absolute !important;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    width: 100% !important;
    height: 100% !important;
    margin: 0 !important;
    padding: 0 14px 0 0 !important;
    text-align: right !important;
    background: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
    outline: none;
    transform: none !important;
    z-index: 4;
    cursor: pointer;
}
/* La cabecera es la que reacciona al pasar el mouse. */
.box-header:has(.add-new-btn) {
    position: relative;
    cursor: pointer;
    border-radius: var(--gt-r-lg) var(--gt-r-lg) 0 0;
    transition: background var(--gt-fast);
}
.box-header:has(.add-new-btn):hover { background: var(--gt-surface-hover) !important; }
.box-header:has(.add-new-btn):active { background: var(--gt-accent-soft) !important; }
.box-header:has(.add-new-btn) .box-title {
    position: relative;
    z-index: 1;
    pointer-events: none;
}
/* El icono se dibuja como pastilla, para que se vea que hay una acción. */
.btn.btn-box-tool.add-new-btn > i.fa,
.box-header .add-new-btn > i.fa {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: var(--gt-r-sm);
    border: 1px solid var(--gt-border);
    background: var(--gt-surface);
    color: var(--gt-text-muted);
    font-size: 12px;
    vertical-align: middle;
    transition: background var(--gt-fast), color var(--gt-fast),
                border-color var(--gt-fast), transform var(--gt-fast);
}
.box-header:has(.add-new-btn):hover .add-new-btn > i.fa {
    background: var(--gt-accent);
    border-color: var(--gt-accent);
    color: var(--gt-accent-contrast);
    transform: scale(1.06);
}
.add-new-btn:focus-visible > i.fa { box-shadow: 0 0 0 3px var(--gt-accent-ring); }
/* Los botones-icono normales (no de colapso) siguen acotados a su esquina. */
.box-header .btn-box-tool:not(.add-new-btn) {
    position: relative !important;
    width: auto !important;
    height: auto !important;
    transform: none !important;
    padding: 5px 7px !important;
    border: 0 !important;
    background: transparent !important;
}

/* --------------------------------------------------------------------------
   25.2 BOTONES REALES DENTRO DE .box-tools
   product.php / expired.php los usan con color propio (btn-info, btn-danger,
   btn-success). Deben conservar su relleno; solo .btn-box-tool va sin fondo.
   -------------------------------------------------------------------------- */
.box-header > .box-tools.pull-right {
    position: absolute;
    right: 10px;
    top: 50%;
    transform: translateY(-50%);
    z-index: 6;
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
}
.box-header > .box-tools .btn:not(.btn-box-tool) {
    position: relative;
    z-index: 6;
    border-radius: var(--gt-r-sm) !important;
}
.box-header > .box-tools .btn-group { position: relative; z-index: 6; }
.box-header > .box-tools .dropdown-menu { z-index: 1100; }
/* En cabeceras que además colapsan, los botones quedan por encima del
   botón invisible de colapso para poder pulsarlos. */
.box-header:has(.box-tools) { padding-right: 12px !important; }
@media (max-width: 767px) {
    .box-header > .box-tools.pull-right {
        position: static;
        transform: none;
        margin-top: 10px;
        justify-content: flex-start;
    }
}

/* --------------------------------------------------------------------------
   25.3 CRÉDITOS: EL LISTADO DEBE SUBIR AL COLAPSAR "NUEVO PAGO"
   Antes se ocultaba el <form> entero con display:none, pero AdminLTE anima
   `> form > .box-body` con slideDown: al estar el padre oculto la animación
   ocurría a ciegas y el bloque "saltaba". Ahora el formulario permanece en
   flujo y solo se anula el relleno reservado para la barra fija móvil, así
   que la caja queda con la altura de su cabecera y el listado sube pegado.
   -------------------------------------------------------------------------- */
.box.collapsed-box > form.pagos-modern-app,
.box.collapsed-box .pagos-modern-app {
    padding: 0 !important;
    margin: 0 !important;
    min-height: 0 !important;
    border: 0 !important;
}
.box.collapsed-box .pm-actions-mobile { display: none !important; }
.box.collapsed-box > form.pagos-modern-app > .box-body { display: none !important; }
/* Sin colapsar, el relleno inferior solo donde hay barra fija (móvil). */
.pagos-modern-app { padding-bottom: 0; }
@media (max-width: 768px) {
    .box:not(.collapsed-box) > form.pagos-modern-app { padding-bottom: 150px; }
}
/* Cajas consecutivas juntas: el listado sube en cuanto la de arriba colapsa. */
.box.collapsed-box { margin-bottom: 14px !important; }
.box.collapsed-box + .row,
.box.collapsed-box + * { margin-top: 0 !important; }

/* --------------------------------------------------------------------------
   25.4 TOPBAR SOLO CON ICONOS + TOOLTIP PROPIO
   Se ocultan todas las etiquetas de texto. El tooltip se alimenta del
   atributo `title`, que modern-theme.js copia a `data-gt-tip` (y elimina el
   original para que el navegador no muestre además el suyo, feo y lento).
   -------------------------------------------------------------------------- */
.main-header .navbar-nav > li > a span.text,
.main-header .navbar-nav > li.sell-btn > a span.text {
    display: none !important;
}
.main-header .navbar-nav > li > a {
    display: flex !important;
    align-items: center;
    justify-content: center;
    gap: 0;
    min-width: 42px;
    padding: 0 10px !important;
}
.main-header .navbar-nav > li.sell-btn > a {
    min-width: 40px;
    padding: 0 12px !important;
}
.main-header .svg-icon { width: 18px; height: 18px; }
.main-header .navbar-nav > li > a .fa { font-size: 16px; }

/* Tooltip */
[data-gt-tip] { position: relative; }
[data-gt-tip]::after,
[data-gt-tip]::before {
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity var(--gt-fast), transform var(--gt-fast), visibility var(--gt-fast);
    z-index: 1200;
}
[data-gt-tip]::after {
    content: attr(data-gt-tip);
    position: absolute;
    top: calc(100% + 9px);
    left: 50%;
    transform: translate(-50%, -4px);
    background: var(--gt-tip-bg);
    color: var(--gt-tip-text);
    font-size: 12px;
    font-weight: 600;
    letter-spacing: .01em;
    line-height: 1.3;
    white-space: nowrap;
    max-width: 260px;
    overflow: hidden;
    text-overflow: ellipsis;
    padding: 7px 11px;
    border-radius: var(--gt-r-sm);
    box-shadow: var(--gt-shadow-lg);
    border: 1px solid var(--gt-tip-border);
}
/* Punta del tooltip */
[data-gt-tip]::before {
    content: "";
    position: absolute;
    top: calc(100% + 3px);
    left: 50%;
    transform: translate(-50%, -4px);
    border: 6px solid transparent;
    border-bottom-color: var(--gt-tip-bg);
}
[data-gt-tip]:hover::after,
[data-gt-tip]:hover::before,
[data-gt-tip]:focus-visible::after,
[data-gt-tip]:focus-visible::before {
    opacity: 1;
    visibility: visible;
    transform: translate(-50%, 0);
}
/* Cerca del borde derecho el tooltip se alinea para no salirse. */
.main-header .navbar-custom-menu > .navbar-nav > li:nth-last-child(-n+3) > a[data-gt-tip]::after {
    left: auto;
    right: 0;
    transform: translate(0, -4px);
}
.main-header .navbar-custom-menu > .navbar-nav > li:nth-last-child(-n+3) > a[data-gt-tip]:hover::after {
    transform: translate(0, 0);
}
@media (prefers-reduced-motion: reduce) {
    [data-gt-tip]::after, [data-gt-tip]::before { transition: none; }
}
/* En táctil el tooltip estorba: se desactiva. */
@media (hover: none) {
    [data-gt-tip]::after, [data-gt-tip]::before { display: none !important; }
}

/* Topbar móvil: iconos algo más juntos y sin desbordes. */
@media (max-width: 767px) {
    .main-header .navbar-nav > li > a { min-width: 38px; padding: 0 7px !important; }
    .main-header .navbar-nav > li.sell-btn > a { min-width: 36px; padding: 0 9px !important; }
    .main-header .navbar-nav > li.sell-btn { margin: 0 2px; }
    .main-header .svg-icon { width: 17px; height: 17px; }
    .main-header .navbar-nav > li > a .label {
        position: absolute;
        top: 8px;
        right: 2px;
        font-size: 9px;
        padding: 1px 4px !important;
    }
    #live_datetime { display: none; }
}

/* --------------------------------------------------------------------------
   25.5 TEXTOS SOBRE FONDO BLANCO FIJO EN TEMA CLARO
   Varias pantallas (report_cashbook entre ellas) usan utilidades de AdminLTE
   con fondo claro fijo y texto claro heredado, o `.bg-white` con color
   heredado del contenedor. Se fuerza tinta oscura sobre cualquier fondo
   claro fijo, en ambos temas.
   -------------------------------------------------------------------------- */
.bg-white, .bg-gray-light, .bg-light, .well, .jumbotron,
.bg-white *, .bg-gray-light *,
[style*="background:#fff"]:not([style*="color"]),
[style*="background: #fff"]:not([style*="color"]),
[style*="background-color:#fff"]:not([style*="color"]),
[style*="background-color: #fff"]:not([style*="color"]) {
    color: var(--gt-text);
}
[data-theme="light"] .bg-white,
[data-theme="light"] .bg-white *,
[data-theme="light"] .well,
[data-theme="light"] .well * {
    color: #16202f;
}
.well {
    background: var(--gt-surface-2) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md) !important;
    box-shadow: none !important;
}
/* Utilidades de texto de AdminLTE, legibles en ambos temas. */
.text-muted { color: var(--gt-text-muted) !important; }
.text-black, .text-navy { color: var(--gt-text) !important; }
.text-white { color: #fff !important; }
[data-theme="dark"] .text-black { color: var(--gt-text) !important; }

/* --------------------------------------------------------------------------
   25.6 REPORT_CASHBOOK — PRESENTACIÓN
   -------------------------------------------------------------------------- */
#cashbook-summary .box-header.bg-warning,
#cashbook-summary > .box-header {
    background: linear-gradient(135deg, var(--gt-accent-soft) 0%, var(--gt-surface) 72%) !important;
    color: var(--gt-text) !important;
}
#cashbook-summary > .box-header .box-title,
#cashbook-summary > .box-header .box-title strong,
#cashbook-summary > .box-header a { color: var(--gt-text) !important; }
#cashbook-summary .box-title {
    font-size: 15px;
    font-weight: 800;
    letter-spacing: -.01em;
}

/* Las dos columnas (ingresos / egresos) como tarjetas diferenciadas. */
.income-expense-row > [class*="col-"] { padding-bottom: 6px; }
#cashbook-summary .table {
    background: var(--gt-surface) !important;
    border-radius: var(--gt-r-md);
    overflow: hidden;
}
#cashbook-summary .table > thead > tr > th {
    background: var(--gt-surface-2) !important;
    color: var(--gt-text-soft) !important;
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: .06em;
    border-bottom: 2px solid var(--gt-border) !important;
}
#cashbook-summary .table > tbody > tr > td { color: var(--gt-text) !important; }
#cashbook-summary .table > tbody > tr:last-child > td { border-bottom: none; }
/* Fila de total: destacada y siempre legible. */
#cashbook-summary .table > tbody > tr:last-child,
#cashbook-summary .table tfoot tr {
    background: var(--gt-accent-soft) !important;
    font-weight: 800;
}
#cashbook-summary .table > tbody > tr:last-child > td,
#cashbook-summary .table tfoot th,
#cashbook-summary .table tfoot td { color: var(--gt-text) !important; }
/* Cifras alineadas y monoespaciadas para comparar de un vistazo. */
#cashbook-summary td:last-child,
#cashbook-summary th:last-child { text-align: right; }
#cashbook-summary .input-group-addon {
    background: var(--gt-surface-2) !important;
    border-color: var(--gt-border) !important;
    color: var(--gt-text-muted) !important;
}
#monto-apertura .form-control { background: var(--gt-surface) !important; color: var(--gt-text) !important; }

/* --------------------------------------------------------------------------
   25.7 BANK_TRANSACTIONS — PRESENTACIÓN
   Tabla muy ancha (24 columnas). Se prioriza legibilidad: cabecera fija
   coherente, columnas numéricas tabulares y scroll horizontal claro.
   -------------------------------------------------------------------------- */
#invoice-invoice-list { font-size: 12.5px; }
#invoice-invoice-list > thead > tr > th {
    background: var(--gt-surface-2) !important;
    color: var(--gt-text-soft) !important;
    font-size: 10.5px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: .05em;
    white-space: nowrap;
    vertical-align: middle !important;
    border-color: var(--gt-border) !important;
}
#invoice-invoice-list > tbody > tr > td {
    vertical-align: middle !important;
    border-color: var(--gt-border) !important;
    color: var(--gt-text) !important;
}
#invoice-invoice-list td.text-right,
#invoice-invoice-list th.text-right { font-variant-numeric: tabular-nums; }
#invoice-invoice-list > tfoot > tr > th {
    background: var(--gt-surface-2) !important;
    color: var(--gt-text) !important;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
    border-top: 2px solid var(--gt-border) !important;
}
/* Cabecera fija de DataTables (fixedHeader) con el fondo correcto. */
.fixedHeader-floating, .fixedHeader-locked {
    background: var(--gt-surface) !important;
    box-shadow: var(--gt-shadow-md);
    z-index: 500 !important;
}
[data-theme="dark"] .fixedHeader-floating thead th { background: var(--gt-surface-2) !important; }
/* Indicador de scroll horizontal en tablas anchas. */
.table-responsive {
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md);
    background:
        linear-gradient(90deg, var(--gt-surface) 30%, rgba(0, 0, 0, 0)) left / 28px 100% no-repeat,
        linear-gradient(270deg, var(--gt-surface) 30%, rgba(0, 0, 0, 0)) right / 28px 100% no-repeat,
        radial-gradient(farthest-side at 0 50%, rgba(0, 0, 0, .14), transparent) left / 12px 100% no-repeat,
        radial-gradient(farthest-side at 100% 50%, rgba(0, 0, 0, .14), transparent) right / 12px 100% no-repeat;
    background-attachment: local, local, scroll, scroll;
}
/* Barra de herramientas de DataTables ordenada. */
.dataTables_wrapper .dt-buttons { display: inline-flex; gap: 6px; flex-wrap: wrap; }
.dataTables_wrapper .dt-buttons .btn {
    border-radius: var(--gt-r-sm) !important;
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    color: var(--gt-text-muted) !important;
}
.dataTables_wrapper .dt-buttons .btn:hover {
    background: var(--gt-accent-soft) !important;
    color: var(--gt-accent) !important;
    border-color: var(--gt-accent) !important;
}
.dataTables_processing {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md) !important;
    box-shadow: var(--gt-shadow-lg) !important;
    color: var(--gt-text) !important;
}

/* --------------------------------------------------------------------------
   25.8 POS.PHP — DISEÑO Y MODO OSCURO
   pos.css cablea blancos y grises (#ecf0f5, #ffffff, #999, #0a0a0a) que no
   respetaban el tema. Aquí se reconduce todo a tokens y se moderniza la
   presentación: tarjetas de producto con elevación, ticket legible y
   barra de acciones con más jerarquía.
   -------------------------------------------------------------------------- */
body.pos, body#pos-page {
    background-color: var(--gt-bg) !important;
    color: var(--gt-text);
}
/* El patrón decorativo de fondo se atenúa en oscuro (era muy ruidoso). */
[data-theme="dark"] body#pos-page::after { opacity: .10 !important; }
[data-theme="light"] body#pos-page::after { opacity: .28 !important; }

/* --- Buscador de productos --- */
#searchbox input {
    background-color: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md) !important;
    font-size: 1.5rem !important;
    box-shadow: var(--gt-shadow-sm);
    transition: border-color var(--gt-fast), box-shadow var(--gt-fast);
}
#searchbox input::placeholder { color: var(--gt-text-soft) !important; }
#searchbox input:focus {
    border-color: var(--gt-accent) !important;
    box-shadow: 0 0 0 4px var(--gt-accent-ring) !important;
}
#searchbox .search-btn, #searchbox .search-btn .svg-icon { color: var(--gt-text-muted) !important; }
#searchbox .search-btn .svg-icon { filter: var(--gt-side-icon-filter); }
#searchbox .category-search .select2-container--default .select2-selection--single {
    border: 1px solid var(--gt-border) !important;
    background: var(--gt-surface) !important;
    border-radius: var(--gt-r-md) !important;
}

/* --- Rejilla de productos --- */
#item-list .item .item-inner {
    background-color: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md) !important;
    box-shadow: var(--gt-shadow-sm) !important;
    transition: transform var(--gt-fast), box-shadow var(--gt-fast), border-color var(--gt-fast);
}
#item-list .item .item-inner:hover {
    transform: translateY(-3px);
    border-color: var(--gt-accent) !important;
    box-shadow: var(--gt-shadow-lg) !important;
}
#item-list .item.select .item-inner {
    border-color: var(--gt-amber) !important;
    border-width: 2px !important;
    box-shadow: 0 0 0 3px rgba(245, 158, 11, .22) !important;
}
#item-list .item .item-info span {
    color: var(--gt-text) !important;
    font-size: 12.5px;
    line-height: 1.25;
    word-break: normal !important;
    overflow-wrap: anywhere;
}
/* Verde oscurecido: el acento de marca solo daba 4.36:1 con texto blanco.
   Esta rampa alcanza 4.63:1 en su extremo mas claro. */
#item-list .item .item-mask {
    background: linear-gradient(135deg, #10855c 0%, #0a6244 100%) !important;
    border-radius: 0 0 var(--gt-r-md) var(--gt-r-md);
}
#item-list .item .item-mask span { color: #fff !important; font-size: 1.25rem !important; }
#item-list .item .item-img { background: var(--gt-surface-2); }
.ibadge { background-color: var(--gt-blue) !important; border-radius: var(--gt-r-pill); }

/* --- Panel derecho: ticket --- */
#right-panel .contents, #left-panel .contents { background: transparent !important; }
#people-area, #invoice-item, #invoice-calculation, #total-amount,
#salesman, #invoice-note, .invoice-area .well-sm {
    background-color: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    border-color: var(--gt-border) !important;
}
#total-amount {
    background: linear-gradient(135deg, #10855c 0%, #0a6244 100%) !important;
    color: #fff !important;
    border-radius: var(--gt-r-md);
}
#total-amount .total-amount-inner span,
#total-amount .total-amount-inner .currency-symbol,
#total-amount .total-amount-inner .main-amount { color: #fff !important; }
#total-amount .total-amount-inner .main-amount {
    font-family: var(--gt-font-display);
    font-weight: 800;
    font-variant-numeric: tabular-nums;
}
#people-area > input, #invoice-note textarea, #salesman select {
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    border-color: var(--gt-border) !important;
}
#people-area .customer-icon, #people-area .add-icon, #people-area .edit-icon {
    background: var(--gt-surface-2) !important;
    color: var(--gt-text-muted) !important;
}
#people-area .customer-icon .svg-icon,
#people-area .add-icon .svg-icon { filter: var(--gt-side-icon-filter); }
#people-area .previous-due { background: var(--gt-amber-soft) !important; border-radius: var(--gt-r-sm); }
#people-area .previous-due h4, #people-area .previous-due span { color: var(--gt-text) !important; }
#people-area .slidedown-menu {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md);
    box-shadow: var(--gt-shadow-lg) !important;
}
#people-area .slidedown-menu:before { border-bottom-color: var(--gt-surface) !important; }
#people-area .slidedown-menu ul.customer-list > li { border-color: var(--gt-border) !important; }
#people-area .slidedown-menu ul.customer-list > li > a { color: var(--gt-text) !important; }
#people-area .slidedown-menu ul.customer-list > li:hover { background: var(--gt-surface-hover) !important; }
#people-area .slidedown-menu ul.customer-list > li:hover a { color: var(--gt-accent) !important; }

/* --- Tabla del ticket --- */
#invoice-item-head thead tr, #invoice-item-head thead tr th {
    background: var(--gt-surface-2) !important;
    color: var(--gt-text-soft) !important;
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: .05em;
    border-color: var(--gt-border) !important;
}
#invoice-item-list table tbody td,
#invoice-item-list .invoice-item .product-name span,
#invoice-item-list .invoice-item .product-price,
#invoice-item-list .invoice-item .product-subtotal {
    color: var(--gt-text) !important;
    border-color: var(--gt-border) !important;
}
#invoice-item-list .invoice-item { border-bottom: 1px solid var(--gt-border) !important; }
#invoice-item-list .invoice-item:hover { background: var(--gt-surface-hover) !important; }
#invoice-item-list .product-quantity button {
    background: var(--gt-surface-2) !important;
    color: var(--gt-text) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-sm) !important;
}
#invoice-item-list .product-quantity button:hover {
    background: var(--gt-accent) !important;
    color: var(--gt-accent-contrast) !important;
    border-color: var(--gt-accent) !important;
}
#invoice-item .table input[type='number'],
#invoice-calculation input {
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-sm) !important;
    text-align: right;
    font-variant-numeric: tabular-nums;
}
#invoice-calculation .table td, #invoice-calculation .table tr {
    background: transparent !important;
    color: var(--gt-text) !important;
    border-color: var(--gt-border) !important;
}
#invoice-item-list .invoice-item .delete-icon,
#invoice-item-list .invoice-item .product-delete { color: var(--gt-red) !important; }

/* --- Botón de cobro y barra vertical --- */
#pay-button button {
    border-radius: var(--gt-r-md) !important;
    font-weight: 800 !important;
    letter-spacing: .02em;
    box-shadow: var(--gt-shadow-md);
    transition: transform var(--gt-fast), box-shadow var(--gt-fast);
}
#pay-button button:hover { transform: translateY(-2px); box-shadow: var(--gt-shadow-lg); }
#vertial-toolbar { background: var(--gt-surface-2) !important; border-left: 1px solid var(--gt-border); }
#vertial-toolbar .toolbar-icon {
    color: var(--gt-text-muted) !important;
    border-bottom: 1px solid var(--gt-border) !important;
    transition: background var(--gt-fast), color var(--gt-fast);
}
#vertial-toolbar .toolbar-icon:hover { background: var(--gt-surface-hover) !important; color: var(--gt-accent) !important; }
#vertial-toolbar .toolbar-icon.selected { background: var(--gt-accent-soft) !important; color: var(--gt-accent) !important; }
#vertial-toolbar .toolbar-icon .fa { color: inherit !important; }
#vertial-toolbar .toolbar-icon .expand {
    background: var(--gt-tip-bg) !important;
    color: var(--gt-tip-text) !important;
    border-radius: var(--gt-r-sm);
    box-shadow: var(--gt-shadow-md);
}

/* --- Cargador y modales del POS --- */
#left-panel .ajax-loader {
    background-color: var(--gt-surface) !important;
    border: 1px solid var(--gt-border);
    box-shadow: var(--gt-shadow-lg) !important;
}
.pos .modal-content, .modal-lg .modal-content {
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    border-color: var(--gt-border) !important;
    border-radius: var(--gt-r-lg) !important;
}
.pos .modal-content h3, .modal-lg .modal-content .modal-header { color: var(--gt-text) !important; }
.pos .context-menu-list {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    box-shadow: var(--gt-shadow-lg) !important;
}
.pos .context-menu-item { color: var(--gt-text) !important; }
.pos .context-menu-item.context-menu-hover { background: var(--gt-accent-soft) !important; color: var(--gt-accent) !important; }
.pos-product-pagination > .pagination > li > a,
.pos-product-pagination > .pagination > li > span {
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    border-color: var(--gt-border) !important;
}
.pos-product-pagination > .pagination > .active > a,
.pos-product-pagination > .pagination > .active > span {
    background: var(--gt-accent) !important;
    color: var(--gt-accent-contrast) !important;
    border-color: var(--gt-accent) !important;
}
.add-new-product-btn .btn {
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    border: 1px dashed var(--gt-border) !important;
    border-radius: var(--gt-r-md) !important;
}
.add-new-product-btn .btn:hover { border-color: var(--gt-accent) !important; color: var(--gt-accent) !important; }
.add-new-product-btn .svg-icon { filter: var(--gt-side-icon-filter); }

/* --- POS en móvil ---
   IMPORTANTE: pos.css ya trae su propia estrategia responsive: por debajo de
   768px el #right-panel se oculta (position:absolute + visibility:hidden) y
   aparece el botón #minicart para alternarlo. En la ronda anterior forcé
   `display:block` y `width:100%` sobre .pos-content y ambos paneles, lo que
   deshacía ese esquema y dejaba al minicart sin nada que alternar: por eso el
   botón dejó de funcionar. Aquí NO se toca la maquetación de los paneles;
   solo se ajustan detalles que no interfieren. */
@media (max-width: 991px) {
    #searchbox input { font-size: 1.3rem !important; }
}
@media (max-width: 767px) {
    #total-amount .total-amount-inner .main-amount { font-size: 2.6em !important; }
}
@media (max-width: 480px) {
    #total-amount .total-amount-inner .main-amount { font-size: 2.2em !important; }
}
/* El minicart conserva su comportamiento original y solo se reviste. */
#minicart {
    background-color: var(--gt-accent) !important;
    border-radius: var(--gt-r-md) 0 0 var(--gt-r-md) !important;
    box-shadow: var(--gt-shadow-lg) !important;
}
#minicart .minicart-content .body { color: var(--gt-accent-contrast) !important; }

/* ==========================================================================
   26. CUARTA RONDA
   ========================================================================== */

/* --------------------------------------------------------------------------
   26.1 RESALTADO DE FILA AL PASAR EL MOUSE — REGRESIÓN CORREGIDA
   En la sección 23.5 puse las reglas de filas alternas (tr.odd/tr.even)
   DESPUÉS de las de :hover y con la misma especificidad, así que ganaban por
   orden de cascada y el resaltado desaparecía. Además muchas tablas de este
   proyecto no llevan .table-hover sino .table-hovered (sin la variante que
   DataTables reconoce), por lo que hay que cubrir también `table.dataTable`
   a secas. Este bloque es el último que toca el hover: gana siempre.
   -------------------------------------------------------------------------- */
table.dataTable tbody tr:hover,
table.dataTable tbody tr:hover > td,
table.dataTable tbody tr.odd:hover,
table.dataTable tbody tr.odd:hover > td,
table.dataTable tbody tr.even:hover,
table.dataTable tbody tr.even:hover > td,
table.dataTable.stripe tbody tr.odd:hover > td,
table.dataTable.stripe tbody tr.even:hover > td,
table.dataTable.display tbody tr.odd:hover > td,
table.dataTable.display tbody tr.even:hover > td,
table.dataTable.hover tbody tr.odd:hover > td,
table.dataTable.hover tbody tr.even:hover > td,
.table-hovered > tbody > tr:hover,
.table-hovered > tbody > tr:hover > td,
.table-striped > tbody > tr:hover,
.table-striped > tbody > tr:hover > td {
    background-color: var(--gt-row-hover) !important;
    color: var(--gt-text) !important;
}
/* La celda ordenada también, para que la fila no quede a dos tonos. */
table.dataTable tbody tr:hover > td.sorting_1,
table.dataTable.display tbody tr.odd:hover > td.sorting_1,
table.dataTable.display tbody tr.even:hover > td.sorting_1,
table.dataTable.order-column tbody tr:hover > td.sorting_1 {
    background-color: var(--gt-row-hover-strong) !important;
    color: var(--gt-text) !important;
}
/* Enlaces y etiquetas dentro de la fila resaltada siguen legibles. */
/* #0b7f5a daba 4.48:1 sobre la fila resaltada clara (justo por debajo del
   minimo). Se usa un verde algo mas profundo solo para este caso. */
table.dataTable tbody tr:hover a,
.table-hovered > tbody > tr:hover a { color: #0a6c4c !important; }
[data-theme="dark"] table.dataTable tbody tr:hover a,
[data-theme="dark"] .table-hovered > tbody > tr:hover a { color: var(--gt-accent) !important; }
table.dataTable tbody tr:hover .label { opacity: 1; }

/* --------------------------------------------------------------------------
   26.2 CONTRASTE DEL RESALTADO EN OSCURO
   --gt-surface-hover (#1b2537) se usa también para menús y botones; sobre las
   filas de una tabla oscura el salto era demasiado fuerte y "apagaba" el
   texto. Se usan tonos propios, mucho más suaves, solo para filas.
   -------------------------------------------------------------------------- */
:root {
    --gt-row-hover: #eef3f9;
    --gt-row-hover-strong: #e4ebf5;
}
[data-theme="dark"] {
    /* Apenas 4 puntos de luminancia sobre la superficie: se percibe el
       resaltado sin que el texto pierda contraste. */
    --gt-row-hover: #18202f;
    --gt-row-hover-strong: #1c2537;
}

/* --------------------------------------------------------------------------
   26.3 TOOLTIPS MÁS GRANDES Y FUERA DEL PUNTERO
   Se separan más del elemento y crecen, para que el cursor no los tape.
   -------------------------------------------------------------------------- */
[data-gt-tip]::after {
    top: calc(100% + 16px);
    font-size: 13.5px;
    font-weight: 600;
    padding: 10px 15px;
    border-radius: var(--gt-r-md);
    letter-spacing: .015em;
    box-shadow: 0 14px 34px -10px rgba(0, 0, 0, .5), 0 2px 6px rgba(0, 0, 0, .18);
}
[data-gt-tip]::before {
    top: calc(100% + 5px);
    border-width: 7px;
}
[data-gt-tip]:hover::after { transform: translate(-50%, 0); }

/* --------------------------------------------------------------------------
   26.4 PAGOS_CREATE_FORM NO DEBE AFECTAR AL .row SIGUIENTE
   El formulario declara variables y estilos propios dentro de un <style> en
   línea; al no estar aislado, su contexto de apilamiento y sus márgenes
   arrastraban al bloque siguiente. Se le da contención propia.
   -------------------------------------------------------------------------- */
.box > form.pagos-modern-app {
    display: block;
    position: relative;
    z-index: 0;
    /* `contain` aísla layout y pintura: nada de lo que ocurra dentro puede
       desplazar ni solaparse con lo que viene después. */
    contain: layout paint style;
    margin: 0;
}
.box > form.pagos-modern-app::after {
    content: "";
    display: table;
    clear: both;
}
/* La caja que lo contiene cierra su propio flujo. */
.box:has(> form.pagos-modern-app) {
    overflow: hidden;
    margin-bottom: 14px !important;
}
/* El .row siguiente arranca limpio, colapsado o no. */
.box:has(> form.pagos-modern-app) + .row,
.box.collapsed-box + .row {
    clear: both;
    margin-top: 0 !important;
    position: relative;
    z-index: 1;
}
/* La barra fija móvil se saca del contenedor contenido para que siga fija. */
@media (max-width: 768px) {
    .box > form.pagos-modern-app { contain: none; }
}

/* --------------------------------------------------------------------------
   26.5 POS — LISTA DE PRODUCTOS, MENÚ CONTEXTUAL Y TOTAL
   -------------------------------------------------------------------------- */
/* Contenedor de la rejilla: faltaba adaptarlo, quedaba blanco en oscuro. */
#item-list, .pos .contents, .pos .content-area, .pos .row-group, .pos .content-row {
    background-color: transparent !important;
}
#item-list { background: var(--gt-bg) !important; }
#left-panel, #right-panel { background: var(--gt-bg) !important; }
#searchbox { background: var(--gt-surface) !important; box-shadow: var(--gt-shadow-sm) !important; }

/* Reglas por skin que pintaban la lista y el ticket con colores fijos. */
.skin-black #item-list .item .item-mask,
.skin-blue #item-list .item .item-mask,
.skin-green #item-list .item .item-mask,
.skin-red #item-list .item .item-mask,
.skin-yellow #item-list .item .item-mask {
    background: linear-gradient(135deg, #10855c 0%, #0a6244 100%) !important;
}
.skin-black #list-table-div table tr,
.skin-blue #list-table-div table tr,
.skin-green #list-table-div table tr,
.skin-red #list-table-div table tr,
.skin-yellow #list-table-div table tr,
.skin-black #list-table-head tr,
.skin-blue #list-table-head tr,
.skin-green #list-table-head tr,
.skin-red #list-table-head tr,
.skin-yellow #list-table-head tr {
    background-color: var(--gt-surface) !important;
    color: var(--gt-text) !important;
}
.skin-black .contents #item-list .btn-both .bg-img,
.skin-blue .contents #item-list .btn-both .bg-img,
.skin-green .contents #item-list .btn-both .bg-img,
.skin-red .contents #item-list .btn-both .bg-img,
.skin-yellow .contents #item-list .btn-both .bg-img { background: var(--gt-surface) !important; }
.skin-black .contents #item-list .btn-both span,
.skin-blue .contents #item-list .btn-both span,
.skin-green .contents #item-list .btn-both span,
.skin-red .contents #item-list .btn-both span,
.skin-yellow .contents #item-list .btn-both span {
    background: var(--gt-accent-700) !important;
    color: #fff !important;
}
.skin-black .product-name span,
.skin-blue .product-name span,
.skin-green .product-name span,
.skin-red .product-name span,
.skin-yellow .product-name span {
    background-color: var(--gt-accent-700) !important;
    border-color: var(--gt-accent-700) !important;
    color: #fff !important;
}
.skin-black #people-area > input,
.skin-blue #people-area > input,
.skin-green #people-area > input,
.skin-red #people-area > input,
.skin-yellow #people-area > input {
    background-color: var(--gt-surface-2) !important;
    color: var(--gt-text) !important;
}
.skin-black #invoice-calculation .table tbody tr.row2,
.skin-blue #invoice-calculation .table tbody tr.row2,
.skin-green #invoice-calculation .table tbody tr.row2,
.skin-red #invoice-calculation .table tbody tr.row2,
.skin-yellow #invoice-calculation .table tbody tr.row2,
.skin-black #invoice-calculation .table tbody tr.row3,
.skin-blue #invoice-calculation .table tbody tr.row3,
.skin-green #invoice-calculation .table tbody tr.row3,
.skin-red #invoice-calculation .table tbody tr.row3,
.skin-yellow #invoice-calculation .table tbody tr.row3 {
    background-color: var(--gt-surface-2) !important;
    color: var(--gt-text) !important;
}
.skin-black #invoice-calculation .table tbody tr td input,
.skin-blue #invoice-calculation .table tbody tr td input,
.skin-green #invoice-calculation .table tbody tr td input,
.skin-red #invoice-calculation .table tbody tr td input,
.skin-yellow #invoice-calculation .table tbody tr td input {
    background-color: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    border-radius: var(--gt-r-sm) !important;
}
.skin-black #searchbox > input,
.skin-yellow #searchbox > input { background-color: var(--gt-surface) !important; }
.skin-black .previous-due, .skin-blue .previous-due,
.skin-green .previous-due, .skin-red .previous-due,
.skin-yellow .previous-due { background-color: transparent !important; }

/* total-amount-inner: los dos "cuadros" eran <span> con color heredado del
   skin (.total-amount-inner{color:#333} en negro, #fff en otros), que sobre
   el degradado verde se veían como bloques negros o blancos. */
.total-amount-inner,
.skin-black .total-amount-inner,
.skin-blue .total-amount-inner,
.skin-green .total-amount-inner,
.skin-red .total-amount-inner,
.skin-yellow .total-amount-inner {
    color: #fff !important;
    background: transparent !important;
    display: flex;
    align-items: baseline;
    justify-content: center;
    gap: 6px;
    height: 100%;
}
#total-amount .total-amount-inner span,
#total-amount .total-amount-inner .currency-symbol,
#total-amount .total-amount-inner .main-amount {
    background: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
    color: #fff !important;
    text-shadow: 0 1px 3px rgba(0, 0, 0, .35);
}
#total-amount .total-amount-inner .currency-symbol { font-size: 1.5em; opacity: .85; }

/* Menú contextual (clic derecho sobre un producto). */
.context-menu-list,
.pos .context-menu-list {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    box-shadow: var(--gt-shadow-lg) !important;
    border-radius: var(--gt-r-md) !important;
    padding: 6px !important;
}
.context-menu-item,
.pos .context-menu-item {
    background-color: transparent !important;
    color: var(--gt-text) !important;
    border-radius: var(--gt-r-sm);
    padding: 8px 12px 8px 32px !important;
}
.context-menu-item.context-menu-hover,
.pos .context-menu-item.context-menu-hover {
    background-color: var(--gt-accent) !important;
    color: var(--gt-accent-contrast) !important;
}
.context-menu-item.context-menu-disabled {
    color: var(--gt-text-soft) !important;
    background-color: transparent !important;
}
.context-menu-separator { border-bottom-color: var(--gt-border) !important; }
.context-menu-icon::before,
.context-menu-icon.context-menu-icon--fa::before { color: var(--gt-accent) !important; }
.context-menu-icon.context-menu-hover:before,
.context-menu-icon.context-menu-icon--fa.context-menu-hover::before {
    color: var(--gt-accent-contrast) !important;
}
.context-menu-submenu:after { border-left-color: var(--gt-text-muted) !important; }

/* --------------------------------------------------------------------------
   26.6 DASHBOARD — DEPOSIT-TODAY
   main.css lo fija con `background:#9bfbcf`, un verde menta plano que en
   oscuro deslumbra y en claro no tiene jerarquía.
   -------------------------------------------------------------------------- */
.deposit-today {
    background: linear-gradient(135deg, var(--gt-accent-soft) 0%, var(--gt-surface) 100%) !important;
    border: 1px solid var(--gt-border) !important;
    border-left: 4px solid var(--gt-accent) !important;
    border-radius: var(--gt-r-md) !important;
    color: var(--gt-text) !important;
    padding: 14px 16px !important;
    box-shadow: var(--gt-shadow-sm);
    transition: transform var(--gt-fast), box-shadow var(--gt-fast);
}
.deposit-today:hover { transform: translateY(-2px); box-shadow: var(--gt-shadow-md); }
.deposit-today,
.deposit-today p,
.deposit-today span,
.deposit-today h4,
.deposit-today h3,
.deposit-today td,
.deposit-today th,
.deposit-today a { color: var(--gt-text) !important; }
.deposit-today .title,
.deposit-today h4 {
    font-size: 11.5px !important;
    font-weight: 800 !important;
    text-transform: uppercase;
    letter-spacing: .07em;
    color: var(--gt-text-muted) !important;
    margin: 0 0 6px !important;
}
/* La cifra manda: tipografía display, tabular y en color de acento. */
.deposit-today .amount,
.deposit-today strong,
.deposit-today b {
    font-family: var(--gt-font-display);
    font-size: 22px;
    font-weight: 800;
    font-variant-numeric: tabular-nums;
    color: var(--gt-accent-700) !important;
    line-height: 1.15;
}
[data-theme="dark"] .deposit-today .amount,
[data-theme="dark"] .deposit-today strong,
[data-theme="dark"] .deposit-today b { color: var(--gt-accent) !important; }
.deposit-today table { background: transparent !important; margin: 0; }
.deposit-today table > tbody > tr > td,
.deposit-today table > tbody > tr > th {
    background: transparent !important;
    border-color: var(--gt-border) !important;
    padding: 6px 4px !important;
    font-variant-numeric: tabular-nums;
}
.deposit-today .list-group-item {
    background: transparent !important;
    border: 0 !important;
    border-bottom: 1px solid var(--gt-border) !important;
    padding: 7px 0 !important;
}
.deposit-today .list-group-item:last-child { border-bottom: 0 !important; }

/* --------------------------------------------------------------------------
   26.7 REPORT_CASHBOOK — MODERNIZACIÓN
   Se estructura como panel financiero: cabecera con acento, dos columnas
   claramente separadas (ingresos / egresos) y tablas tipo ficha.
   -------------------------------------------------------------------------- */
#cashbook-summary {
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-lg) !important;
    box-shadow: var(--gt-shadow-md) !important;
    background: var(--gt-surface) !important;
}
#cashbook-summary > .box-header {
    padding: 16px 20px !important;
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 12px;
}
#cashbook-summary .box-title { flex: 1; min-width: 220px; }

/* Columnas de ingresos y egresos con identidad propia. */
.income-expense-row > [class*="col-"] > .box,
.income-expense-row > [class*="col-"] > div > .box {
    border-radius: var(--gt-r-md);
    background: var(--gt-surface-2) !important;
    border: 1px solid var(--gt-border) !important;
    padding: 4px;
}
.income-expense-row [class*="col-"]:first-child .table > thead > tr > th {
    border-bottom-color: var(--gt-accent) !important;
}
.income-expense-row [class*="col-"]:last-child .table > thead > tr > th {
    border-bottom-color: var(--gt-red) !important;
}
/* Encabezados de sección (h4/h3 sueltos dentro de las columnas). */
#cashbook-summary h3, #cashbook-summary h4, #cashbook-summary h5 {
    font-family: var(--gt-font-display);
    font-weight: 800;
    color: var(--gt-text) !important;
    letter-spacing: -.01em;
}
/* Tablas de detalle: filas aireadas y separadores suaves. */
#cashbook-summary .table > tbody > tr > td,
#cashbook-summary .table > tbody > tr > th {
    padding: 9px 10px !important;
    border-color: var(--gt-border) !important;
}
#cashbook-summary .table > tbody > tr:hover > td {
    background: var(--gt-row-hover) !important;
    color: var(--gt-text) !important;
}
/* Barra de filtros del encabezado. */
#monto-apertura {
    padding: 12px 20px;
    background: var(--gt-surface-2);
    border-bottom: 1px solid var(--gt-border);
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    align-items: center;
}
#monto-apertura .input-group { max-width: 320px; }
#monto-apertura .form-control,
#monto-apertura select.form-control {
    border-radius: var(--gt-r-sm) !important;
    height: 38px;
}
#monto-apertura .input-group-addon:first-child { border-radius: var(--gt-r-sm) 0 0 var(--gt-r-sm) !important; }
#monto-apertura .input-group-addon:last-child { border-radius: 0 var(--gt-r-sm) var(--gt-r-sm) 0 !important; }
/* Totales de cierre destacados como tarjeta. */
#cashbook-summary .box-footer,
#cashbook-summary .total-final {
    background: linear-gradient(135deg, var(--gt-accent-soft) 0%, var(--gt-surface-2) 100%) !important;
    border-top: 2px solid var(--gt-accent) !important;
    font-weight: 800;
    color: var(--gt-text) !important;
}
@media (max-width: 991px) {
    #cashbook-summary > .box-header { padding: 12px 14px !important; }
    #monto-apertura { padding: 10px 14px; }
    #monto-apertura .input-group { max-width: 100%; }
    #cashbook-summary > .box-header a.pull-right { margin-right: 0; }
}

/* --------------------------------------------------------------------------
   26.8 BANK_TRANSACTIONS — PRESENTACIÓN
   -------------------------------------------------------------------------- */
#invoice-invoice-list > tbody > tr > td { padding: 8px 9px !important; }
#invoice-invoice-list .label {
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: .03em;
    padding: 3px 8px !important;
    border-radius: var(--gt-r-pill);
}
/* Columnas de importe destacadas de las descriptivas. */
#invoice-invoice-list > tbody > tr > td.text-right {
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--gt-text) !important;
}
/* Fila anulada, claramente diferenciada. */
#invoice-invoice-list tr.anulado > td,
#invoice-invoice-list tr.danger > td { text-decoration: line-through; opacity: .72; }
/* Barra superior del listado ordenada en una sola línea. */
#invoice-invoice-list_wrapper .dataTables_length,
#invoice-invoice-list_wrapper .dataTables_filter { margin-bottom: 10px; }
#invoice-invoice-list_wrapper .dataTables_filter input {
    border-radius: var(--gt-r-pill) !important;
    padding: 6px 14px !important;
    min-width: 220px;
}
.dataTables_wrapper .dt-buttons {
    position: static !important;
    margin-left: 0 !important;
    float: none !important;
    display: inline-flex;
}

/* ==========================================================================
   27. QUINTA RONDA
   ========================================================================== */

/* --------------------------------------------------------------------------
   27.1 BOX-TITLE QUE DESAPARECÍA AL PASAR EL MOUSE (regresión propia)
   En 25.1 dejé el botón de colapso a ancho completo y sin fondo, pero la
   regla :hover de 24.4 (`background: var(--gt-accent-soft) !important`) tiene
   más especificidad y seguía pintando ese rectángulo invisible ENCIMA del
   título. El botón debe ser transparente SIEMPRE; el realce vive en la
   cabecera y en la pastilla del icono.
   -------------------------------------------------------------------------- */
.btn.btn-box-tool.add-new-btn,
.btn.btn-box-tool.add-new-btn:hover,
.btn.btn-box-tool.add-new-btn:focus,
.btn.btn-box-tool.add-new-btn:active,
.box-header .add-new-btn:hover,
.box-header .add-new-btn:focus {
    background: transparent !important;
    background-color: transparent !important;
    border-color: transparent !important;
    box-shadow: none !important;
}

/* --------------------------------------------------------------------------
   27.2 CRÉDITOS: ALTURA CERO GARANTIZADA AL COLAPSAR
   Las reglas anteriores anulaban paddings y márgenes, pero bastaba con que
   cualquier descendiente conservara altura para que el hueco siguiera ahí.
   `height: 0` + `overflow: hidden` lo cierra de forma incondicional, sin
   recurrir a display:none (que rompía la animación de despliegue).
   Se retira también el `contain` de 26.4: no resolvía el problema y crea un
   bloque contenedor para la barra fija.
   -------------------------------------------------------------------------- */
.box > form.pagos-modern-app { contain: none; }

.box.collapsed-box > form.pagos-modern-app,
.box.collapsed-box form.pagos-modern-app {
    height: 0 !important;
    max-height: 0 !important;
    min-height: 0 !important;
    padding: 0 !important;
    margin: 0 !important;
    border: 0 !important;
    overflow: hidden !important;
    visibility: hidden;
}
/* Cuando NO está colapsado, nada de lo anterior debe quedarse pegado. */
.box:not(.collapsed-box) > form.pagos-modern-app {
    height: auto !important;
    max-height: none !important;
    overflow: visible !important;
    visibility: visible;
}
/* La caja colapsada se cierra en la cabecera y el listado sube pegado. */
.box.collapsed-box:has(> form.pagos-modern-app) {
    padding-bottom: 0 !important;
    margin-bottom: 12px !important;
}

/* --------------------------------------------------------------------------
   27.3 POS — #salesman y #invoice-note (regresión propia)
   Los metí en el mismo grupo que los paneles del ticket y les puse
   `background: var(--gt-surface)`. Como miden 30x30 y flotan sobre la barra
   verde del total, se veían como dos cuadros blancos (o negros en oscuro).
   Son solo iconos: deben ir sin fondo.
   -------------------------------------------------------------------------- */
#salesman, #invoice-note,
#total-amount #salesman, #total-amount #invoice-note {
    background: transparent !important;
    background-color: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
    border-radius: var(--gt-r-sm);
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background var(--gt-fast);
}
#salesman:hover, #invoice-note:hover {
    background: rgba(255, 255, 255, .18) !important;
}
#invoice-note .fa,
#salesman .fa,
.skin-black #invoice-note .fa,
.skin-blue #invoice-note .fa,
.skin-green #invoice-note .fa,
.skin-red #invoice-note .fa,
.skin-yellow #invoice-note .fa {
    color: #fff !important;
    font-size: 17px;
    padding: 0 !important;
    text-shadow: 0 1px 2px rgba(0, 0, 0, .35);
}
#salesman .svg-icon, #invoice-note .svg-icon {
    filter: brightness(0) invert(1) opacity(.92);
    width: 18px; height: 18px;
}

/* --------------------------------------------------------------------------
   27.4 POS — LÍNEAS DEL TICKET (invoice-item)
   pos.css fija `#invoice-item-list .invoice-item { background-color:#f7fffb }`,
   un blanco verdoso que en oscuro quedaba blanco y saltaba a un gris muy
   oscuro al pasar el mouse. Ahora ambas superficies salen de los tokens.
   -------------------------------------------------------------------------- */
#invoice-item-list .invoice-item,
#invoice-item-list table tbody tr,
#invoice-item-list table tbody tr.invoice-item {
    background-color: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    transition: background-color var(--gt-fast);
}
#invoice-item-list .invoice-item:nth-child(even) { background-color: var(--gt-surface-2) !important; }
#invoice-item-list .invoice-item:hover,
#invoice-item-list table tbody tr:hover {
    background-color: var(--gt-row-hover) !important;
    box-shadow: inset 3px 0 0 var(--gt-accent);
}
#invoice-item-list .invoice-item:hover td { color: var(--gt-text) !important; }

/* Nombre del producto: en claro el verde #026c3c sobre borde claro tenía
   poco contraste. Se usa una pastilla de acento suave con tinta oscura,
   mucho más legible, y sólida en oscuro. */
#invoice-item-list .invoice-item .product-name span,
.skin-black .product-name span,
.skin-blue .product-name span,
.skin-green .product-name span,
.skin-red .product-name span,
.skin-yellow .product-name span {
    background-color: var(--gt-accent-soft) !important;
    border: 1px solid var(--gt-accent) !important;
    color: var(--gt-accent-800) !important;
    font-weight: 700 !important;
    font-size: 1.25rem !important;
    border-radius: var(--gt-r-sm) !important;
    padding: 4px 10px !important;
    box-shadow: none !important;
    text-align: left !important;
}
[data-theme="dark"] #invoice-item-list .invoice-item .product-name span,
[data-theme="dark"] .skin-black .product-name span,
[data-theme="dark"] .skin-blue .product-name span,
[data-theme="dark"] .skin-green .product-name span,
[data-theme="dark"] .skin-red .product-name span,
[data-theme="dark"] .skin-yellow .product-name span {
    color: var(--gt-accent) !important;
}
#invoice-item-list .invoice-item .product-price,
#invoice-item-list .invoice-item .product-subtotal {
    font-variant-numeric: tabular-nums;
    font-weight: 700;
}

/* --------------------------------------------------------------------------
   27.5 POS EN MÓVIL — ORDEN Y DEPURACIÓN DE LA BARRA SUPERIOR
   La fila ya es flex (sección 23.2), así que se reordena con `order` sin
   tocar el marcado, y se ocultan los accesos que no aportan en pantalla
   pequeña. Solo afecta a la pantalla del POS.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
    body.pos .main-header > .navbar { display: flex; align-items: center; }
    /* El botón de menú va primero, antes del icono de caja/totales. */
    body.pos .main-header .navbar .sidebar-toggle {
        order: -1;
        float: none !important;
        flex: 0 0 auto;
    }
    body.pos .main-header .navbar-custom-menu { order: 1; }

    /* Accesos que se ocultan en el POS móvil por falta de espacio. */
    body.pos #togglingfullscreen,
    body.pos li:has(> a[href="reporte_creditos.php"]),
    body.pos li:has(> a[href="reporte_pagos.php"]) {
        display: none !important;
    }
    /* Respaldo por si :has() no está disponible. */
    body.pos a[href="reporte_creditos.php"],
    body.pos a[href="reporte_pagos.php"] { display: none !important; }
}

/* --------------------------------------------------------------------------
   27.6 CONTENT-HEADER EN MÓVIL
   En pantallas pequeñas .main-header pasa a `position: relative` y el h1 del
   encabezado de contenido se montaba sobre la barra.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
    .content-header {
        position: relative;
        z-index: 1;
        padding: 14px 14px 0 !important;
        clear: both;
    }
    .content-header > h1 {
        font-size: 1.7rem !important;
        line-height: 1.25;
        margin: 0 0 4px !important;
        word-break: break-word;
    }
    .content-header > h1 > small {
        display: block;
        padding-left: 0;
        font-size: 12.5px;
        margin-top: 3px;
        color: var(--gt-text-muted);
    }
    .content-header > .breadcrumb {
        position: relative !important;
        top: 0 !important;
        right: 0 !important;
        float: none !important;
        margin-top: 8px;
        padding-left: 0;
        background: transparent !important;
        font-size: 11.5px;
    }
    .main-header { z-index: 1030; }
}

/* --------------------------------------------------------------------------
   27.7 DATATABLES — PRESENTACIÓN Y SEGUIMIENTO DE FILA
   Sombra suave y guía de color a la izquierda para poder seguir la fila con
   la mirada en tablas muy anchas, sin recurrir a fondos de alto contraste.
   -------------------------------------------------------------------------- */
table.dataTable, .table {
    border-collapse: separate !important;
    border-spacing: 0;
}
table.dataTable > thead > tr > th,
.table > thead > tr > th {
    background: var(--gt-surface-2) !important;
    color: var(--gt-text-soft) !important;
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: .05em;
    border-bottom: 2px solid var(--gt-border) !important;
    padding: 11px 10px !important;
}
table.dataTable > tbody > tr,
.table > tbody > tr {
    transition: background-color 120ms ease, box-shadow 120ms ease;
}
table.dataTable > tbody > tr > td,
.table > tbody > tr > td {
    border-top: 1px solid var(--gt-border) !important;
    padding: 10px !important;
}
/* Seguimiento de fila: fondo suave + guía de acento + elevación sutil. */
table.dataTable tbody tr:hover,
.table-hovered > tbody > tr:hover,
.table-hover > tbody > tr:hover,
.table-striped > tbody > tr:hover {
    box-shadow: inset 3px 0 0 var(--gt-accent),
                0 1px 0 var(--gt-border),
                0 -1px 0 var(--gt-border);
    position: relative;
    z-index: 1;
}
[data-theme="dark"] table.dataTable tbody tr:hover,
[data-theme="dark"] .table-hovered > tbody > tr:hover {
    box-shadow: inset 3px 0 0 var(--gt-accent),
                0 0 0 1px rgba(255, 255, 255, .05);
}
/* Primera y última celda redondeadas al resaltar. */
table.dataTable tbody tr:hover > td:first-child,
.table-hovered > tbody > tr:hover > td:first-child { border-radius: var(--gt-r-sm) 0 0 var(--gt-r-sm); }
table.dataTable tbody tr:hover > td:last-child,
.table-hovered > tbody > tr:hover > td:last-child { border-radius: 0 var(--gt-r-sm) var(--gt-r-sm) 0; }

/* Controles del wrapper con aire y coherencia. */
.dataTables_wrapper { padding-top: 4px; }
.dataTables_wrapper .dataTables_length select,
.dataTables_wrapper .dataTables_filter input {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    color: var(--gt-text) !important;
    border-radius: var(--gt-r-sm) !important;
    padding: 5px 10px !important;
}
.dataTables_wrapper .dataTables_info,
.dataTables_wrapper .dataTables_length,
.dataTables_wrapper .dataTables_filter { color: var(--gt-text-muted) !important; font-size: 12.5px; }
.dataTables_wrapper .dataTables_paginate .paginate_button {
    border-radius: var(--gt-r-sm) !important;
    border: 1px solid transparent !important;
    padding: 5px 11px !important;
    margin: 0 2px;
}
.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
    background: var(--gt-surface-hover) !important;
    border-color: var(--gt-border) !important;
    color: var(--gt-accent) !important;
}
.dataTables_wrapper .dataTables_paginate .paginate_button.current,
.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
    background: var(--gt-accent-700) !important;
    border-color: var(--gt-accent-700) !important;
    color: #fff !important;
    font-weight: 700;
}
table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:after { opacity: .45; }
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:after { opacity: 1; color: var(--gt-accent); }

/* --------------------------------------------------------------------------
   27.8 MODALES — MODO OSCURO Y ENCABEZADO REDONDEADO
   main.css deja el encabezado en #eee y el pie en #f4f4f4, con esquinas
   rectas y una sombra dura.
   -------------------------------------------------------------------------- */
.modal-content {
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-lg) !important;
    box-shadow: 0 30px 70px -18px rgba(0, 0, 0, .55) !important;
    overflow: hidden;
}
.modal-header {
    background: linear-gradient(135deg, var(--gt-accent-soft) 0%, var(--gt-surface-2) 100%) !important;
    color: var(--gt-text) !important;
    border-bottom: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-lg) var(--gt-r-lg) 0 0 !important;
    padding: 14px 18px !important;
    box-shadow: none !important;
}
/* Los skins pintan la cabecera con degradados de color propios. */
.skin-black .modal-header, .skin-blue .modal-header,
.skin-green .modal-header, .skin-red .modal-header,
.skin-yellow .modal-header {
    background: linear-gradient(135deg, var(--gt-accent-soft) 0%, var(--gt-surface-2) 100%) !important;
}
.modal-title,
.skin-blue .modal-title, .skin-green .modal-title,
.skin-red .modal-title, .skin-yellow .modal-title {
    color: var(--gt-text) !important;
    font-family: var(--gt-font-display);
    font-weight: 800;
    font-size: 1.6rem;
    letter-spacing: -.01em;
}
.modal-body {
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
}
.modal-body .sub-title {
    background-color: var(--gt-surface-2) !important;
    border: 1px solid var(--gt-border) !important;
    color: var(--gt-text) !important;
    border-radius: var(--gt-r-sm);
}
.modal-footer {
    background: var(--gt-surface-2) !important;
    border-top: 1px solid var(--gt-border) !important;
    border-radius: 0 0 var(--gt-r-lg) var(--gt-r-lg) !important;
    box-shadow: none !important;
    padding: 12px 18px !important;
}
.modal { background: rgba(8, 12, 20, .55) !important; }
[data-theme="dark"] .modal { background: rgba(0, 0, 0, .68) !important; }
.modal-backdrop.in { opacity: .5; }
/* Botón de cierre coherente con el resto. */
.modal-header .close > span {
    background-color: var(--gt-surface) !important;
    color: var(--gt-red) !important;
    border: 1px solid var(--gt-border) !important;
    box-shadow: var(--gt-shadow-sm) !important;
    font-size: 2.4rem;
    line-height: 1;
    padding: 0 9px 3px;
}
.modal-header .close:hover > span {
    background-color: var(--gt-red) !important;
    color: #fff !important;
    border-color: var(--gt-red) !important;
}
.modal-dialog .box-body { background: transparent !important; }
.modal .panel-body { color: var(--gt-text) !important; }
/* Variantes de color de AdminLTE: se conserva el color solo en el borde. */
.modal-primary .modal-header, .modal-info .modal-header,
.modal-success .modal-header, .modal-warning .modal-header,
.modal-danger .modal-header {
    color: var(--gt-text) !important;
}
.modal-primary .modal-body, .modal-info .modal-body,
.modal-success .modal-body, .modal-warning .modal-body,
.modal-danger .modal-body {
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
}
.modal-danger .modal-content { border-top: 3px solid var(--gt-red) !important; }
.modal-success .modal-content { border-top: 3px solid var(--gt-accent) !important; }
.modal-warning .modal-content { border-top: 3px solid var(--gt-amber) !important; }
.modal-info .modal-content, .modal-primary .modal-content { border-top: 3px solid var(--gt-blue) !important; }
/* Diálogos de bootbox y sweetalert. */
.bootbox .modal-content, .swal-modal, .sweet-alert {
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    border-radius: var(--gt-r-lg) !important;
}
.swal-title, .swal-text, .sweet-alert h2, .sweet-alert p { color: var(--gt-text) !important; }

/* --------------------------------------------------------------------------
   27.9 PROYECCIONES Y PROYECCION_AHORRO
   Ambas traen un <style> con `.form-section` de borde #ddd, `.section-title`
   y `.section-header` con degradado azul fijo, y una tabla con fondo blanco.
   -------------------------------------------------------------------------- */
#tabla-proyeccion,
#tabla-proyeccion table {
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
}
#tabla-proyeccion th, #tabla-proyeccion td {
    border-color: var(--gt-border) !important;
    color: var(--gt-text) !important;
    font-variant-numeric: tabular-nums;
}
#tabla-proyeccion thead th {
    background: var(--gt-surface-2) !important;
    color: var(--gt-text-soft) !important;
}
#tabla-proyeccion tbody tr:hover td {
    background: var(--gt-row-hover) !important;
    color: var(--gt-text) !important;
}
.form-section {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md) !important;
    color: var(--gt-text) !important;
}
.form-section label, .form-section span, .form-section p, .form-section td, .form-section th {
    color: var(--gt-text) !important;
}
/* Cabeceras de sección: degradado de marca en lugar del azul fijo. */
.section-title, .section-header {
    /* Rampa verificada: ambos extremos >=4.5:1 con texto blanco (el teal
       original quedaba en 3.68:1). */
    background: linear-gradient(135deg, #0a7a55 0%, #0b6a7d 100%) !important;
    color: #fff !important;
    border-radius: var(--gt-r-sm) var(--gt-r-sm) 0 0 !important;
    padding: 9px 14px !important;
    font-weight: 800;
    letter-spacing: .01em;
    text-shadow: 0 1px 2px rgba(0, 0, 0, .25);
}
.section-title *, .section-header * { color: #fff !important; }
.form-row, .serie-numero { color: var(--gt-text) !important; }
.right-label { color: var(--gt-blue) !important; font-weight: 700; }
[data-theme="dark"] .right-label { color: #93b8f5 !important; }
.note-area, .print-btn {
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-sm) !important;
}
.print-btn:hover { background: var(--gt-accent-soft) !important; color: var(--gt-accent) !important; }
/* `.container` estaba redefinido con un lila fijo. */
.content .container {
    background-color: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md) !important;
    color: var(--gt-text) !important;
}
.cuotas-rojas {
    color: #8a1c1c !important;
    border-color: var(--gt-red) !important;
    background-color: #ffd6d6 !important;
}
[data-theme="dark"] .cuotas-rojas {
    color: #ffc4c4 !important;
    background-color: rgba(239, 68, 68, .18) !important;
}

/* --------------------------------------------------------------------------
   27.10 REPORT_CASHBOOK — PESTAÑAS DE APERTURA Y CIERRE
   -------------------------------------------------------------------------- */
#apertura, #cierre, #total_general { padding: 4px 2px; }
#apertura .table, #cierre .table {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md);
    overflow: hidden;
}
#apertura .table > thead > tr > th,
#cierre .table > thead > tr > th {
    background: var(--gt-surface-2) !important;
    color: var(--gt-text-soft) !important;
    font-size: 10.5px;
    letter-spacing: .06em;
}
/* Denominaciones de billetes/monedas: rejilla legible y cifras alineadas. */
#apertura .table > tbody > tr > td,
#cierre .table > tbody > tr > td {
    padding: 8px 10px !important;
    font-variant-numeric: tabular-nums;
    border-color: var(--gt-border) !important;
}
#apertura input.form-control,
#cierre input.form-control {
    text-align: right;
    font-variant-numeric: tabular-nums;
    font-weight: 700;
    height: 34px;
    border-radius: var(--gt-r-sm) !important;
    background: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    border: 1px solid var(--gt-border) !important;
}
#apertura input.form-control:focus,
#cierre input.form-control:focus {
    border-color: var(--gt-accent) !important;
    box-shadow: 0 0 0 3px var(--gt-accent-ring) !important;
}
/* Última fila (total) destacada. */
#apertura .table > tbody > tr:last-child,
#cierre .table > tbody > tr:last-child {
    background: var(--gt-accent-soft) !important;
    font-weight: 800;
}
#apertura .table > tbody > tr:last-child > td,
#cierre .table > tbody > tr:last-child > td { color: var(--gt-text) !important; }
/* Pestañas del bloque con más presencia. */
#cashbook-summary .nav-tabs-custom > .nav-tabs > li > a,
.nav-tabs-custom > .nav-tabs > li > a {
    font-weight: 700;
    font-size: 13px;
    letter-spacing: .01em;
    padding: 11px 16px;
}
#cashbook-summary .nav-tabs-custom > .nav-tabs > li.active {
    border-top-color: var(--gt-accent) !important;
}

/* ==========================================================================
   28. SEXTA RONDA
   ========================================================================== */

/* --------------------------------------------------------------------------
   28.1 BOTÓN DE CIERRE DE LOS MODALES — QUEDABA CORTADO (regresión propia)
   En 27.8 puse `overflow: hidden` en .modal-content para redondear las
   esquinas, pero main.css coloca el botón de cierre FUERA de la caja
   (top:-10px; right:-10px), así que se recortaba. Se quita el recorte y el
   botón pasa a estar dentro del modal, que además es más predecible.
   -------------------------------------------------------------------------- */
.modal-content { overflow: visible !important; }
/* Las esquinas se redondean en cada pieza, ya no por recorte del contenedor. */
.modal-header { border-radius: var(--gt-r-lg) var(--gt-r-lg) 0 0 !important; }
.modal-footer { border-radius: 0 0 var(--gt-r-lg) var(--gt-r-lg) !important; }
.modal-body:last-child { border-radius: 0 0 var(--gt-r-lg) var(--gt-r-lg); }

.modal-header .close {
    position: absolute !important;
    top: 10px !important;
    right: 12px !important;
    margin: 0 !important;
    opacity: 1 !important;
    z-index: 1060;
}
.modal-header .close > span {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    padding: 0 !important;
    font-size: 22px !important;
    line-height: 1 !important;
    border-radius: var(--gt-r-sm) !important;
    background-color: var(--gt-surface) !important;
    color: var(--gt-text-muted) !important;
    border: 1px solid var(--gt-border) !important;
    box-shadow: none !important;
    transition: background var(--gt-fast), color var(--gt-fast), border-color var(--gt-fast);
}
.modal-header .close:hover > span {
    background-color: var(--gt-red) !important;
    color: #fff !important;
    border-color: var(--gt-red) !important;
}
/* Deja sitio al botón para que no se monte sobre el título. */
.modal-header { padding-right: 56px !important; }

/* --------------------------------------------------------------------------
   28.2 LÍNEAS DE LOS MODALES EN OSCURO
   Las filas contextuales de AdminLTE (success/danger/warning/info) conservaban
   su fondo pastel fijo con texto claro encima: ilegibles en oscuro.
   -------------------------------------------------------------------------- */
[data-theme="dark"] .modal .table > tbody > tr.success > td,
[data-theme="dark"] .modal .table > tbody > tr > td.success,
[data-theme="dark"] .modal tr.success, [data-theme="dark"] .modal td.success,
[data-theme="dark"] .modal .bg-green-light, [data-theme="dark"] .modal .bg-success {
    background-color: rgba(16, 133, 92, .22) !important;
    color: #b7f5da !important;
}
[data-theme="dark"] .modal .table > tbody > tr.danger > td,
[data-theme="dark"] .modal .table > tbody > tr > td.danger,
[data-theme="dark"] .modal tr.danger, [data-theme="dark"] .modal td.danger,
[data-theme="dark"] .modal .bg-red-light, [data-theme="dark"] .modal .bg-danger {
    background-color: rgba(220, 38, 38, .22) !important;
    color: #ffc4c4 !important;
}
[data-theme="dark"] .modal .table > tbody > tr.warning > td,
[data-theme="dark"] .modal .table > tbody > tr > td.warning,
[data-theme="dark"] .modal tr.warning, [data-theme="dark"] .modal td.warning {
    background-color: rgba(245, 158, 11, .20) !important;
    color: #ffe0a3 !important;
}
[data-theme="dark"] .modal .table > tbody > tr.info > td,
[data-theme="dark"] .modal .table > tbody > tr > td.info,
[data-theme="dark"] .modal tr.info, [data-theme="dark"] .modal td.info {
    background-color: rgba(59, 130, 246, .20) !important;
    color: #cfe3ff !important;
}
/* Cualquier celda del modal con fondo claro cableado en el atributo style. */
[data-theme="dark"] .modal [style*="background"] { color: var(--gt-text); }
[data-theme="dark"] .modal .table > tbody > tr > td,
[data-theme="dark"] .modal .table > tfoot > tr > th,
[data-theme="dark"] .modal .table > tfoot > tr > td {
    color: var(--gt-text) !important;
    border-color: var(--gt-border) !important;
}
[data-theme="dark"] .modal .table { background: transparent !important; }

/* --------------------------------------------------------------------------
   28.3 CONTORNO DE LOS CAMPOS
   El borde por defecto casi no se distinguía; ahora todos los campos llevan el
   contorno marcado que antes solo tenía el campo activo, y el foco pasa a un
   verde más oscuro con halo.
   -------------------------------------------------------------------------- */
.form-control,
select.form-control,
textarea.form-control,
input[type="text"].form-control,
input[type="number"].form-control,
input[type="password"].form-control,
input[type="email"].form-control,
input[type="date"].form-control,
.input-login,
.pm-input,
.select2-container--default .select2-selection--single,
.select2-container--default .select2-selection--multiple {
    border: 1.5px solid var(--gt-field-border) !important;
    border-radius: var(--gt-r-sm) !important;
    background-color: var(--gt-surface) !important;
    color: var(--gt-text) !important;
    box-shadow: none !important;
    transition: border-color var(--gt-fast), box-shadow var(--gt-fast);
}
.form-control:hover:not(:focus):not([disabled]):not([readonly]),
.select2-container--default:hover .select2-selection--single {
    border-color: var(--gt-field-border-hover) !important;
}
.form-control:focus,
select.form-control:focus,
textarea.form-control:focus,
.pm-input:focus,
.select2-container--default.select2-container--open .select2-selection--single,
.select2-container--default.select2-container--focus .select2-selection--multiple {
    border-color: var(--gt-field-border-focus) !important;
    border-width: 1.5px !important;
    box-shadow: 0 0 0 3px var(--gt-accent-ring) !important;
    outline: none !important;
}
.form-control[disabled], .form-control[readonly] {
    background-color: var(--gt-surface-2) !important;
    border-color: var(--gt-border) !important;
    color: var(--gt-text-muted) !important;
}
.has-error .form-control { border-color: var(--gt-red) !important; }
.has-success .form-control { border-color: var(--gt-accent) !important; }
label, .control-label { color: var(--gt-text-soft); font-weight: 600; }

/* --------------------------------------------------------------------------
   28.4 RESALTADO DE FILA MÁS PERCEPTIBLE
   El tono anterior apenas se separaba del fondo (1.07:1 en oscuro). Se sube
   el contraste del fondo y se refuerza la guía lateral de acento.
   -------------------------------------------------------------------------- */
:root {
    --gt-row-hover: #e3ecf7;
    --gt-row-hover-strong: #d6e4f5;
}
[data-theme="dark"] {
    --gt-row-hover: #223047;
    --gt-row-hover-strong: #29394f;
}
table.dataTable tbody tr:hover,
.table-hovered > tbody > tr:hover,
.table-hover > tbody > tr:hover,
.table-striped > tbody > tr:hover {
    box-shadow: inset 4px 0 0 var(--gt-accent) !important;
}
/* Excepción: dentro de las pestañas de arqueo el resaltado estorba, porque
   son campos de captura, no filas navegables (ver 28.5). */
#apertura .table > tbody > tr:hover,
#cierre .table > tbody > tr:hover,
#apertura .table > tbody > tr:hover > td,
#cierre .table > tbody > tr:hover > td {
    background-color: transparent !important;
    box-shadow: none !important;
}

/* --------------------------------------------------------------------------
   28.5 REPORT_CASHBOOK — PESTAÑAS DE APERTURA Y CIERRE
   El marcado usa utilidades de AdminLTE (`bg-info`, `bg-yellow`, `bg-blue`)
   sobre las celdas. AdminLTE fuerza `color:#fff !important` en todas ellas,
   así que las etiquetas (MONTO DE APERTURA, BILLETES, MONEDAS) quedaban en
   blanco sobre celeste o ámbar: casi ilegibles, y peor en oscuro.
   Aquí esas celdas dejan de ser bloques de color y pasan a ser etiquetas y
   campos de captura, que es lo que realmente son.
   -------------------------------------------------------------------------- */
#apertura, #cierre { padding: 10px 4px 4px; }

#apertura .table, #cierre .table {
    background: transparent !important;
    border: none !important;
    margin-bottom: 14px !important;
}
#apertura .table > tbody > tr,
#cierre .table > tbody > tr,
#apertura .table-striped > tbody > tr:nth-of-type(odd),
#cierre .table-striped > tbody > tr:nth-of-type(odd) {
    background: transparent !important;
}
#apertura .table > tbody > tr > td,
#cierre .table > tbody > tr > td {
    background: transparent !important;
    border: none !important;
    padding: 5px !important;
    vertical-align: middle !important;
}

/* Celdas de etiqueta (antes .bg-info): texto legible, sin bloque de color. */
#apertura td.bg-info, #cierre td.bg-info,
#apertura .bg-info, #cierre .bg-info {
    background: transparent !important;
    color: var(--gt-text-soft) !important;
    text-align: right !important;
    font-size: 11.5px;
    letter-spacing: .06em;
    text-transform: uppercase;
    padding-right: 12px !important;
}
#apertura td.bg-info b, #cierre td.bg-info b,
#apertura .bg-info b, #cierre .bg-info b {
    color: var(--gt-text-soft) !important;
    font-weight: 800;
}

/* Celdas de captura (antes .bg-yellow): sin fondo ámbar; el campo manda. */
#apertura td.bg-yellow, #cierre td.bg-yellow,
#apertura .bg-yellow, #cierre .bg-yellow {
    background: transparent !important;
    color: var(--gt-text) !important;
    padding: 4px !important;
}
/* Denominación (Q200, Q50…): pastilla neutra delante del campo. */
#apertura .input-group-addon,
#cierre .input-group-addon,
#apertura td.bg-yellow .input-group-addon,
#cierre td.bg-yellow .input-group-addon {
    background: var(--gt-surface-2) !important;
    border: 1.5px solid var(--gt-field-border) !important;
    border-right: none !important;
    color: var(--gt-text-soft) !important;
    font-weight: 800;
    font-size: 12px;
    min-width: 62px;
    text-align: center;
    border-radius: var(--gt-r-sm) 0 0 var(--gt-r-sm) !important;
}
/* El lápiz de editar el monto de apertura sí conserva color de acción. */
#apertura .input-group-addon.bg-blue,
#cierre .input-group-addon.bg-blue,
#btn-update-balance {
    background: var(--gt-accent-700) !important;
    border: 1.5px solid var(--gt-accent-700) !important;
    border-left: none !important;
    color: #fff !important;
    border-radius: 0 var(--gt-r-sm) var(--gt-r-sm) 0 !important;
    min-width: 42px;
    cursor: pointer;
}
#btn-update-balance:hover { background: var(--gt-accent-800) !important; }
#btn-update-balance .fa { color: #fff !important; }

#apertura .input-group, #cierre .input-group { width: 100%; }
#apertura .input-group .form-control,
#cierre .input-group .form-control {
    border-radius: 0 var(--gt-r-sm) var(--gt-r-sm) 0 !important;
    text-align: right !important;
    font-variant-numeric: tabular-nums;
    font-weight: 700;
}
#apertura .input-group .input-group-addon + .form-control,
#cierre .input-group .input-group-addon + .form-control { border-left-width: 1.5px !important; }
/* El monto de apertura, que es solo lectura, se ve como dato, no como campo. */
#apertura #opening-balance,
#cierre #closing-balance {
    background: var(--gt-surface-2) !important;
    color: var(--gt-text) !important;
    font-family: var(--gt-font-display);
    font-weight: 800 !important;
}

/* Sin cambios de sombreado al pasar el mouse: son campos, no filas. */
#apertura .table > tbody > tr:hover,
#cierre .table > tbody > tr:hover,
#apertura .table > tbody > tr:hover > td,
#cierre .table > tbody > tr:hover > td,
#apertura tr:hover, #cierre tr:hover {
    background: transparent !important;
    box-shadow: none !important;
    transform: none !important;
}

/* Bloques de billetes y monedas agrupados visualmente. */
#apertura .table-responsive, #cierre .table-responsive {
    background: var(--gt-surface) !important;
    border: 1px solid var(--gt-border) !important;
    border-radius: var(--gt-r-md);
    padding: 12px 14px;
}
#apertura .mt-20, #cierre .mt-20 { margin-top: 12px !important; }

@media (max-width: 767px) {
    #apertura .col-md-offset-3, #cierre .col-md-offset-3 { margin-left: 0; }
    #apertura .input-group-addon, #cierre .input-group-addon { min-width: 52px; font-size: 11px; }
}
