/*
 * Sistema de tema UX — EsencialGPS / Sucursal Virtual
 * Prefijo: --ux-* (para no colisionar con Bootstrap, FontAwesome, etc.)
 * Activación: <html data-theme="dark"> (o sin atributo = claro)
 * Reutilizable en cualquier vista de sv_esencial.
 */

/* ==========================================================================
   Paleta CLARO — "Frost x Slate": celeste gris elegante, texto azul petróleo.
   Ningún elemento queda en blanco puro; todo respira con un tinte azulado.
   ========================================================================== */
:root {
    --ux-bg:             #E6EEF5;  /* fondo general: celeste gris ambiente */
    --ux-surface:        #F4F8FB;  /* cards, topbar, inputs (celeste casi blanco) */
    --ux-surface-alt:    #DBE5EF;  /* hovers, zebras, headers de tabla */
    --ux-border:         #C1CEDB;  /* bordes con tinte azulado sutil */
    --ux-border-strong:  #96A9BC;  /* bordes enfatizados */
    --ux-text:           #253548;  /* azul petróleo profundo (reemplaza negro) */
    --ux-text-muted:     #516579;  /* texto secundario (labels, descriptions) */
    --ux-text-subtle:    #7A8DA0;  /* texto de ayuda, metadata */
    --ux-primary:        #106BA0;
    --ux-primary-dark:   #0b4d75;
    --ux-primary-soft:   #D7E7F4;
    --ux-primary-ghost:  rgba(16,107,160,0.10);
    --ux-primary-ring:   rgba(16,107,160,0.28);
    --ux-accent:         #EB800E;
    --ux-accent-dark:    #b5630a;
    --ux-accent-soft:    #FCE4C0;
    --ux-soft-text:      #8a5a00;
    --ux-muted:          #5A7288;
    --ux-shadow:         rgba(37,53,72,0.10);   /* sombra con tinte azul */
    --ux-scrollbar:      #96A9BC;
    --ux-scrollbar-hover:#106BA0;
}

[data-theme="dark"] {
    --ux-bg:             #0f1b2a;
    --ux-surface:        #15263a;
    --ux-surface-alt:    #1e3352;
    --ux-border:         #2a4468;
    --ux-border-strong:  #3c5a7e;
    --ux-text:           #e8eef5;
    --ux-text-muted:     #a8b4c5;
    --ux-text-subtle:    #7a8aa0;
    --ux-primary:        #5CB7E8;
    --ux-primary-dark:   #3a95c8;
    --ux-primary-soft:   #1a3a5c;
    --ux-primary-ghost:  rgba(92,183,232,0.12);
    --ux-primary-ring:   rgba(92,183,232,0.35);
    --ux-accent:         #FF8C2E;
    --ux-accent-dark:    #d96a10;
    --ux-accent-soft:    #3a2a0e;
    --ux-soft-text:      #FFD06A;
    --ux-muted:          #8a96aa;
    --ux-shadow:         rgba(0,0,0,0.35);
    --ux-scrollbar:      #2a4468;
    --ux-scrollbar-hover:#5CB7E8;
}

/* Transición global suave al cambiar tema */
html.ux-theming,
html.ux-theming body,
html.ux-theming *,
html.ux-theming *::before,
html.ux-theming *::after {
    transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease, fill 0.2s ease, stroke 0.2s ease;
}

/* Scope del modo: aplica al html y body desde el primer paint, sin necesidad
   de que el JS agregue clases. Esto evita el flash blanco→oscuro al recargar. */
html[data-theme],
html[data-theme] body {
    background-color: var(--ux-bg);
    color: var(--ux-text);
}
/* Mantener compatibilidad con la clase legacy ux-enabled */
body.ux-enabled {
    background: var(--ux-bg);
    color: var(--ux-text);
}

/* Toggle del tema (botón en el sidebar) */
.ux-theme-toggle {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: var(--ux-surface-alt);
    border: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: var(--ux-accent);
    cursor: pointer;
    font-size: 12px;
    padding: 0;
    transition: background 0.15s, color 0.15s, transform 0.25s;
}
.ux-theme-toggle:hover {
    background: var(--ux-primary-soft);
    transform: rotate(18deg);
}
.ux-theme-toggle:focus { outline: 2px solid var(--ux-primary); outline-offset: 2px; }

.ux-theme-toggle .icon-sun { display: inline; }
.ux-theme-toggle .icon-moon { display: none; }
[data-theme="dark"] .ux-theme-toggle .icon-sun { display: none; }
[data-theme="dark"] .ux-theme-toggle .icon-moon { display: inline; color: var(--ux-soft-text); }

/* Ajuste fino: imágenes con leve dimming en dark para no quemar retinas */
[data-theme="dark"] .v2-screenshot-frame img {
    opacity: 0.92;
    transition: opacity 0.2s ease;
}
[data-theme="dark"] .v2-screenshot-frame img:hover { opacity: 1; }

/* ============================================================== */
/* FASE 1 — Integración global del tema                            */
/* ============================================================== */

/* --- Fuente moderna Inter, se carga por @import para no tocar cada layout --- */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');

html.ux-font-modern,
html.ux-font-modern body {
    font-family: 'Inter', 'Nunito', 'Segoe UI', Arial, sans-serif;
    font-feature-settings: 'ss01', 'cv11';
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

/* Transiciones globales suaves (hover, focus, cambio de tema).
   Se aplican a todas las páginas del sitio cuando el tema está activo. */
body.ux-enabled a,
body.ux-enabled button,
body.ux-enabled .btn,
body.ux-enabled .nav-link,
body.ux-enabled .dropdown-item,
body.ux-enabled .card,
body.ux-enabled input,
body.ux-enabled textarea,
body.ux-enabled select {
    transition: background-color .18s ease, color .18s ease, border-color .18s ease,
                box-shadow .18s ease, transform .18s ease;
}

/* ============================================================== */
/* Slider day/night (toggle global — reemplaza al botón circular)   */
/*                                                                  */
/* HTML esperado:                                                   */
/*   <button class="ux-theme-switch" data-ux-theme-toggle>          */
/*     <span class="ux-theme-switch-track">                         */
/*       <span class="ux-theme-switch-thumb">                       */
/*         <i class="fas fa-sun icon-sun"></i>                      */
/*         <i class="fas fa-moon icon-moon"></i>                    */
/*       </span>                                                    */
/*     </span>                                                      */
/*   </button>                                                      */
/* ============================================================== */

.ux-theme-switch {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 28px;
    padding: 0;
    background: transparent;
    border: none;
    cursor: pointer;
    vertical-align: middle;
}
.ux-theme-switch:focus { outline: none; }
.ux-theme-switch:focus-visible .ux-theme-switch-track {
    box-shadow: 0 0 0 3px var(--ux-primary-ghost);
}

.ux-theme-switch-track {
    position: relative;
    display: block;
    width: 100%;
    height: 100%;
    background: linear-gradient(90deg, #fff1d6 0%, #fff1d6 50%, #e8f0fa 50%, #e8f0fa 100%);
    border: 1px solid var(--ux-border);
    border-radius: 14px;
    box-shadow: inset 0 1px 2px rgba(0,0,0,0.06);
    transition: background .35s ease, border-color .25s ease, box-shadow .25s ease;
    overflow: hidden;
}
[data-theme="dark"] .ux-theme-switch-track {
    background: linear-gradient(90deg, #1a2a3e 0%, #1a2a3e 50%, #0c1826 50%, #0c1826 100%);
    border-color: var(--ux-border-strong);
    box-shadow: inset 0 1px 3px rgba(0,0,0,0.4);
}

/* Iconos estáticos en los extremos (decorativos, marcan el extremo "sol" y "luna").
   Compatible con Font Awesome 5 y 6 (ambas familias soportan el mismo unicode). */
.ux-theme-switch-track::before,
.ux-theme-switch-track::after {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    font-family: "Font Awesome 6 Free", "Font Awesome 5 Free", "FontAwesome";
    font-weight: 900;
    font-style: normal;
    font-size: 10px;
    line-height: 1;
    pointer-events: none;
    transition: opacity .25s ease;
    -webkit-font-smoothing: antialiased;
}
.ux-theme-switch-track::before {
    content: "\f185"; /* fa-sun */
    left: 7px;
    color: var(--ux-accent);
    opacity: 1;
}
.ux-theme-switch-track::after {
    content: "\f186"; /* fa-moon */
    right: 7px;
    color: var(--ux-soft-text);
    opacity: 0.55;
}
[data-theme="dark"] .ux-theme-switch-track::before { opacity: 0.55; }
[data-theme="dark"] .ux-theme-switch-track::after  { opacity: 1; }

.ux-theme-switch-thumb {
    position: absolute;
    top: 2px;
    left: 2px;
    width: 22px;
    height: 22px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--ux-accent);
    border-radius: 50%;
    color: #fff;
    font-size: 10px;
    box-shadow: 0 1px 3px rgba(0,0,0,0.25);
    transition: left .32s cubic-bezier(.4,0,.2,1),
                background .32s ease,
                transform .15s ease;
    z-index: 1;
}
[data-theme="dark"] .ux-theme-switch-thumb {
    left: calc(100% - 24px);
    background: var(--ux-primary);
}
.ux-theme-switch:hover .ux-theme-switch-thumb {
    transform: scale(1.06);
    box-shadow: 0 2px 6px rgba(0,0,0,0.3);
}
.ux-theme-switch:active .ux-theme-switch-thumb {
    transform: scale(0.95);
}

/* Iconos dentro del thumb — solo se ve el que corresponde al modo actual */
.ux-theme-switch-thumb .icon-sun,
.ux-theme-switch-thumb .icon-moon {
    position: absolute;
    transition: opacity .2s ease, transform .25s ease;
}
.ux-theme-switch-thumb .icon-sun  { opacity: 1; transform: rotate(0deg); }
.ux-theme-switch-thumb .icon-moon { opacity: 0; transform: rotate(-30deg); }
[data-theme="dark"] .ux-theme-switch-thumb .icon-sun  { opacity: 0; transform: rotate(30deg); }
[data-theme="dark"] .ux-theme-switch-thumb .icon-moon { opacity: 1; transform: rotate(0deg); }

/* Variante compacta para navbar angosta (40×22 en vez de 56×28) */
.ux-theme-switch.ux-theme-switch-sm {
    width: 44px;
    height: 22px;
}
.ux-theme-switch.ux-theme-switch-sm .ux-theme-switch-thumb {
    width: 18px;
    height: 18px;
    font-size: 8px;
}
.ux-theme-switch.ux-theme-switch-sm .ux-theme-switch-track::before,
.ux-theme-switch.ux-theme-switch-sm .ux-theme-switch-track::after {
    font-size: 8px;
}
[data-theme="dark"] .ux-theme-switch.ux-theme-switch-sm .ux-theme-switch-thumb {
    left: calc(100% - 20px);
}

/* ============================================================== */
/* FASE 2B — Acentos naranja en tipografía (selectivos)            */
/* ============================================================== */

/* Brand de la navbar: "SV - 2026 v1.1" y similares se ven en naranja
   para ganar personalidad sin invadir la paleta azul del resto. */
body.ux-enabled .navbar-brand,
body.ux-enabled .navbar-laravel .navbar-brand {
    color: var(--ux-accent) !important;
    font-weight: 600;
    letter-spacing: 0.2px;
}
body.ux-enabled .navbar-brand:hover {
    color: var(--ux-accent-dark) !important;
}

/* h1 principal del contenido — resalta en naranja.
   No toca h2/h3 para no chocar con el esquema del manual v2 (que los
   pinta en primary). */
body.ux-enabled h1:not(.manual-v2):not([class*="v2-"]) {
    color: var(--ux-accent);
    font-weight: 600;
}

/* Headers de dropdown ("Centro de Alertas", etc.) */
body.ux-enabled .dropdown-header {
    color: var(--ux-accent) !important;
    font-weight: 700;
    text-transform: uppercase;
    font-size: 11px;
    letter-spacing: 0.4px;
}

/* Badges con conteos (alertas) — aro naranja suave */
body.ux-enabled .badge-counter {
    background: var(--ux-accent) !important;
    color: #fff !important;
    border: 2px solid var(--ux-bg);
    border-radius: 10px;
    padding: 2px 6px;
    font-weight: 700;
    font-size: 10px;
}

/* Iconos fa dentro de los dropdowns heredan naranja al hacer hover */
body.ux-enabled .dropdown-item:hover > i.fa,
body.ux-enabled .dropdown-item:hover > i.fas,
body.ux-enabled .dropdown-item:hover > i.far {
    color: var(--ux-accent) !important;
    transition: color .18s ease;
}

/* Clase helper: cualquier elemento puede recibir color accent.
   Uso: <span class="ux-text-accent">...</span> */
.ux-text-accent { color: var(--ux-accent) !important; }
.ux-text-primary { color: var(--ux-primary) !important; }
.ux-text-muted   { color: var(--ux-text-muted) !important; }

/* Links en texto largo dentro del contenido principal: subrayado naranja */
body.ux-enabled main a:not(.btn):not(.nav-link):not(.dropdown-item):not(.navbar-brand):hover {
    color: var(--ux-accent);
    text-decoration-color: var(--ux-accent);
}

/* ============================================================== */
/* FASE 2 — Overrides de Bootstrap / SB Admin 2                    */
/* (para que el dark mode pinte también topbar, cards, tablas)     */
/* ============================================================== */

/* Topbar (.bg-white + .topbar) — usa surface para destacar del bg ambiente */
body.ux-enabled nav.topbar,
body.ux-enabled .topbar.bg-white,
body.ux-enabled nav.bg-white {
    background-color: var(--ux-surface) !important;
    border-bottom: 1px solid var(--ux-border);
}

/* Dropdowns: menús y headers */
body.ux-enabled .dropdown-menu {
    background-color: var(--ux-surface);
    border: 1px solid var(--ux-border);
    color: var(--ux-text);
}
body.ux-enabled .dropdown-item {
    color: var(--ux-text);
}
body.ux-enabled .dropdown-item:hover,
body.ux-enabled .dropdown-item:focus {
    background-color: var(--ux-primary-soft);
    color: var(--ux-primary);
}
body.ux-enabled .dropdown-divider {
    border-top-color: var(--ux-border);
}

/* Iconos de navbar (campanita, usuario) — gris neutral que se adapta */
body.ux-enabled .navbar .nav-link,
body.ux-enabled .navbar .nav-link i {
    color: var(--ux-text-muted);
    transition: color .18s ease;
}
body.ux-enabled .navbar .nav-link:hover,
body.ux-enabled .navbar .nav-link:hover i {
    color: var(--ux-primary);
}

/* Texto del nombre de usuario en navbar (clase de SB Admin 2) */
body.ux-enabled .text-gray-600,
body.ux-enabled .text-gray-700 {
    color: var(--ux-text-muted) !important;
}
body.ux-enabled .text-gray-400,
body.ux-enabled .text-gray-500 {
    color: var(--ux-text-subtle) !important;
}
body.ux-enabled .text-gray-300,
body.ux-enabled .text-gray-200 {
    color: var(--ux-border-strong) !important;
}

/* Inputs / selects */
body.ux-enabled .form-control,
body.ux-enabled input.form-control,
body.ux-enabled textarea.form-control,
body.ux-enabled select.form-control {
    background-color: var(--ux-surface);
    border-color: var(--ux-border);
    color: var(--ux-text);
}
body.ux-enabled .form-control:focus {
    background-color: var(--ux-surface);
    border-color: var(--ux-primary);
    color: var(--ux-text);
    box-shadow: 0 0 0 0.2rem var(--ux-primary-ring);
}
body.ux-enabled .form-control.bg-light {
    background-color: var(--ux-surface) !important;
}

/* Tablas Bootstrap */
body.ux-enabled .table {
    color: var(--ux-text);
}
body.ux-enabled .table thead th {
    background-color: var(--ux-surface-alt);
    border-bottom-color: var(--ux-border-strong);
    color: var(--ux-text);
}
body.ux-enabled .table td,
body.ux-enabled .table th {
    border-top-color: var(--ux-border);
}
body.ux-enabled .table-striped tbody tr:nth-of-type(odd) {
    background-color: var(--ux-surface);
}
body.ux-enabled .table-hover tbody tr:hover {
    background-color: var(--ux-primary-soft);
    color: var(--ux-text);
}

/* Cards (home, dashboard) — usan surface para que destaquen sobre el bg ambiente */
body.ux-enabled .card {
    background-color: var(--ux-surface);
    border-color: var(--ux-border);
    color: var(--ux-text);
}
body.ux-enabled .card-header {
    background-color: var(--ux-surface);
    border-bottom-color: var(--ux-border);
}
body.ux-enabled .card-footer {
    background-color: var(--ux-surface);
    border-top-color: var(--ux-border);
}

/* Alertas */
body.ux-enabled .alert-primary {
    background-color: var(--ux-primary-soft);
    border-color: var(--ux-primary);
    color: var(--ux-primary);
}

/* Divisor visual de la topbar (SB Admin 2) */
body.ux-enabled .topbar-divider {
    border-right: 1px solid var(--ux-border);
}

/* Icon-circle de alertas */
body.ux-enabled .icon-circle.bg-primary {
    background-color: var(--ux-primary) !important;
}

/* Shadow de la topbar: más suave en dark */
[data-theme="dark"] body.ux-enabled .shadow,
[data-theme="dark"] body.ux-enabled nav.topbar {
    box-shadow: 0 2px 8px rgba(0,0,0,0.25) !important;
}

/* Scrollbars finos y temáticos (webkit) */
body.ux-enabled ::-webkit-scrollbar { width: 10px; height: 10px; }
body.ux-enabled ::-webkit-scrollbar-track { background: var(--ux-surface); }
body.ux-enabled ::-webkit-scrollbar-thumb {
    background: var(--ux-border-strong);
    border-radius: 5px;
    border: 2px solid var(--ux-surface);
}
body.ux-enabled ::-webkit-scrollbar-thumb:hover {
    background: var(--ux-primary);
}

/* ============================================================== */
/* FASE 3 — Pulido visual: jumbotron, selects, iconos, efectos     */
/* ============================================================== */

/* ---------- Jumbotron temático (home de bienvenida) ---------- */
body.ux-enabled .jumbotron,
body.ux-enabled .ux-jumbotron {
    background: linear-gradient(135deg, var(--ux-surface) 0%, var(--ux-primary-soft) 100%);
    color: var(--ux-text);
    border: 1px solid var(--ux-border);
    border-radius: 16px;
    box-shadow: 0 4px 16px var(--ux-shadow);
    padding: 2rem 2.5rem;
}
[data-theme="dark"] body.ux-enabled .jumbotron,
[data-theme="dark"] body.ux-enabled .ux-jumbotron {
    background: linear-gradient(135deg, var(--ux-surface) 0%, var(--ux-surface-alt) 100%);
    box-shadow: 0 4px 20px rgba(0,0,0,0.3);
}
body.ux-enabled .ux-jumbotron-title,
body.ux-enabled .jumbotron h1 {
    color: var(--ux-primary);
    font-weight: 600;
}
body.ux-enabled .jumbotron .lead,
body.ux-enabled .ux-jumbotron .lead {
    color: var(--ux-text-subtle);
}

/* ---------- Cards con hover lift ---------- */
body.ux-enabled .card {
    border-radius: 12px;
    transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;
}
body.ux-enabled .card.box-shadow,
body.ux-enabled .card.mb-4 {
    box-shadow: 0 2px 8px var(--ux-shadow);
}
body.ux-enabled .card.box-shadow:hover,
body.ux-enabled .card.mb-4:hover {
    transform: translateY(-3px);
    box-shadow: 0 6px 18px var(--ux-shadow);
    border-color: var(--ux-primary);
}
body.ux-enabled .card .card-header {
    border-top-left-radius: 12px;
    border-top-right-radius: 12px;
    font-weight: 600;
}
body.ux-enabled .pricing-card-title i,
body.ux-enabled .pricing-card-title .fa,
body.ux-enabled .pricing-card-title .fas,
body.ux-enabled .pricing-card-title .far {
    transition: color .2s ease, transform .3s ease;
}
body.ux-enabled .card:hover .pricing-card-title i,
body.ux-enabled .card:hover .pricing-card-title .fa,
body.ux-enabled .card:hover .pricing-card-title .fas,
body.ux-enabled .card:hover .pricing-card-title .far {
    color: var(--ux-accent) !important;
    transform: scale(1.08) rotate(-4deg);
}

/* ---------- Botones Bootstrap: radius + hover lift ---------- */
body.ux-enabled .btn {
    border-radius: 8px;
    transition: background-color .18s ease, border-color .18s ease,
                color .18s ease, box-shadow .2s ease, transform .1s ease;
}
body.ux-enabled .btn:hover { transform: translateY(-1px); }
body.ux-enabled .btn:active { transform: translateY(0); }

/* btn-outline-primary: temático y animado */
body.ux-enabled .btn-outline-primary {
    border: 1.5px solid var(--ux-primary) !important;
    color: var(--ux-primary) !important;
    background: transparent !important;
}
body.ux-enabled .btn-outline-primary:hover,
body.ux-enabled .btn-outline-primary:focus {
    background: var(--ux-primary) !important;
    color: #fff !important;
    box-shadow: 0 3px 10px var(--ux-primary-ring);
}

/* btn-esencial (naranja): mantiene color pero con lift */
body.ux-enabled .btn-esencial:hover {
    box-shadow: 0 3px 10px rgba(235,128,14,0.4);
}

/* ---------- Bootstrap-select (el botón .btn.dropdown-toggle.btn-light) ---------- */
body.ux-enabled .bootstrap-select > .btn.dropdown-toggle,
body.ux-enabled .bootstrap-select > .btn.dropdown-toggle.btn-light,
body.ux-enabled .bootstrap-select > .btn.dropdown-toggle.bs-placeholder,
body.ux-enabled button.btn.dropdown-toggle.btn-light {
    background-color: var(--ux-surface) !important;
    border: 1px solid var(--ux-border) !important;
    color: var(--ux-text) !important;
    box-shadow: none !important;
    transition: border-color .15s ease, background-color .15s ease;
}
body.ux-enabled .bootstrap-select > .btn.dropdown-toggle:hover,
body.ux-enabled .bootstrap-select > .btn.dropdown-toggle:focus,
body.ux-enabled .bootstrap-select.show > .btn.dropdown-toggle {
    border-color: var(--ux-primary) !important;
    background-color: var(--ux-surface-alt) !important;
    box-shadow: 0 0 0 0.2rem var(--ux-primary-ring) !important;
}
body.ux-enabled .bootstrap-select.bs-placeholder > .btn.dropdown-toggle,
body.ux-enabled .bs-placeholder {
    color: var(--ux-text-subtle) !important;
}
body.ux-enabled .bootstrap-select .dropdown-menu {
    background-color: var(--ux-surface);
    border: 1px solid var(--ux-border);
    box-shadow: 0 4px 18px var(--ux-shadow);
}
body.ux-enabled .bootstrap-select .dropdown-menu li a,
body.ux-enabled .bootstrap-select .dropdown-menu li a span.text {
    color: var(--ux-text);
}
body.ux-enabled .bootstrap-select .dropdown-menu li a:hover,
body.ux-enabled .bootstrap-select .dropdown-menu li.selected a {
    background-color: var(--ux-primary-soft) !important;
    color: var(--ux-primary) !important;
}
/* Flecha del dropdown - fallback si se ve raro */
body.ux-enabled .bootstrap-select > .btn.dropdown-toggle:after,
body.ux-enabled .bootstrap-select > .btn.dropdown-toggle .caret {
    color: var(--ux-text-muted);
}

/* Selects nativos (sin bootstrap-select) */
body.ux-enabled select.form-control,
body.ux-enabled select:not(.ux-theme-switch):not(.bootstrap-select) {
    background-color: var(--ux-bg);
    border: 1px solid var(--ux-border);
    color: var(--ux-text);
    border-radius: 6px;
    padding: 6px 10px;
    transition: border-color .15s ease, box-shadow .15s ease;
}
body.ux-enabled select.form-control:focus,
body.ux-enabled select:focus {
    border-color: var(--ux-primary);
    box-shadow: 0 0 0 0.2rem var(--ux-primary-ring);
    outline: none;
}

/* ---------- Iconos con acabado "pro" (escalado + peso) ---------- */
/* Los FontAwesome se agrandan ligeramente y toman un color consistente.
   Los iconos grandes de las cards del home lucen más impresionantes. */
body.ux-enabled .pricing-card-title {
    font-size: 3rem;
}
body.ux-enabled .pricing-card-title i {
    font-size: 1em;
    color: var(--ux-border-strong);
    text-shadow: 0 2px 4px var(--ux-shadow);
}

/* Iconos de dropdown (sidebar, menus) con entrada suave */
body.ux-enabled .dropdown-item i.fa,
body.ux-enabled .dropdown-item i.fas,
body.ux-enabled .dropdown-item i.far {
    transition: transform .2s ease, color .2s ease;
}
body.ux-enabled .dropdown-item:hover i.fa,
body.ux-enabled .dropdown-item:hover i.fas,
body.ux-enabled .dropdown-item:hover i.far {
    transform: translateX(2px);
}

/* ---------- Alertas Bootstrap (éxito, error, info) ---------- */
body.ux-enabled .alert {
    border-radius: 10px;
    border: 1px solid transparent;
    padding: 12px 18px;
    animation: ux-fade-slide-in .35s ease both;
}
body.ux-enabled .alert-success {
    background-color: rgba(40, 180, 100, 0.12);
    border-color: rgba(40, 180, 100, 0.35);
    color: #1a7f4a;
}
[data-theme="dark"] body.ux-enabled .alert-success {
    color: #7ee0a5;
    background-color: rgba(40, 180, 100, 0.18);
}
body.ux-enabled .alert-danger {
    background-color: rgba(220, 80, 80, 0.12);
    border-color: rgba(220, 80, 80, 0.35);
    color: #b63434;
}
[data-theme="dark"] body.ux-enabled .alert-danger {
    color: #f5a5a5;
    background-color: rgba(220, 80, 80, 0.2);
}

/* ---------- Animaciones globales ---------- */
@keyframes ux-fade-slide-in {
    from { opacity: 0; transform: translateY(-6px); }
    to   { opacity: 1; transform: translateY(0); }
}
@keyframes ux-fade-in {
    from { opacity: 0; }
    to   { opacity: 1; }
}

/* Cards del home con entrada escalonada */
body.ux-enabled .card-deck .card {
    animation: ux-fade-slide-in .4s ease both;
}
body.ux-enabled .card-deck .card:nth-child(1) { animation-delay: .05s; }
body.ux-enabled .card-deck .card:nth-child(2) { animation-delay: .15s; }
body.ux-enabled .card-deck .card:nth-child(3) { animation-delay: .25s; }
body.ux-enabled .card-deck .card:nth-child(4) { animation-delay: .35s; }

/* Jumbotron entrada */
body.ux-enabled .jumbotron,
body.ux-enabled .ux-jumbotron {
    animation: ux-fade-slide-in .4s ease both;
}

/* Focus general más elegante */
body.ux-enabled *:focus-visible:not(.ux-theme-switch):not(.ux-theme-switch *) {
    outline: 2px solid var(--ux-primary);
    outline-offset: 2px;
    border-radius: 3px;
}

/* Sweet Alert en oscuro (si la app lo usa) */
[data-theme="dark"] body.ux-enabled .swal2-popup {
    background-color: var(--ux-surface);
    color: var(--ux-text);
}

/* Badge del counter en navbar (naranja) — ya existía, refuerzo animación */
body.ux-enabled .badge-counter {
    animation: ux-badge-pulse 2s ease-in-out infinite;
}
@keyframes ux-badge-pulse {
    0%, 100% { transform: scale(1); }
    50%      { transform: scale(1.1); }
}

/* ============================================================== */
/* DASHBOARD — Home moderno con stat cards + quick actions          */
/* ============================================================== */

.ux-dashboard {
    padding: 0 1rem 2rem;
    max-width: 1400px;
    margin: 0 auto;
}

/* Banner de bienvenida (extiende el jumbotron) */
.ux-dashboard-banner .ux-dashboard-banner-inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
}
.ux-dashboard-banner .ux-dashboard-banner-art {
    font-size: 64px;
    color: var(--ux-primary);
    opacity: 0.35;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 90px;
    height: 90px;
    border-radius: 50%;
    background: var(--ux-primary-soft);
    flex-shrink: 0;
    transition: transform .5s cubic-bezier(.4,0,.2,1), opacity .3s;
}
.ux-dashboard-banner:hover .ux-dashboard-banner-art {
    transform: rotate(-8deg) scale(1.05);
    opacity: 0.5;
}
.ux-dashboard-subtitle {
    color: var(--ux-text-subtle);
    font-size: 13px;
    margin: 8px 0 0;
    text-transform: capitalize;
}
.ux-dashboard-subtitle i {
    margin-right: 6px;
    color: var(--ux-accent);
}
@media (max-width: 640px) {
    .ux-dashboard-banner .ux-dashboard-banner-art {
        display: none;
    }
}

/* Grid de stat cards */
.ux-dashboard-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 18px;
    margin-top: 1.5rem;
}

/* Stat card: accesos rápidos con icono grande y color por categoría */
.ux-stat-card {
    position: relative;
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 20px 22px;
    background: var(--ux-surface);
    border: 1px solid var(--ux-border);
    border-radius: 14px;
    text-decoration: none !important;
    color: var(--ux-text);
    transition: transform .22s ease, box-shadow .22s ease, border-color .22s ease, background .22s;
    overflow: hidden;
    animation: ux-fade-slide-in .4s ease both;
}
/* Borde dinámico en hover con el color de la card */
.ux-stat-card::before {
    content: '';
    position: absolute;
    top: 0; left: 0; bottom: 0;
    width: 4px;
    background: var(--stat-color, var(--ux-primary));
    opacity: 0;
    transition: opacity .22s ease;
}
.ux-stat-card:hover {
    transform: translateY(-3px);
    box-shadow: 0 10px 25px var(--ux-shadow);
    border-color: var(--stat-color, var(--ux-primary));
    color: var(--ux-text) !important;
}
.ux-stat-card:hover::before { opacity: 1; }

.ux-stat-card:nth-child(1) { animation-delay: .05s; }
.ux-stat-card:nth-child(2) { animation-delay: .1s; }
.ux-stat-card:nth-child(3) { animation-delay: .15s; }
.ux-stat-card:nth-child(4) { animation-delay: .2s; }
.ux-stat-card:nth-child(5) { animation-delay: .25s; }
.ux-stat-card:nth-child(6) { animation-delay: .3s; }

/* Ícono circular con el color de la card */
.ux-stat-icon {
    flex-shrink: 0;
    width: 56px;
    height: 56px;
    border-radius: 14px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: color-mix(in srgb, var(--stat-color, var(--ux-primary)) 14%, transparent);
    color: var(--stat-color, var(--ux-primary));
    font-size: 22px;
    transition: transform .3s cubic-bezier(.4,0,.2,1), background .22s;
}
.ux-stat-card:hover .ux-stat-icon {
    transform: scale(1.08) rotate(-5deg);
    background: color-mix(in srgb, var(--stat-color, var(--ux-primary)) 22%, transparent);
}

/* Meta: label arriba chico, título abajo más grande */
.ux-stat-meta {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
}
.ux-stat-label {
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.8px;
    color: var(--stat-color, var(--ux-primary));
    margin-bottom: 3px;
}
.ux-stat-title {
    font-size: 15px;
    font-weight: 600;
    color: var(--ux-text);
    line-height: 1.3;
}

/* Flecha que aparece al hover */
.ux-stat-arrow {
    color: var(--ux-text-subtle);
    font-size: 14px;
    opacity: 0;
    transform: translateX(-6px);
    transition: opacity .22s ease, transform .22s ease, color .22s;
}
.ux-stat-card:hover .ux-stat-arrow {
    opacity: 1;
    transform: translateX(0);
    color: var(--stat-color, var(--ux-primary));
}

/* Fallback si color-mix no está soportado (Safari viejo, etc.) */
@supports not (background: color-mix(in srgb, red 50%, blue)) {
    .ux-stat-icon {
        background: var(--ux-primary-soft);
    }
}

/* Quick actions: fila de botones secundarios */
.ux-quick-actions {
    margin-top: 2rem;
}
.ux-section-title {
    color: var(--ux-text-muted);
    font-size: 13px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin: 0 0 12px;
}
.ux-section-title i {
    color: var(--ux-accent);
    margin-right: 6px;
}

.ux-quick-actions-row {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
}
.ux-quick-btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 10px 16px;
    background: var(--ux-surface);
    border: 1px solid var(--ux-border);
    border-radius: 10px;
    color: var(--ux-text);
    font-size: 13px;
    font-weight: 500;
    text-decoration: none !important;
    transition: background .18s ease, border-color .18s ease, color .18s ease, transform .1s;
}
.ux-quick-btn i { color: var(--ux-text-muted); transition: color .18s; font-size: 13px; }
.ux-quick-btn:hover {
    background: var(--ux-primary-soft);
    border-color: var(--ux-primary);
    color: var(--ux-primary);
    transform: translateY(-1px);
}
.ux-quick-btn:hover i { color: var(--ux-primary); }

.ux-quick-btn.ux-quick-btn-muted:hover {
    background: var(--ux-accent-soft);
    border-color: var(--ux-accent);
    color: var(--ux-soft-text);
}
.ux-quick-btn.ux-quick-btn-muted:hover i { color: var(--ux-accent); }

/* ============================================================== */
/* Fixes puntuales de componentes Bootstrap que seguían claros     */
/* ============================================================== */

/* Breadcrumb: aplica desde el primer paint (sin depender de ux-enabled) */
html[data-theme] .breadcrumb,
body.ux-enabled .breadcrumb {
    background-color: var(--ux-surface-alt);
    border: 1px solid var(--ux-border);
    border-radius: 10px;
    color: var(--ux-text-muted);
}
html[data-theme] .breadcrumb a,
body.ux-enabled .breadcrumb a {
    color: var(--ux-primary);
    text-decoration: none;
    font-weight: 500;
}
html[data-theme] .breadcrumb a:hover,
body.ux-enabled .breadcrumb a:hover {
    color: var(--ux-primary-dark);
    text-decoration: underline;
}
html[data-theme] .breadcrumb-item.active,
html[data-theme] .breadcrumb-item + .breadcrumb-item::before,
body.ux-enabled .breadcrumb-item.active,
body.ux-enabled .breadcrumb-item + .breadcrumb-item::before {
    color: var(--ux-text-subtle);
}

/* Alerts de todos los tipos */
body.ux-enabled .alert-info {
    background-color: var(--ux-primary-soft);
    border-color: var(--ux-primary);
    color: var(--ux-primary);
}
[data-theme="dark"] body.ux-enabled .alert-info {
    color: #9ecbe8;
}
body.ux-enabled .alert-warning {
    background-color: var(--ux-accent-soft);
    border-color: var(--ux-accent);
    color: var(--ux-soft-text);
}
body.ux-enabled .alert-light,
body.ux-enabled .alert-secondary {
    background-color: var(--ux-surface-alt);
    border-color: var(--ux-border);
    color: var(--ux-text);
}

/* Utilidades de background Bootstrap */
body.ux-enabled .bg-light,
body.ux-enabled .form-control.bg-light {
    background-color: var(--ux-surface-alt) !important;
    color: var(--ux-text) !important;
}
body.ux-enabled .bg-secondary {
    background-color: var(--ux-surface-alt) !important;
    color: var(--ux-text) !important;
}

/* text-muted de Bootstrap */
body.ux-enabled .text-muted {
    color: var(--ux-text-muted) !important;
}
body.ux-enabled .text-info {
    color: var(--ux-primary) !important;
}

/* Títulos h2/h4/h5 sin regla específica — que usen el text */
body.ux-enabled h2:not([class*="v2-"]):not(.ux-jumbotron-title),
body.ux-enabled h4:not([class*="v2-"]),
body.ux-enabled h5:not([class*="v2-"]):not(.ux-section-title) {
    color: var(--ux-text);
}

/* Bordes tipo .border-light, .border-primary (de Bootstrap) */
body.ux-enabled .border,
body.ux-enabled .border-light {
    border-color: var(--ux-border) !important;
}
body.ux-enabled .border-primary {
    border-color: var(--ux-primary) !important;
}

/* Custom del proyecto: .bg-soft-orange (accent soft) */
body.ux-enabled .bg-soft-orange {
    background-color: var(--ux-accent-soft) !important;
}

/* ============================================================== */
/* Overlay neutro durante cambio de tema — evita flash blanco      */
/* ============================================================== */

/* El theme.js ya agrega `ux-theming` durante 300ms al hacer toggle.
   Aprovechamos esa ventana para mostrar un overlay neutro que
   amortigua el flash. */
html.ux-theming::after {
    content: '';
    position: fixed;
    inset: 0;
    background: #8494A8;  /* gris azulado neutro, a medio camino */
    z-index: 99998;
    pointer-events: none;
    animation: ux-theme-cloak .28s ease;
    mix-blend-mode: normal;
    opacity: 0;
}
@keyframes ux-theme-cloak {
    0%   { opacity: 0; }
    40%  { opacity: 0.45; }
    60%  { opacity: 0.45; }
    100% { opacity: 0; }
}

/* Reducir intensidad para usuarios que prefieren menos movimiento */
@media (prefers-reduced-motion: reduce) {
    html.ux-theming::after {
        animation-duration: .15s;
    }
    html.ux-theming * {
        transition-duration: .05s !important;
    }
}

/* ============================================================== */
/* Pre-paint: aplica un color de fondo dinámico al html/body antes */
/* de que cargue el CSS, evitando el flash blanco inicial.          */
/* (complementa el script pre-paint que ya corre en los layouts)    */
/* ============================================================== */
html { background-color: var(--ux-bg); }
[data-theme="dark"] { background-color: #0f1b2a; }

/* ============================================================== */
/* FASE 4 — Inputs especializados: date, file, tablas de datos     */
/* ============================================================== */

/* ---------- Inputs de fecha / hora / datetime / month / week ---------- */
body.ux-enabled input[type="date"],
body.ux-enabled input[type="time"],
body.ux-enabled input[type="datetime-local"],
body.ux-enabled input[type="month"],
body.ux-enabled input[type="week"] {
    background-color: var(--ux-surface);
    border: 1px solid var(--ux-border);
    color: var(--ux-text);
    border-radius: 8px;
    padding: 8px 12px;
    font-family: inherit;
    font-size: 13px;
    transition: border-color .18s ease, box-shadow .18s ease, background-color .18s ease;
    color-scheme: light;  /* ayuda a los pickers nativos en claro */
}
[data-theme="dark"] body.ux-enabled input[type="date"],
[data-theme="dark"] body.ux-enabled input[type="time"],
[data-theme="dark"] body.ux-enabled input[type="datetime-local"],
[data-theme="dark"] body.ux-enabled input[type="month"],
[data-theme="dark"] body.ux-enabled input[type="week"] {
    color-scheme: dark;  /* hace que el popup del calendario también sea dark */
}
body.ux-enabled input[type="date"]:hover,
body.ux-enabled input[type="time"]:hover,
body.ux-enabled input[type="datetime-local"]:hover,
body.ux-enabled input[type="month"]:hover,
body.ux-enabled input[type="week"]:hover {
    border-color: var(--ux-border-strong);
}
body.ux-enabled input[type="date"]:focus,
body.ux-enabled input[type="time"]:focus,
body.ux-enabled input[type="datetime-local"]:focus,
body.ux-enabled input[type="month"]:focus,
body.ux-enabled input[type="week"]:focus {
    border-color: var(--ux-primary);
    box-shadow: 0 0 0 3px var(--ux-primary-ring);
    outline: none;
}

/* Icono del calendar picker nativo: invertir en dark para que se vea */
body.ux-enabled input[type="date"]::-webkit-calendar-picker-indicator,
body.ux-enabled input[type="time"]::-webkit-calendar-picker-indicator,
body.ux-enabled input[type="datetime-local"]::-webkit-calendar-picker-indicator {
    cursor: pointer;
    opacity: 0.7;
    filter: none;
    transition: opacity .15s, transform .15s;
}
body.ux-enabled input[type="date"]::-webkit-calendar-picker-indicator:hover,
body.ux-enabled input[type="time"]::-webkit-calendar-picker-indicator:hover,
body.ux-enabled input[type="datetime-local"]::-webkit-calendar-picker-indicator:hover {
    opacity: 1;
    transform: scale(1.1);
}
[data-theme="dark"] body.ux-enabled input[type="date"]::-webkit-calendar-picker-indicator,
[data-theme="dark"] body.ux-enabled input[type="time"]::-webkit-calendar-picker-indicator,
[data-theme="dark"] body.ux-enabled input[type="datetime-local"]::-webkit-calendar-picker-indicator {
    filter: invert(1) hue-rotate(180deg) brightness(1.2);
}

/* ---------- Inputs de archivo: botón personalizado ---------- */
body.ux-enabled input[type="file"] {
    background: var(--ux-surface);
    border: 1px dashed var(--ux-border);
    border-radius: 10px;
    padding: 6px 10px;
    color: var(--ux-text);
    font-family: inherit;
    font-size: 12.5px;
    width: 100%;
    max-width: 100%;
    cursor: pointer;
    transition: border-color .2s ease, background-color .2s ease;
    /* El nombre del archivo seleccionado (o "Ningún archivo seleccionado")
       se trunca con ellipsis en vez de cortarse a mitad de palabra. */
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    display: inline-flex;
    align-items: center;
    min-height: 38px;
    box-sizing: border-box;
}
body.ux-enabled input[type="file"]:hover {
    border-color: var(--ux-primary);
    background: var(--ux-primary-soft);
}
body.ux-enabled input[type="file"]:focus {
    outline: none;
    border-color: var(--ux-primary);
    border-style: solid;
    box-shadow: 0 0 0 3px var(--ux-primary-ring);
}

/* Botón del picker (el "Browse..." nativo) — compacto para que quepa bien */
body.ux-enabled input[type="file"]::-webkit-file-upload-button,
body.ux-enabled input[type="file"]::file-selector-button {
    background: var(--ux-primary);
    color: #fff;
    border: none;
    border-radius: 6px;
    padding: 6px 12px;
    margin-right: 10px;
    font-family: inherit;
    font-size: 11.5px;
    font-weight: 600;
    letter-spacing: 0.3px;
    cursor: pointer;
    transition: background-color .18s ease, transform .1s ease;
    flex-shrink: 0;   /* el botón no se achica si el nombre de archivo es largo */
}
body.ux-enabled input[type="file"]::-webkit-file-upload-button:hover,
body.ux-enabled input[type="file"]::file-selector-button:hover {
    background: var(--ux-primary-dark);
    transform: translateY(-1px);
}
body.ux-enabled input[type="file"]::-webkit-file-upload-button:active,
body.ux-enabled input[type="file"]::file-selector-button:active {
    transform: translateY(0);
}

/* En contenedores muy estrechos (ej. col-md-8 en tablet), permite wrap interno */
@media (max-width: 768px) {
    body.ux-enabled input[type="file"] {
        font-size: 11.5px;
    }
    body.ux-enabled input[type="file"]::-webkit-file-upload-button,
    body.ux-enabled input[type="file"]::file-selector-button {
        padding: 5px 10px;
        font-size: 11px;
        margin-right: 8px;
    }
}

/* ---------- Data tables mejoradas ---------- */
body.ux-enabled .table {
    color: var(--ux-text);
    background-color: transparent;
    border-collapse: separate;
    border-spacing: 0;
    border-radius: 10px;
    overflow: hidden;
    box-shadow: 0 1px 4px var(--ux-shadow);
}
body.ux-enabled .table thead {
    background: var(--ux-surface-alt);
}
body.ux-enabled .table thead th {
    background-color: var(--ux-surface-alt);
    color: var(--ux-text);
    border: none;
    border-bottom: 2px solid var(--ux-border-strong);
    padding: 12px 14px;
    font-size: 12px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    white-space: nowrap;
}
body.ux-enabled .table tbody td,
body.ux-enabled .table tbody th {
    padding: 11px 14px;
    vertical-align: middle;
    border-top: 1px solid var(--ux-border);
    background-color: var(--ux-surface);
}
body.ux-enabled .table tbody tr:first-child td,
body.ux-enabled .table tbody tr:first-child th {
    border-top: none;
}

/* Striped */
body.ux-enabled .table-striped tbody tr:nth-of-type(odd) td {
    background-color: var(--ux-bg);
}
body.ux-enabled .table-striped tbody tr:nth-of-type(even) td {
    background-color: var(--ux-surface);
}

/* Hover */
body.ux-enabled .table-hover tbody tr {
    transition: background-color .15s ease;
}
body.ux-enabled .table-hover tbody tr:hover td,
body.ux-enabled .table-hover tbody tr:hover th {
    background-color: var(--ux-primary-soft) !important;
    color: var(--ux-text);
}

/* Bordered: bordes sutiles en vez del color negro default */
body.ux-enabled .table-bordered,
body.ux-enabled .table-bordered th,
body.ux-enabled .table-bordered td {
    border-color: var(--ux-border);
}

/* Wrapper: agrega scroll horizontal en móvil */
body.ux-enabled .table-responsive {
    border-radius: 10px;
    -webkit-overflow-scrolling: touch;
}

/* Paginación de Laravel / Bootstrap */
body.ux-enabled .pagination {
    gap: 4px;
}
body.ux-enabled .pagination .page-item .page-link,
body.ux-enabled .pagination li a,
body.ux-enabled .pagination li span {
    background-color: var(--ux-surface);
    border: 1px solid var(--ux-border);
    color: var(--ux-primary);
    border-radius: 6px !important;
    margin: 0 2px;
    padding: 6px 12px;
    min-width: 34px;
    text-align: center;
    transition: background-color .15s ease, color .15s ease, border-color .15s ease, transform .1s;
    font-size: 13px;
    font-weight: 500;
}
body.ux-enabled .pagination .page-item .page-link:hover,
body.ux-enabled .pagination li a:hover {
    background-color: var(--ux-primary-soft);
    border-color: var(--ux-primary);
    color: var(--ux-primary);
    transform: translateY(-1px);
}
body.ux-enabled .pagination .page-item.active .page-link,
body.ux-enabled .pagination li.active span,
body.ux-enabled .pagination li.active a {
    background-color: var(--ux-primary);
    border-color: var(--ux-primary);
    color: #fff !important;
    font-weight: 700;
}
body.ux-enabled .pagination .page-item.disabled .page-link,
body.ux-enabled .pagination li.disabled span,
body.ux-enabled .pagination li.disabled a {
    background-color: var(--ux-surface-alt);
    color: var(--ux-text-subtle);
    border-color: var(--ux-border);
    cursor: not-allowed;
}

/* Filas destacadas dentro de tablas (.bg-soft-orange en ticket.leer, etc.) */
body.ux-enabled .table .bg-soft-orange td,
body.ux-enabled .table tr.bg-soft-orange td {
    background-color: var(--ux-accent-soft) !important;
    border-top-color: var(--ux-accent);
}
[data-theme="dark"] body.ux-enabled .table .bg-soft-orange td,
[data-theme="dark"] body.ux-enabled .table tr.bg-soft-orange td {
    background-color: rgba(235, 128, 14, 0.14) !important;
    color: var(--ux-soft-text);
}

/* Iconos dentro de tablas (acciones de edit/delete) */
body.ux-enabled .table tbody a.btn,
body.ux-enabled .table tbody button.btn {
    padding: 4px 10px;
    font-size: 12px;
}
body.ux-enabled .table tbody a:not(.btn),
body.ux-enabled .table tbody button:not(.btn) {
    color: var(--ux-primary);
    transition: color .15s ease;
}
body.ux-enabled .table tbody a:not(.btn):hover {
    color: var(--ux-accent);
}

/* Forms en general con un respiro consistente */
body.ux-enabled label {
    color: var(--ux-text);
    font-weight: 500;
    font-size: 13px;
    margin-bottom: 6px;
}
body.ux-enabled .form-group {
    margin-bottom: 16px;
}
body.ux-enabled .form-control::placeholder {
    color: var(--ux-text-subtle);
    opacity: 0.8;
}

/* ============================================================== */
/* Form Card profesional (.ux-form-card) — usado en /planes/create */
/* ============================================================== */

.ux-form-wrapper {
    max-width: 780px;
    margin: 0 auto;
    padding: 1rem 1.25rem 3rem;
}

.ux-form-card {
    background: var(--ux-surface);
    border: 1px solid var(--ux-border);
    border-radius: 16px;
    box-shadow: 0 4px 24px var(--ux-shadow);
    overflow: hidden;
    animation: ux-fade-slide-in .4s ease both;
}

/* Header con icono grande, eyebrow, título y subtítulo */
.ux-form-header {
    display: flex;
    align-items: center;
    gap: 20px;
    padding: 26px 28px;
    background: linear-gradient(135deg, var(--ux-primary-soft) 0%, var(--ux-surface-alt) 100%);
    border-bottom: 1px solid var(--ux-border);
}
.ux-form-header-icon {
    flex-shrink: 0;
    width: 60px;
    height: 60px;
    border-radius: 16px;
    background: var(--ux-primary);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 26px;
    box-shadow: 0 4px 12px rgba(16,107,160,0.3);
}
.ux-form-eyebrow {
    color: var(--ux-accent);
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 4px;
}
.ux-form-title {
    color: var(--ux-primary);
    font-size: 22px;
    font-weight: 700;
    margin: 0 0 4px;
}
.ux-form-subtitle {
    color: var(--ux-text-muted);
    font-size: 13px;
    margin: 0;
    line-height: 1.5;
}

/* Body del form */
.ux-form {
    padding: 26px 28px 28px;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.ux-form-field {
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.ux-form-field > label {
    color: var(--ux-text);
    font-weight: 600;
    font-size: 13px;
    margin: 0;
    display: flex;
    align-items: center;
    gap: 6px;
}
.ux-form-help {
    color: var(--ux-text-subtle);
    font-weight: 400;
    font-size: 11px;
}
.ux-form-help-block {
    /* display: block para que el texto fluya inline naturalmente.
       Antes era flex y cortaba <code> y palabras en columnas. */
    display: block;
    color: var(--ux-text-subtle);
    font-size: 11.5px;
    margin-top: 2px;
    line-height: 1.6;
}
.ux-form-help-block > i:first-child {
    color: var(--ux-accent);
    font-size: 11px;
    margin-right: 5px;
    vertical-align: baseline;
}

/* Fila de campos (neto / iva / total) */
.ux-form-row {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 14px;
}
@media (max-width: 640px) {
    .ux-form-row {
        grid-template-columns: 1fr;
    }
}

/* Inputs dentro del form card */
.ux-form-card .form-control {
    background-color: var(--ux-bg);
    border: 1px solid var(--ux-border);
    border-radius: 8px;
    padding: 10px 12px;
    font-size: 14px;
    color: var(--ux-text);
    transition: border-color .15s ease, box-shadow .15s ease, background .15s;
}
.ux-form-card .form-control:hover {
    border-color: var(--ux-border-strong);
}
.ux-form-card .form-control:focus {
    border-color: var(--ux-primary);
    box-shadow: 0 0 0 3px var(--ux-primary-ring);
    outline: none;
}
.ux-form-card textarea.form-control {
    resize: vertical;
    min-height: 80px;
    font-family: inherit;
}

/* Input con prefijo (ej. signo $) */
.ux-input-prefix {
    position: relative;
    display: flex;
    align-items: stretch;
}
.ux-input-prefix-icon {
    position: absolute;
    left: 12px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--ux-text-subtle);
    font-weight: 600;
    font-size: 14px;
    pointer-events: none;
    z-index: 1;
}
.ux-input-prefix .form-control {
    padding-left: 28px;
    width: 100%;
}

/* Variante "total" en naranja para destacar el resultado */
.ux-input-prefix-total .ux-input-prefix-icon {
    color: var(--ux-accent);
}
.ux-input-total {
    background: var(--ux-accent-soft) !important;
    border-color: var(--ux-accent) !important;
    color: var(--ux-soft-text) !important;
    font-weight: 700 !important;
    font-size: 15px !important;
}
[data-theme="dark"] .ux-input-total {
    color: var(--ux-accent) !important;
}

.ux-input-readonly {
    background-color: var(--ux-surface-alt) !important;
    color: var(--ux-text-muted) !important;
    cursor: default;
}

/* ============================================================== */
/* Select destacado en naranja (.ux-select-accent)                 */
/* ============================================================== */

.ux-select-accent {
    position: relative;
    display: flex;
    align-items: stretch;
}
.ux-select-accent-icon {
    position: absolute;
    left: 16px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--ux-accent);
    font-size: 14px;
    pointer-events: none;
    z-index: 1;
    transition: transform .25s ease;
    line-height: 1;
}
.ux-select-accent:hover .ux-select-accent-icon {
    transform: translateY(-50%) rotate(180deg);
}
.ux-select-accent-chev {
    position: absolute;
    right: 16px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--ux-accent);
    font-size: 11px;
    pointer-events: none;
    transition: transform .2s ease;
    line-height: 1;
}
.ux-select-accent select,
.ux-select-accent > select.form-control {
    appearance: none;
    -webkit-appearance: none;
    -moz-appearance: none;
    background-color: var(--ux-accent-soft) !important;
    border: 1.5px solid var(--ux-accent) !important;
    border-radius: 8px !important;
    color: var(--ux-soft-text) !important;
    font-weight: 600 !important;
    font-size: 14px !important;
    line-height: 1.4 !important;
    padding: 12px 42px 12px 44px !important;
    width: 100% !important;
    height: auto !important;
    min-height: 46px;
    cursor: pointer;
    text-overflow: ellipsis;
    overflow: hidden;
    white-space: nowrap;
    transition: border-color .15s, background-color .15s, box-shadow .15s;
}
[data-theme="dark"] .ux-select-accent select,
[data-theme="dark"] .ux-select-accent > select.form-control {
    color: var(--ux-soft-text) !important;
    background-color: rgba(235, 128, 14, 0.15) !important;
}
.ux-select-accent select:hover {
    background-color: var(--ux-accent-soft) !important;
    border-color: var(--ux-accent-dark) !important;
}
.ux-select-accent select:focus {
    outline: none;
    border-color: var(--ux-accent-dark) !important;
    box-shadow: 0 0 0 3px rgba(235,128,14,0.25) !important;
}
.ux-select-accent select option {
    background: var(--ux-bg);
    color: var(--ux-text);
    font-weight: 500;
}
.ux-select-accent select option:disabled {
    color: var(--ux-text-subtle);
    font-style: italic;
}

/* ============================================================== */
/* Acciones del formulario (Cancelar / Grabar)                     */
/* ============================================================== */

.ux-form-actions {
    display: flex;
    gap: 12px;
    align-items: center;
    justify-content: flex-end;
    padding-top: 8px;
    border-top: 1px solid var(--ux-border);
    margin-top: 4px;
    padding-top: 18px;
}

.ux-btn-ghost {
    background: transparent;
    border: 1px solid var(--ux-border);
    color: var(--ux-text-muted);
    padding: 9px 18px;
    border-radius: 8px;
    font-weight: 500;
    transition: background .15s, color .15s, border-color .15s;
    text-decoration: none !important;
    display: inline-flex;
    align-items: center;
    gap: 7px;
}
.ux-btn-ghost:hover {
    background: var(--ux-surface-alt);
    color: var(--ux-text);
    border-color: var(--ux-border-strong);
}
.ux-btn-ghost i { font-size: 11px; }

.ux-btn-primary {
    background: var(--ux-primary) !important;
    border: 1px solid var(--ux-primary) !important;
    color: #fff !important;
    padding: 9px 22px !important;
    border-radius: 8px !important;
    font-weight: 600;
    letter-spacing: 0.3px;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    box-shadow: 0 2px 6px rgba(16,107,160,0.25);
    transition: background .15s, box-shadow .2s, transform .1s !important;
}
.ux-btn-primary:hover {
    background: var(--ux-primary-dark) !important;
    box-shadow: 0 4px 14px rgba(16,107,160,0.4);
}
.ux-btn-primary i { font-size: 12px; }

/* Responsive: acciones en columna en mobile */
@media (max-width: 480px) {
    .ux-form-actions {
        flex-direction: column-reverse;
        align-items: stretch;
    }
    .ux-btn-ghost, .ux-btn-primary {
        justify-content: center;
    }
}

/* ============================================================== */
/* RESTAURADAS — Botones, headers, readonly, empty, info-tip       */
/* ============================================================== */

.ux-btn-secondary {
    background: var(--ux-primary-soft) !important;
    border: 1px solid color-mix(in srgb, var(--ux-primary) 40%, transparent) !important;
    color: var(--ux-primary) !important;
    padding: 9px 18px !important;
    border-radius: 8px !important;
    font-weight: 600;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    text-decoration: none !important;
    transition: background .15s, border-color .15s, transform .1s, box-shadow .2s;
}
.ux-btn-secondary:hover {
    background: color-mix(in srgb, var(--ux-primary) 18%, transparent) !important;
    border-color: var(--ux-primary) !important;
    color: var(--ux-primary) !important;
    transform: translateY(-1px);
    box-shadow: 0 4px 12px var(--ux-primary-ring);
}
.ux-btn-secondary i { font-size: 12px; }

.ux-btn-danger-soft {
    color: #b63434 !important;
    border: 1px solid color-mix(in srgb, #b63434 30%, transparent);
    background: color-mix(in srgb, #b63434 6%, transparent);
    padding: 8px 16px;
    border-radius: 8px;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    font-weight: 600;
    text-decoration: none !important;
    transition: background .15s, border-color .15s, color .15s;
}
.ux-btn-danger-soft:hover {
    background: color-mix(in srgb, #b63434 14%, transparent) !important;
    border-color: #b63434 !important;
    color: #b63434 !important;
}
[data-theme="dark"] .ux-btn-danger-soft {
    color: #f5a5a5 !important;
    border-color: color-mix(in srgb, #f5a5a5 30%, transparent);
    background: color-mix(in srgb, #b63434 14%, transparent);
}
[data-theme="dark"] .ux-btn-danger-soft:hover { color: #f5a5a5 !important; }

.ux-form-header-payments {
    background: linear-gradient(135deg, color-mix(in srgb, #28b464 14%, var(--ux-surface)) 0%, var(--ux-surface-alt) 100%) !important;
}
.ux-form-header-payments .ux-form-header-icon { background: #28b464 !important; box-shadow: 0 4px 12px rgba(40,180,100,0.35) !important; }
.ux-form-header-support {
    background: linear-gradient(135deg, color-mix(in srgb, var(--ux-accent) 14%, var(--ux-surface)) 0%, var(--ux-surface-alt) 100%) !important;
}
.ux-form-header-support .ux-form-header-icon { background: var(--ux-accent) !important; box-shadow: 0 4px 12px rgba(235,128,14,0.35) !important; }
.ux-form-header-users .ux-form-header-icon, .ux-form-header-admin .ux-form-header-icon { background: var(--ux-primary) !important; }

.ux-form-wrapper-wide { max-width: 960px; }

.ux-readonly-box {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 14px;
    background: var(--ux-surface-alt);
    border: 1px solid var(--ux-border);
    border-left: 3px solid var(--ux-primary);
    border-radius: 8px;
    color: var(--ux-text);
    font-size: 14px;
}
.ux-readonly-box i { color: var(--ux-primary); font-size: 14px; }
.ux-readonly-box strong { color: var(--ux-text); font-weight: 600; }

.ux-empty-state {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    padding: 48px 24px;
    background: var(--ux-surface);
    border: 1px dashed var(--ux-border);
    border-radius: 14px;
    gap: 6px;
    margin-top: 16px;
}
.ux-empty-icon { font-size: 56px; color: var(--ux-text-subtle); margin-bottom: 8px; opacity: 0.5; }
.ux-empty-state h3 { color: var(--ux-text); font-size: 18px; font-weight: 700; margin: 0; }
.ux-empty-state p { color: var(--ux-text-muted); font-size: 13.5px; max-width: 480px; margin: 4px 0 16px; }

body.ux-enabled .table thead th i { color: var(--ux-accent); margin-right: 6px; font-size: 11px; opacity: 0.7; }

.ux-icon-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    border-radius: 8px;
    background: var(--ux-surface-alt);
    color: var(--ux-primary);
    text-decoration: none !important;
    transition: background .15s, color .15s, transform .1s;
}
.ux-icon-btn:hover { background: var(--ux-primary-soft); color: var(--ux-primary); transform: translateY(-1px); }
.ux-pagination-wrapper { display: flex; justify-content: center; margin-top: 16px; }

.ux-info-tip {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 14px 18px;
    background: var(--ux-primary-soft);
    border: 1px solid var(--ux-primary);
    border-left-width: 4px;
    border-radius: 10px;
    color: var(--ux-text);
    margin-top: 16px;
}
.ux-info-tip-icon {
    flex-shrink: 0; width: 36px; height: 36px; border-radius: 50%;
    background: var(--ux-primary); color: #fff;
    display: flex; align-items: center; justify-content: center;
    font-size: 14px;
}
.ux-info-tip-content { font-size: 13px; line-height: 1.55; color: var(--ux-text-muted); }
.ux-info-tip-content strong { color: var(--ux-primary); font-weight: 700; margin-right: 4px; }
.ux-info-tip-warning { background: color-mix(in srgb, var(--ux-accent) 12%, var(--ux-surface)); border-color: var(--ux-accent); }
.ux-info-tip-warning .ux-info-tip-icon { background: var(--ux-accent); }
.ux-info-tip-warning .ux-info-tip-content strong { color: var(--ux-accent); }
.ux-info-tip-link {
    display: inline-flex; align-items: center; gap: 6px;
    margin-left: 8px; color: var(--ux-primary);
    font-weight: 600; text-decoration: none;
}
.ux-info-tip-link:hover { color: var(--ux-primary-dark); text-decoration: underline; }
.ux-info-tip-warning .ux-info-tip-link { color: var(--ux-accent); }
.ux-info-tip-warning .ux-info-tip-link:hover { color: var(--ux-accent-dark); }

/* ============================================================== */
/* /miplan — celdas y total                                        */
/* ============================================================== */

.ux-plan-link {
    display: inline-flex; align-items: center; gap: 8px;
    padding: 6px 12px;
    background: var(--ux-primary-soft);
    border: 1px solid var(--ux-primary);
    color: var(--ux-primary);
    border-radius: 8px;
    font-weight: 600; font-size: 13px;
    cursor: pointer;
    transition: background .15s, color .15s, transform .1s, box-shadow .2s;
}
.ux-plan-link:hover {
    background: var(--ux-primary);
    color: #fff;
    transform: translateY(-1px);
    box-shadow: 0 4px 12px var(--ux-primary-ring);
}
.ux-plan-link i { font-size: 11px; }
.ux-plan-link-eye {
    margin-left: 4px;
    opacity: 0.55;
    color: var(--ux-accent);
    transition: opacity .15s, color .15s, transform .15s;
}
.ux-plan-link:hover .ux-plan-link-eye { opacity: 1; color: #fff; transform: scale(1.15); }

.ux-cell-num   { font-weight: 700; font-size: 14px; color: var(--ux-text); font-variant-numeric: tabular-nums; }
.ux-cell-money { font-weight: 600; font-size: 13.5px; color: var(--ux-text); font-variant-numeric: tabular-nums; }
.ux-cell-money-strong { font-weight: 700; color: var(--ux-primary); font-size: 14.5px; }
.ux-cell-discount {
    display: inline-block; padding: 3px 10px;
    background: color-mix(in srgb, var(--ux-accent) 15%, transparent);
    color: var(--ux-accent);
    border-radius: 999px;
    font-size: 12px; font-weight: 700;
}
.ux-cell-zero { color: var(--ux-text-subtle); font-style: italic; }

.ux-plan-foot {
    display: flex; align-items: center; justify-content: space-between;
    flex-wrap: wrap; gap: 14px;
    padding: 18px 24px 22px;
    border-top: 1px solid var(--ux-border);
    background: linear-gradient(180deg, var(--ux-surface) 0%, var(--ux-surface-alt) 100%);
}
.ux-plan-pay { display: inline-flex; align-items: center; gap: 14px; margin: 0; }
.ux-plan-total-box {
    display: inline-flex; flex-direction: column; align-items: flex-end; gap: 2px;
    padding: 8px 16px;
    background: var(--ux-surface);
    border: 1px solid var(--ux-border);
    border-radius: 10px;
}
.ux-plan-total-label { font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.6px; color: var(--ux-text-muted); font-weight: 600; }
.ux-plan-total-value { font-size: 20px; font-weight: 700; color: var(--ux-accent); font-variant-numeric: tabular-nums; }

.ux-plan-modal .modal-content { background: var(--ux-surface); border: 1px solid var(--ux-border); border-radius: 14px; color: var(--ux-text); }
.ux-plan-modal .modal-header, .ux-plan-modal .modal-footer { border-color: var(--ux-border); background: var(--ux-surface-alt); }
.ux-plan-modal .modal-title { color: var(--ux-primary); font-weight: 700; display: inline-flex; align-items: center; gap: 8px; }
.ux-plan-modal .modal-title i { color: var(--ux-accent); }
.ux-plan-modal-row { display: flex; justify-content: space-between; align-items: center; padding: 8px 0; border-bottom: 1px dashed var(--ux-border); gap: 12px; }
.ux-plan-modal-row:last-of-type { border-bottom: none; }
.ux-plan-modal-label { color: var(--ux-text-muted); font-size: 12.5px; display: inline-flex; align-items: center; gap: 6px; }
.ux-plan-modal-label i { color: var(--ux-accent); font-size: 11px; }
.ux-plan-modal-value { color: var(--ux-text); font-weight: 600; font-size: 13.5px; }
.ux-plan-modal-price { color: var(--ux-primary); font-weight: 700; font-size: 16px; }
.ux-plan-modal-detail { margin-top: 12px; padding-top: 10px; border-top: 1px solid var(--ux-border); }
.ux-plan-modal-detail p { margin-top: 6px; color: var(--ux-text-muted); font-size: 13px; line-height: 1.55; }

/* ============================================================== */
/* Tickets — datatable + conversación                              */
/* ============================================================== */

body.ux-enabled .ux-ticket-row { transition: background-color .15s; }
body.ux-enabled .ux-ticket-row-pending td,
body.ux-enabled .ux-ticket-row-pending th { background-color: rgba(235,128,14,0.04) !important; }
[data-theme="dark"] body.ux-enabled .ux-ticket-row-pending td,
[data-theme="dark"] body.ux-enabled .ux-ticket-row-pending th { background-color: rgba(235,128,14,0.06) !important; }
body.ux-enabled .table-hover tbody tr.ux-ticket-row-pending:hover td,
body.ux-enabled .table-hover tbody tr.ux-ticket-row-pending:hover th { background-color: rgba(235,128,14,0.1) !important; }
.ux-ticket-row-num { color: var(--ux-text-subtle); font-weight: 600; font-size: 13px; }
.ux-ticket-slug {
    background: var(--ux-surface-alt); border: 1px solid var(--ux-border);
    color: var(--ux-text-muted); font-size: 11px; padding: 2px 8px; border-radius: 4px;
    font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
}
.ux-ticket-title-link {
    display: inline-flex; align-items: center; gap: 8px;
    color: var(--ux-primary); font-weight: 600;
    text-decoration: none !important;
    transition: color .15s, transform .1s;
}
.ux-ticket-title-link i { color: var(--ux-accent); font-size: 12px; }
.ux-ticket-title-link:hover { color: var(--ux-accent); transform: translateX(2px); }
.ux-ticket-row-user { display: flex; flex-direction: column; line-height: 1.3; }
.ux-ticket-row-user-name { color: var(--ux-text); font-weight: 600; font-size: 13px; }
.ux-ticket-row-user-email { color: var(--ux-text-subtle); font-size: 11px; }
.ux-ticket-row-subject { display: inline-flex; flex-direction: column; line-height: 1.35; }
.ux-ticket-row-preview { color: var(--ux-text-subtle); font-size: 11.5px; font-weight: 400; }
.ux-ticket-row-date {
    display: inline-flex; align-items: center; gap: 6px;
    color: var(--ux-text-muted); font-size: 12px;
    font-variant-numeric: tabular-nums; white-space: nowrap;
}
.ux-ticket-row-date i { color: var(--ux-text-subtle); font-size: 11px; }
.ux-ticket-status {
    display: inline-flex; align-items: center; gap: 5px;
    padding: 3px 10px; border-radius: 999px;
    font-size: 11px; font-weight: 700;
    text-transform: uppercase; letter-spacing: 0.4px;
}
.ux-ticket-status i { font-size: 8px; }
.ux-ticket-status-open {
    background: color-mix(in srgb, var(--ux-accent) 14%, transparent);
    color: var(--ux-accent);
    border: 1px solid color-mix(in srgb, var(--ux-accent) 35%, transparent);
}
.ux-ticket-status-closed {
    background: color-mix(in srgb, #28b464 14%, transparent);
    color: #1a7f4a;
    border: 1px solid color-mix(in srgb, #28b464 35%, transparent);
}
[data-theme="dark"] .ux-ticket-status-closed { color: #7ee0a5; }

.ux-ticket-page { max-width: 880px; margin: 0 auto; padding: 1rem 1.25rem 3rem; }
.ux-ticket-header {
    display: flex; justify-content: space-between; align-items: center;
    gap: 16px; flex-wrap: wrap;
    background: var(--ux-surface); border: 1px solid var(--ux-border);
    border-radius: 14px; padding: 18px 22px; margin-bottom: 18px;
}
.ux-ticket-header-left { display: flex; align-items: center; gap: 16px; }
.ux-ticket-header-icon {
    width: 50px; height: 50px; border-radius: 14px;
    display: flex; align-items: center; justify-content: center;
    color: #fff; font-size: 20px; flex-shrink: 0;
}
.ux-ticket-icon-open { background: var(--ux-accent); }
.ux-ticket-icon-closed { background: var(--ux-text-subtle); }
.ux-ticket-title { color: var(--ux-primary); font-size: 18px; font-weight: 700; margin: 4px 0 6px; }
.ux-ticket-meta { color: var(--ux-text-muted); font-size: 12px; display: flex; gap: 8px; flex-wrap: wrap; }
.ux-ticket-sep { color: var(--ux-text-subtle); }

.ux-ticket-thread { display: flex; flex-direction: column; gap: 14px; margin-bottom: 18px; }
.ux-ticket-msg { display: flex; gap: 12px; }
.ux-ticket-msg-admin { flex-direction: row-reverse; }
.ux-ticket-avatar {
    flex-shrink: 0; width: 40px; height: 40px; border-radius: 50%;
    background: var(--ux-primary); color: #fff;
    display: flex; align-items: center; justify-content: center;
    font-size: 14px; font-weight: 700;
}
.ux-ticket-msg-admin .ux-ticket-avatar { background: var(--ux-accent); }
.ux-ticket-bubble {
    flex: 1; background: var(--ux-surface); border: 1px solid var(--ux-border);
    border-radius: 12px; padding: 12px 16px; min-width: 0;
}
.ux-ticket-msg-admin .ux-ticket-bubble {
    background: color-mix(in srgb, var(--ux-accent) 6%, var(--ux-surface));
    border-color: color-mix(in srgb, var(--ux-accent) 25%, transparent);
}
.ux-ticket-bubble-head {
    display: flex; justify-content: space-between; align-items: baseline;
    gap: 10px; flex-wrap: wrap; margin-bottom: 6px; padding-bottom: 6px;
    border-bottom: 1px dashed var(--ux-border);
}
.ux-ticket-bubble-author { display: inline-flex; align-items: center; gap: 8px; color: var(--ux-text); font-size: 13px; }
.ux-ticket-author-email { color: var(--ux-text-subtle); font-size: 11px; }
.ux-ticket-badge {
    display: inline-flex; align-items: center; gap: 5px;
    padding: 2px 8px; border-radius: 999px;
    font-size: 10.5px; font-weight: 700;
    text-transform: uppercase; letter-spacing: 0.4px;
}
.ux-ticket-badge-admin {
    background: color-mix(in srgb, var(--ux-accent) 18%, transparent);
    color: var(--ux-accent);
    border: 1px solid color-mix(in srgb, var(--ux-accent) 40%, transparent);
}
.ux-ticket-time { color: var(--ux-text-subtle); font-size: 11px; display: inline-flex; gap: 5px; }
.ux-ticket-content { color: var(--ux-text); font-size: 13.5px; line-height: 1.55; word-break: break-word; }
.ux-ticket-reply {
    background: var(--ux-surface); border: 1px solid var(--ux-border);
    border-radius: 14px; padding: 16px 18px;
}
.ux-ticket-reply-header { display: flex; align-items: center; gap: 8px; color: var(--ux-primary); font-weight: 700; margin-bottom: 10px; }
.ux-ticket-reply-actions { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-top: 10px; flex-wrap: wrap; }
.ux-ticket-reply-hint { color: var(--ux-text-muted); font-size: 12px; }
.ux-ticket-closed-banner {
    display: flex; align-items: center; gap: 12px;
    padding: 14px 18px; background: var(--ux-surface-alt);
    border: 1px solid var(--ux-border); border-radius: 12px;
    color: var(--ux-text-muted); font-size: 13px;
}
.ux-ticket-closed-banner i { color: #28b464; font-size: 18px; }
.ux-ticket-reopen { color: var(--ux-primary); font-weight: 600; }
.ux-ticket-back { display: flex; justify-content: space-between; margin-top: 18px; gap: 10px; flex-wrap: wrap; }

/* ============================================================== */
/* /alert — Centro de alertas                                      */
/* ============================================================== */

body.ux-enabled .ux-alert-row { transition: background-color .15s; }
body.ux-enabled .ux-alert-row-unread td,
body.ux-enabled .ux-alert-row-unread th { background-color: color-mix(in srgb, var(--ux-primary) 5%, transparent) !important; }
[data-theme="dark"] body.ux-enabled .ux-alert-row-unread td,
[data-theme="dark"] body.ux-enabled .ux-alert-row-unread th { background-color: color-mix(in srgb, var(--ux-primary) 10%, transparent) !important; }
body.ux-enabled .table-hover tbody tr.ux-alert-row-unread:hover td,
body.ux-enabled .table-hover tbody tr.ux-alert-row-unread:hover th { background-color: color-mix(in srgb, var(--ux-primary) 12%, transparent) !important; }
.ux-alert-dot { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 50%; font-size: 10px; }
.ux-alert-dot-unread {
    background: color-mix(in srgb, var(--ux-primary) 15%, transparent);
    color: var(--ux-primary);
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--ux-primary) 10%, transparent);
    animation: ux-alert-pulse 2.4s ease-in-out infinite;
}
.ux-alert-dot-read { background: color-mix(in srgb, #28b464 14%, transparent); color: #28b464; }
[data-theme="dark"] .ux-alert-dot-read { background: color-mix(in srgb, #38d47b 18%, transparent); color: #38d47b; }
@keyframes ux-alert-pulse {
    0%, 100% { box-shadow: 0 0 0 3px color-mix(in srgb, var(--ux-primary) 10%, transparent); }
    50%      { box-shadow: 0 0 0 6px color-mix(in srgb, var(--ux-primary) 18%, transparent); }
}
.ux-alert-link {
    display: inline-flex; align-items: center; gap: 10px;
    color: var(--ux-text);
    text-decoration: none !important;
    font-weight: 500;
    transition: color .15s, transform .1s;
}
.ux-alert-link > i { color: var(--ux-primary); font-size: 14px; flex-shrink: 0; }
.ux-alert-link:hover { color: var(--ux-primary); transform: translateX(2px); }
.ux-alert-row-unread .ux-alert-link { color: var(--ux-primary); font-weight: 700; }
.ux-alert-subject { display: inline-flex; flex-direction: column; line-height: 1.35; max-width: 480px; }

/* ============================================================== */
/* /message_sucursal/{id} — lectura de mensaje                     */
/* ============================================================== */

.ux-msg-tipo-badge {
    display: inline-flex; align-items: center; gap: 5px;
    margin-left: 10px; padding: 3px 10px;
    background: color-mix(in srgb, var(--ux-accent) 12%, transparent);
    border: 1px solid color-mix(in srgb, var(--ux-accent) 35%, transparent);
    color: var(--ux-accent);
    border-radius: 999px;
    font-size: 11px; font-weight: 600;
}
.ux-msg-tipo-badge i { font-size: 9px; opacity: 0.85; }
.ux-msg-tipo-badge-inline { margin-left: 0; font-size: 11.5px; }
.ux-msg-body { padding: 26px 28px 28px; }
.ux-msg-content {
    background: var(--ux-surface-alt);
    border: 1px solid var(--ux-border);
    border-radius: 12px;
    padding: 22px 24px;
    color: var(--ux-text);
    font-size: 14.5px;
    line-height: 1.65;
}
.ux-msg-content > *:first-child { margin-top: 0; }
.ux-msg-content > *:last-child  { margin-bottom: 0; }
.ux-msg-content h1, .ux-msg-content h2, .ux-msg-content h3,
.ux-msg-content h4, .ux-msg-content h5, .ux-msg-content h6 {
    color: var(--ux-primary); margin-top: 18px; margin-bottom: 10px; font-weight: 700;
}
.ux-msg-content p { margin: 10px 0; }
.ux-msg-content a { color: var(--ux-primary); text-decoration: underline; }
.ux-msg-content a:hover { color: var(--ux-primary-dark); }
.ux-msg-content ul, .ux-msg-content ol { padding-left: 20px; margin: 10px 0; }
.ux-msg-content blockquote {
    margin: 12px 0; padding: 10px 14px;
    border-left: 4px solid var(--ux-primary);
    background: color-mix(in srgb, var(--ux-primary) 6%, transparent);
    color: var(--ux-text-muted);
    border-radius: 0 8px 8px 0;
    font-style: italic;
}
.ux-msg-content code {
    background: var(--ux-bg); color: var(--ux-accent);
    padding: 2px 6px; border-radius: 4px;
    font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
    font-size: 12.5px;
}
.ux-msg-content img { max-width: 100%; height: auto; border-radius: 8px; }
.ux-msg-foot {
    display: flex; align-items: center; justify-content: space-between;
    gap: 14px; flex-wrap: wrap;
    padding: 16px 28px 22px;
    border-top: 1px solid var(--ux-border);
    background: linear-gradient(180deg, var(--ux-surface) 0%, var(--ux-surface-alt) 100%);
}
.ux-msg-foot-actions { display: inline-flex; align-items: center; gap: 10px; flex-wrap: wrap; }

/* ============================================================== */
/* Bootstrap-select — polish del dropdown                          */
/* ============================================================== */

body.ux-enabled .bootstrap-select .dropdown-menu {
    background-color: var(--ux-surface);
    border: 1px solid var(--ux-border);
    border-radius: 10px;
    box-shadow: 0 12px 28px var(--ux-shadow);
    padding: 6px;
    z-index: 1080;
    overflow: hidden;
}
body.ux-enabled .bootstrap-select.dropdown.show { z-index: 1080; }
body.ux-enabled .bootstrap-select .dropdown-menu .inner {
    max-height: 280px !important;
    overflow-y: auto;
    border-radius: 6px;
}
body.ux-enabled .bootstrap-select .dropdown-menu li a {
    color: var(--ux-text);
    padding: 8px 12px;
    border-radius: 6px;
    transition: background .12s, color .12s;
}
body.ux-enabled .bootstrap-select .dropdown-menu li a:hover,
body.ux-enabled .bootstrap-select .dropdown-menu li.selected a {
    background-color: var(--ux-primary-soft) !important;
    color: var(--ux-primary) !important;
}
body.ux-enabled .bootstrap-select .dropdown-menu li a:hover span.text,
body.ux-enabled .bootstrap-select .dropdown-menu li.selected a span.text {
    color: var(--ux-primary) !important;
}
body.ux-enabled .bootstrap-select .bs-searchbox { padding: 6px 8px 8px; }
body.ux-enabled .bootstrap-select .bs-searchbox .form-control {
    background-color: var(--ux-surface-alt);
    border: 1px solid var(--ux-border);
    color: var(--ux-text);
    border-radius: 8px;
    height: 36px;
    padding: 6px 12px;
}
body.ux-enabled .bootstrap-select .bs-searchbox .form-control:focus {
    border-color: var(--ux-primary);
    box-shadow: 0 0 0 0.2rem var(--ux-primary-ring);
    outline: none;
}
body.ux-enabled .bootstrap-select > .btn.dropdown-toggle,
body.ux-enabled button.btn.dropdown-toggle.btn-light {
    background-color: var(--ux-surface) !important;
    border: 1px solid var(--ux-border) !important;
    color: var(--ux-text) !important;
    border-radius: 8px;
    min-height: 42px;
    padding: 8px 14px;
}
body.ux-enabled .bootstrap-select.bs-placeholder > .btn.dropdown-toggle { color: var(--ux-text-subtle) !important; }

.ux-impersonate-banner {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 12px 22px;
    background: linear-gradient(90deg,
        rgba(235, 128, 14, 0.16) 0%,
        rgba(235, 128, 14, 0.08) 50%,
        rgba(235, 128, 14, 0.04) 100%);
    border-bottom: 2px solid var(--ux-accent);
    color: var(--ux-text);
    font-size: 13px;
    flex-wrap: wrap;
}
[data-theme="dark"] .ux-impersonate-banner {
    background: linear-gradient(90deg,
        rgba(235, 128, 14, 0.22) 0%,
        rgba(235, 128, 14, 0.12) 50%,
        rgba(235, 128, 14, 0.06) 100%);
}

/* Icono circular naranja */
.ux-impersonate-icon {
    flex-shrink: 0;
    width: 38px;
    height: 38px;
    border-radius: 50%;
    background: var(--ux-accent);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    box-shadow: 0 3px 10px rgba(235, 128, 14, 0.35);
}

/* Texto: eyebrow arriba + frase abajo */
.ux-impersonate-text {
    display: flex;
    flex-direction: column;
    line-height: 1.3;
    min-width: 0;
}
.ux-impersonate-eyebrow {
    color: var(--ux-accent);
    font-size: 10.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.7px;
    margin-bottom: 2px;
}
.ux-impersonate-user {
    color: var(--ux-text);
    font-size: 13.5px;
    font-weight: 500;
}
.ux-impersonate-user strong {
    color: var(--ux-accent);
    font-weight: 700;
}

/* Bloque de acciones empujado a la derecha */
.ux-impersonate-actions {
    margin-left: auto;
    display: inline-flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

/* Select de cambio de sección */
.ux-impersonate-select {
    appearance: none;
    -webkit-appearance: none;
    background: var(--ux-surface);
    color: var(--ux-text);
    border: 1px solid color-mix(in srgb, var(--ux-accent) 35%, transparent);
    border-radius: 8px;
    padding: 8px 32px 8px 12px;
    font-size: 12.5px;
    font-weight: 500;
    cursor: pointer;
    transition: border-color .15s, box-shadow .15s;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'><path fill='%23eb800e' d='M0 0h10L5 6z'/></svg>");
    background-repeat: no-repeat;
    background-position: right 12px center;
    min-height: 36px;
}
.ux-impersonate-select:hover { border-color: var(--ux-accent); }
.ux-impersonate-select:focus {
    outline: none;
    border-color: var(--ux-accent);
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--ux-accent) 25%, transparent);
}

/* Botón "Salir del modo vista" */
.ux-impersonate-exit {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 8px 16px;
    background: var(--ux-accent);
    color: #fff !important;
    border: 1px solid var(--ux-accent);
    border-radius: 8px;
    font-size: 12.5px;
    font-weight: 600;
    text-decoration: none !important;
    box-shadow: 0 2px 6px rgba(235, 128, 14, 0.3);
    transition: background .15s, box-shadow .2s, transform .1s, border-color .15s;
    min-height: 36px;
}
.ux-impersonate-exit:hover {
    background: var(--ux-accent-dark);
    border-color: var(--ux-accent-dark);
    box-shadow: 0 4px 12px rgba(235, 128, 14, 0.45);
    transform: translateY(-1px);
    color: #fff !important;
}
.ux-impersonate-exit i { font-size: 11px; }

/* Responsive */
@media (max-width: 768px) {
    .ux-impersonate-banner {
        padding: 10px 14px;
        gap: 12px;
    }
    .ux-impersonate-actions {
        margin-left: 0;
        width: 100%;
        justify-content: flex-end;
    }
}
@media (max-width: 480px) {
    .ux-impersonate-banner {
        flex-direction: column;
        align-items: flex-start;
        gap: 10px;
    }
    .ux-impersonate-actions {
        flex-direction: column;
        align-items: stretch;
    }
    .ux-impersonate-select,
    .ux-impersonate-exit {
        width: 100%;
        justify-content: center;
    }
    .ux-impersonate-exit span { display: inline; }
}

/* ============================================================== */
/* /obj_user — Tarjetas de dispositivos GPS                        */
/* ============================================================== */

.ux-obj-page { max-width: 1280px; margin: 0 auto; padding: 1rem 1.25rem 3rem; }
.ux-obj-header {
    display: flex; align-items: center; justify-content: space-between;
    gap: 16px; margin-bottom: 22px; flex-wrap: wrap;
}
.ux-obj-title {
    color: var(--ux-primary); font-size: 22px; font-weight: 700;
    margin: 4px 0; display: inline-flex; align-items: center; gap: 10px;
}
.ux-obj-title i { color: var(--ux-accent); }
.ux-obj-subtitle { color: var(--ux-text-muted); margin: 0; font-size: 13.5px; }
.ux-obj-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
    gap: 18px;
}
.ux-obj-card {
    background: var(--ux-surface);
    border: 1px solid var(--ux-border);
    border-radius: 14px;
    overflow: hidden;
    box-shadow: 0 2px 10px var(--ux-shadow);
    transition: transform .22s, box-shadow .22s, border-color .22s;
    display: flex;
    flex-direction: column;
}
.ux-obj-card:hover {
    transform: translateY(-3px);
    box-shadow: 0 10px 25px var(--ux-shadow);
    border-color: var(--ux-primary);
}
.ux-obj-card-head {
    display: flex; align-items: center; gap: 14px;
    padding: 16px 18px;
    background: linear-gradient(135deg, var(--ux-primary-soft) 0%, var(--ux-surface-alt) 100%);
    border-bottom: 1px solid var(--ux-border);
}
.ux-obj-card-icon {
    flex-shrink: 0; width: 44px; height: 44px; border-radius: 12px;
    background: var(--ux-primary); color: #fff;
    display: flex; align-items: center; justify-content: center;
    font-size: 18px;
    box-shadow: 0 2px 6px rgba(16,107,160,0.3);
    transition: transform .3s;
}
.ux-obj-card:hover .ux-obj-card-icon { transform: scale(1.05) rotate(-4deg); }
.ux-obj-card-title-wrap { flex: 1; min-width: 0; }
.ux-obj-card-title {
    color: var(--ux-primary); font-size: 16px; font-weight: 700; margin: 0;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ux-obj-card-counter { color: var(--ux-text-subtle); font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; }
.ux-obj-status {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 4px 10px; border-radius: 999px;
    font-size: 11px; font-weight: 700;
    text-transform: uppercase; letter-spacing: 0.5px;
    flex-shrink: 0;
}
.ux-obj-status i { font-size: 8px; }
.ux-obj-status-on {
    background: rgba(40, 180, 100, 0.15);
    color: #1a7f4a;
    border: 1px solid rgba(40, 180, 100, 0.4);
}
[data-theme="dark"] .ux-obj-status-on { background: rgba(40, 180, 100, 0.18); color: #7ee0a5; }
.ux-obj-status-on i { color: #28b464; animation: ux-pulse-dot 2s ease-in-out infinite; }
.ux-obj-status-off { background: rgba(150, 160, 175, 0.15); color: var(--ux-text-muted); border: 1px solid var(--ux-border); }
.ux-obj-status-off i { color: var(--ux-text-subtle); }
@keyframes ux-pulse-dot {
    0%, 100% { opacity: 1; }
    50%      { opacity: 0.5; transform: scale(0.85); }
}
.ux-obj-data { list-style: none; padding: 14px 18px 8px; margin: 0; }
.ux-obj-data li {
    display: grid;
    grid-template-columns: 24px 1fr auto;
    align-items: baseline; gap: 10px;
    padding: 8px 0;
    border-bottom: 1px dashed var(--ux-border);
    font-size: 13px;
}
.ux-obj-data li:last-child { border-bottom: none; }
.ux-obj-data li i { color: var(--ux-primary); font-size: 13px; text-align: center; align-self: center; }
.ux-obj-data-label { color: var(--ux-text-muted); }
.ux-obj-data-value { color: var(--ux-text); font-weight: 600; font-variant-numeric: tabular-nums; }
.ux-obj-icon-move { color: #28b464 !important; }
.ux-obj-icon-stop { color: var(--ux-accent) !important; }

.ux-obj-params {
    padding: 14px 18px 16px;
    border-top: 1px solid var(--ux-border);
    background: color-mix(in srgb, var(--ux-primary) 7%, var(--ux-surface));
}
[data-theme="dark"] .ux-obj-params { background: color-mix(in srgb, var(--ux-primary) 10%, var(--ux-surface)); }
.ux-obj-params-head {
    display: flex; align-items: center; gap: 8px;
    font-size: 11.5px; font-weight: 700;
    text-transform: uppercase; letter-spacing: 0.6px;
    color: var(--ux-primary);
    margin-bottom: 10px;
    padding-bottom: 6px;
    border-bottom: 1px dashed color-mix(in srgb, var(--ux-primary) 25%, transparent);
}
.ux-obj-params-head i { color: var(--ux-accent); font-size: 11px; }
.ux-obj-params-count {
    margin-left: auto;
    background: var(--ux-primary); color: #fff;
    font-size: 10px; font-weight: 700;
    padding: 2px 8px; border-radius: 999px;
    text-transform: none; letter-spacing: 0;
}
.ux-obj-params-grid { display: flex; flex-wrap: wrap; gap: 6px; }
.ux-obj-param-pill {
    display: inline-flex; align-items: center; gap: 5px;
    padding: 4px 10px;
    background: var(--ux-surface-alt);
    border: 1px solid var(--ux-border);
    border-radius: 14px;
    font-size: 11px;
    color: var(--ux-text-muted);
    max-width: 100%;
    word-break: break-word;
    line-height: 1.4;
    transition: border-color .12s, color .12s;
}
.ux-obj-param-pill:hover { border-color: var(--ux-primary); color: var(--ux-text); }
.ux-obj-param-pill b { color: var(--ux-primary); font-weight: 700; white-space: nowrap; }
.ux-obj-empty {
    display: inline-flex; align-items: center; gap: 6px;
    color: var(--ux-text-subtle); font-style: italic; font-size: 12px;
    padding: 4px 12px;
    background: var(--ux-surface);
    border: 1px dashed var(--ux-border);
    border-radius: 8px;
}

/* Override global a la regla agresiva de css.css:
     footer { position: absolute; bottom: 0; width: 100%; height: 40px; }
   que rompía cualquier <footer> que pusiéramos dentro de un card. */
footer.ux-obj-card-foot,
footer.ux-msg-foot,
footer.ux-ticket-foot,
.ux-form-card footer,
.ux-obj-card footer {
    position: static !important;
    bottom: auto !important;
    height: auto !important;
    width: auto !important;
}

.ux-obj-card-foot {
    border-top: 1px solid var(--ux-border);
    background: linear-gradient(180deg, var(--ux-surface) 0%, var(--ux-surface-alt) 100%);
    flex-shrink: 0;
}
.ux-obj-coords {
    display: flex; align-items: center; gap: 14px;
    padding: 14px 18px;
    color: var(--ux-text);
    text-decoration: none !important;
    transition: background .15s ease, color .15s ease;
}
.ux-obj-coords:hover { background: var(--ux-primary-soft); color: var(--ux-primary); }
.ux-obj-coords > i:first-child { color: var(--ux-accent); font-size: 17px; flex-shrink: 0; }
.ux-obj-coords > span { flex: 1; display: flex; flex-direction: column; line-height: 1.35; gap: 2px; min-width: 0; }
.ux-obj-coords-label {
    font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.6px;
    color: var(--ux-accent); font-weight: 700;
}
.ux-obj-coords-value {
    color: var(--ux-text-muted); font-size: 12.5px;
    font-family: ui-monospace, "SF Mono", Menlo, monospace;
    font-variant-numeric: tabular-nums;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ux-obj-coords:hover .ux-obj-coords-value { color: var(--ux-primary); }
.ux-obj-coords-ext { color: var(--ux-text-subtle); font-size: 11px; transition: color .2s; flex-shrink: 0; }
.ux-obj-coords:hover .ux-obj-coords-ext { color: var(--ux-primary); }
.ux-obj-pagination { display: flex; justify-content: center; margin-top: 24px; }

/* ============================================================== */
/* Responsive — Mobile (cellular)                                  */
/* ============================================================== */

@media (max-width: 600px) {
    .ux-obj-page { padding: .75rem .75rem 2rem; }
    .ux-obj-header { flex-direction: column; align-items: flex-start; gap: 12px; }
    .ux-obj-header > button { width: 100%; justify-content: center; }
    .ux-obj-grid { grid-template-columns: 1fr; gap: 14px; }
    .ux-obj-card-head { flex-wrap: wrap; padding: 14px; gap: 10px; }
    .ux-obj-card-icon { width: 38px; height: 38px; font-size: 15px; }
    .ux-obj-card-title { font-size: 15px; }
    .ux-obj-status { order: -1; margin-left: auto; font-size: 10px; }
    .ux-obj-data { padding: 10px 14px 4px; }
    .ux-obj-data li { grid-template-columns: 20px 1fr auto; gap: 8px; padding: 7px 0; font-size: 12.5px; }
    .ux-obj-params { padding: 12px 14px; }
    .ux-obj-card-foot { padding: 4px 6px; }
    .ux-obj-coords { padding: 10px 12px; gap: 10px; }
    .ux-obj-coords-value { font-size: 12px; }
    .ux-msg-foot { flex-direction: column; align-items: stretch; }
    .ux-msg-foot-actions { justify-content: stretch; }
    .ux-msg-foot-actions .btn { flex: 1; justify-content: center; }
    .ux-form-wrapper { padding: .75rem .75rem 2rem; }
    .ux-form { padding: 18px 16px 20px; }
    .ux-form-row, .ux-form-row-2, .ux-form-row-3, .ux-form-row-4 { grid-template-columns: 1fr !important; }
}

/* ============================================================== */
/* /up/{id}/edit — Edición de perfil de usuario                    */
/* ============================================================== */

.ux-profile-grid {
    display: grid;
    grid-template-columns: minmax(260px, 320px) 1fr;
    gap: 18px;
    align-items: start;
}

.ux-profile-photo-card { position: sticky; top: 80px; }
.ux-profile-photo-body {
    padding: 24px 22px 22px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 16px;
}
.ux-profile-avatar {
    position: relative;
    width: 180px;
    height: 180px;
    border-radius: 50%;
    overflow: hidden;
    background: var(--ux-surface-alt);
    border: 4px solid var(--ux-surface);
    box-shadow:
        0 0 0 3px var(--ux-accent),
        0 8px 24px var(--ux-shadow);
    display: flex;
    align-items: center;
    justify-content: center;
    transition: transform .25s ease, box-shadow .25s ease;
}
.ux-profile-avatar:hover {
    transform: scale(1.03);
    box-shadow:
        0 0 0 3px var(--ux-primary),
        0 12px 30px var(--ux-shadow);
}
.ux-profile-avatar img,
.ux-profile-avatar > img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    border: none !important;   /* override de .img-thumbnail de Bootstrap */
    border-radius: 0 !important;
    padding: 0 !important;
    background: transparent !important;
}

.ux-profile-photo-body .ux-form-field {
    width: 100%;
}

/* Hint inline en una caja readonly */
.ux-readonly-hint {
    margin-left: auto;
    display: inline-flex;
    align-items: center;
    gap: 5px;
    color: var(--ux-text-subtle);
    font-size: 11px;
    padding: 2px 8px;
    background: var(--ux-surface);
    border: 1px solid var(--ux-border);
    border-radius: 999px;
    font-weight: 500;
}
.ux-readonly-hint i { font-size: 9px; color: var(--ux-text-subtle); }

/* Secciones dentro de un form-card (datos personales / contraseña) */
.ux-profile-section {
    border-top: 1px dashed var(--ux-border);
    padding-top: 16px;
    margin-top: 4px;
    display: flex;
    flex-direction: column;
    gap: 16px;
}
.ux-profile-section:first-child {
    border-top: none;
    padding-top: 0;
    margin-top: 0;
}
.ux-profile-section-head {
    display: flex;
    align-items: center;
    gap: 8px;
    color: var(--ux-accent);
    font-size: 12px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.6px;
    margin: 0;
    padding-bottom: 4px;
    border-bottom: 2px solid color-mix(in srgb, var(--ux-accent) 30%, transparent);
}
.ux-profile-section-head i { font-size: 11px; }
.ux-profile-section-head .ux-profile-section-hint {
    margin-left: auto;
    color: var(--ux-text-subtle);
    font-weight: 500;
    text-transform: none;
    letter-spacing: 0;
    font-size: 11px;
}

/* Responsive */
@media (max-width: 820px) {
    .ux-profile-grid {
        grid-template-columns: 1fr;
    }
    .ux-profile-photo-card {
        position: static;
    }
    .ux-profile-avatar {
        width: 140px;
        height: 140px;
    }
    .ux-readonly-hint {
        margin-left: 0;
        flex-shrink: 0;
    }
    .ux-profile-section-head {
        flex-wrap: wrap;
    }
    .ux-profile-section-head .ux-profile-section-hint {
        margin-left: 0;
        width: 100%;
    }
}

/* Badge de destinatario en /message_sucursal_config (admin) */
.ux-msg-dest-badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 3px 10px;
    border-radius: 999px;
    font-size: 11.5px;
    font-weight: 600;
    line-height: 1.4;
}
.ux-msg-dest-badge i { font-size: 10px; }

/* Variante "Todos los clientes" — verde, broadcast */
.ux-msg-dest-badge-all {
    background: color-mix(in srgb, #28b464 14%, transparent);
    border: 1px solid color-mix(in srgb, #28b464 40%, transparent);
    color: #1a7f4a;
}
[data-theme="dark"] .ux-msg-dest-badge-all {
    color: #7ee0a5;
    border-color: color-mix(in srgb, #28b464 50%, transparent);
}
.ux-msg-dest-badge-all i { color: #28b464; }

/* Variante "cliente específico" — celeste */
.ux-msg-dest-badge-one {
    background: var(--ux-primary-soft);
    border: 1px solid color-mix(in srgb, var(--ux-primary) 40%, transparent);
    color: var(--ux-primary);
}
.ux-msg-dest-badge-one i { color: var(--ux-primary); }

/* ============================================================== */
/* Campanita del navbar — dropdown "Centro de alertas"             */
/* ============================================================== */

.ux-bell-toggle {
    position: relative;
    color: var(--ux-text-muted) !important;
    transition: color .15s ease;
}
.ux-bell-toggle:hover { color: var(--ux-primary) !important; }
.ux-bell-toggle .fa-bell {
    transition: transform .2s ease;
}
.ux-bell-toggle:hover .fa-bell { transform: scale(1.1); }

/* Animación shake cuando hay alertas */
.ux-bell-shake {
    animation: ux-bell-shake 4s ease-in-out infinite;
    transform-origin: top center;
}
@keyframes ux-bell-shake {
    0%, 88%, 100% { transform: rotate(0); }
    90%   { transform: rotate(12deg); }
    92%   { transform: rotate(-10deg); }
    94%   { transform: rotate(8deg); }
    96%   { transform: rotate(-6deg); }
    98%   { transform: rotate(0); }
}

/* Wrapper del bell + badge para anclar correctamente */
.ux-bell-icon-wrap {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    line-height: 1;
}
.ux-bell-icon-wrap .fa-bell {
    font-size: 17px;
    line-height: 1;
}

/* Badge contador — anclado al icono, no al nav-link */
.ux-bell-badge {
    position: absolute;
    top: -6px;
    right: -9px;
    min-width: 18px;
    height: 18px;
    padding: 0 5px;
    border-radius: 999px;
    font-size: 10px;
    font-weight: 700;
    line-height: 14px;             /* ajusta para que el número quede vertical-centrado */
    text-align: center;
    background: var(--ux-accent);
    color: #fff !important;
    border: 2px solid var(--ux-bg);
    box-shadow: 0 0 0 0 color-mix(in srgb, var(--ux-accent) 60%, transparent);
    animation: ux-bell-badge-pulse 2.2s ease-out infinite;
    pointer-events: none;
    /* Cuando el navbar tiene fondo distinto, el border imita el "halo" */
    box-sizing: border-box;
}
@keyframes ux-bell-badge-pulse {
    0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--ux-accent) 50%, transparent); }
    50%      { box-shadow: 0 0 0 6px color-mix(in srgb, var(--ux-accent) 0%, transparent); }
}

/* Menú del dropdown */
.ux-bell-menu {
    width: 360px;
    max-width: calc(100vw - 24px);
    padding: 0 !important;
    border: 1px solid var(--ux-border) !important;
    border-radius: 14px !important;
    background: var(--ux-surface) !important;
    box-shadow: 0 16px 40px var(--ux-shadow) !important;
    overflow: hidden;
    animation: ux-fade-slide-in .18s ease both;
}
@keyframes ux-fade-slide-in {
    from { opacity: 0; transform: translateY(-6px); }
    to   { opacity: 1; transform: translateY(0); }
}

/* Header del dropdown */
.ux-bell-head {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 14px 16px;
    background: linear-gradient(135deg, var(--ux-primary-soft) 0%, var(--ux-surface-alt) 100%);
    border-bottom: 1px solid var(--ux-border);
    color: var(--ux-primary);
    font-size: 13px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}
.ux-bell-head > i {
    color: var(--ux-accent);
    font-size: 14px;
}
.ux-bell-head-count {
    margin-left: auto;
    background: var(--ux-accent);
    color: #fff;
    font-size: 11px;
    font-weight: 700;
    padding: 2px 9px;
    border-radius: 999px;
    text-transform: none;
    letter-spacing: 0;
    min-width: 24px;
    text-align: center;
}

/* Item de alerta */
.ux-bell-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 16px;
    color: var(--ux-text);
    text-decoration: none !important;
    border-bottom: 1px solid var(--ux-border);
    transition: background-color .15s ease, transform .1s ease;
    position: relative;
}
.ux-bell-item:last-of-type { border-bottom: none; }
.ux-bell-item:hover {
    background: var(--ux-surface-alt);
    color: var(--ux-text);
    transform: translateX(2px);
}
.ux-bell-item-unread {
    background: color-mix(in srgb, var(--ux-primary) 6%, transparent);
}
.ux-bell-item-unread:hover {
    background: color-mix(in srgb, var(--ux-primary) 12%, transparent);
}

/* Icono circular del item */
.ux-bell-icon {
    flex-shrink: 0;
    width: 38px;
    height: 38px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #fff;
    font-size: 14px;
    box-shadow: 0 2px 6px var(--ux-shadow);
    transition: transform .25s ease;
}
.ux-bell-item:hover .ux-bell-icon { transform: scale(1.06) rotate(-3deg); }

/* Variantes por tipo */
.ux-bell-icon-ticket   { background: linear-gradient(135deg, var(--ux-accent) 0%, var(--ux-accent-dark) 100%); }
.ux-bell-icon-sucursal { background: linear-gradient(135deg, var(--ux-primary) 0%, var(--ux-primary-dark) 100%); }
.ux-bell-icon-pago     { background: linear-gradient(135deg, #28b464 0%, #1a7f4a 100%); }
.ux-bell-icon-plan     { background: linear-gradient(135deg, #8b5cf6 0%, #6d3ed8 100%); }
.ux-bell-icon-default  { background: linear-gradient(135deg, var(--ux-text-muted) 0%, var(--ux-text-subtle) 100%); }

/* Contenido del item */
.ux-bell-content {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 3px;
}
.ux-bell-title {
    color: var(--ux-text);
    font-size: 13.5px;
    font-weight: 600;
    line-height: 1.35;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.ux-bell-item-unread .ux-bell-title {
    color: var(--ux-primary);
    font-weight: 700;
}
.ux-bell-meta {
    color: var(--ux-text-subtle);
    font-size: 11px;
    display: inline-flex;
    align-items: center;
    gap: 5px;
}
.ux-bell-meta i { font-size: 9px; }

/* Puntito unread a la derecha */
.ux-bell-dot {
    flex-shrink: 0;
    width: 9px;
    height: 9px;
    border-radius: 50%;
    background: var(--ux-accent);
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--ux-accent) 22%, transparent);
    animation: ux-alert-pulse 2.4s ease-in-out infinite;
}

/* Estado vacío */
.ux-bell-empty {
    padding: 28px 20px;
    text-align: center;
    color: var(--ux-text-muted);
}
.ux-bell-empty i {
    font-size: 36px;
    color: var(--ux-text-subtle);
    opacity: 0.55;
    margin-bottom: 10px;
}
.ux-bell-empty p {
    color: var(--ux-text);
    font-weight: 600;
    margin: 0 0 4px;
    font-size: 14px;
}
.ux-bell-empty small {
    color: var(--ux-text-subtle);
    font-size: 11.5px;
}

/* Footer "Ver todas las alertas" */
.ux-bell-footer {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 12px 16px;
    background: var(--ux-surface-alt);
    color: var(--ux-primary) !important;
    font-size: 12.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    text-decoration: none !important;
    border-top: 1px solid var(--ux-border);
    transition: background .15s ease, color .15s ease;
}
.ux-bell-footer:hover {
    background: var(--ux-primary-soft);
    color: var(--ux-primary-dark) !important;
}
.ux-bell-footer i {
    transition: transform .2s ease;
    font-size: 11px;
}
.ux-bell-footer:hover i { transform: translateX(3px); }

@media (max-width: 480px) {
    .ux-bell-menu { width: calc(100vw - 16px); }
}

/* ============================================================== */
/* Toggle card prominente — para opciones importantes en forms     */
/* (iOS-style switch, icono, descripción y feedback visible)       */
/* ============================================================== */

.ux-toggle-card {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 16px 18px;
    background: var(--ux-surface-alt);
    border: 2px dashed var(--ux-border);
    border-radius: 12px;
    cursor: pointer;
    user-select: none;
    transition: background .2s ease, border-color .2s ease, box-shadow .2s ease, transform .15s ease;
    margin: 0;
    position: relative;
}
.ux-toggle-card:hover {
    border-color: color-mix(in srgb, var(--ux-accent) 50%, transparent);
    background: color-mix(in srgb, var(--ux-accent) 4%, var(--ux-surface));
}
.ux-toggle-card-input {
    position: absolute;
    opacity: 0;
    pointer-events: none;
    width: 0;
    height: 0;
}

/* Estado activo: border y fondo en accent */
.ux-toggle-card:has(.ux-toggle-card-input:checked) {
    background: color-mix(in srgb, var(--ux-accent) 10%, var(--ux-surface));
    border: 2px solid var(--ux-accent);
    border-style: solid;
    box-shadow: 0 4px 14px color-mix(in srgb, var(--ux-accent) 25%, transparent);
}
[data-theme="dark"] .ux-toggle-card:has(.ux-toggle-card-input:checked) {
    background: color-mix(in srgb, var(--ux-accent) 14%, var(--ux-surface));
}

/* Icono circular */
.ux-toggle-card-icon {
    flex-shrink: 0;
    width: 48px;
    height: 48px;
    border-radius: 14px;
    background: var(--ux-surface);
    border: 1px solid var(--ux-border);
    color: var(--ux-text-subtle);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 20px;
    transition: background .2s, color .2s, border-color .2s, transform .25s;
}
.ux-toggle-card:has(.ux-toggle-card-input:checked) .ux-toggle-card-icon {
    background: var(--ux-accent);
    border-color: var(--ux-accent);
    color: #fff;
    transform: rotate(-6deg) scale(1.05);
    box-shadow: 0 3px 10px color-mix(in srgb, var(--ux-accent) 35%, transparent);
}

/* Texto */
.ux-toggle-card-text {
    flex: 1;
    min-width: 0;
}
.ux-toggle-card-title {
    color: var(--ux-text);
    font-size: 15px;
    font-weight: 700;
    margin: 0 0 3px;
    line-height: 1.3;
}
.ux-toggle-card:has(.ux-toggle-card-input:checked) .ux-toggle-card-title {
    color: var(--ux-accent);
}
.ux-toggle-card-desc {
    color: var(--ux-text-muted);
    font-size: 12.5px;
    margin: 0 0 6px;
    line-height: 1.45;
}

/* Status pill */
.ux-toggle-card-status {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 3px 10px;
    border-radius: 999px;
    font-size: 11px;
    font-weight: 600;
}
.ux-toggle-card-status i { font-size: 10px; }

.ux-toggle-card-status-off {
    background: var(--ux-surface);
    border: 1px solid var(--ux-border);
    color: var(--ux-text-subtle);
}
.ux-toggle-card-status-on {
    display: none;
    background: var(--ux-accent);
    border: 1px solid var(--ux-accent-dark);
    color: #fff;
}
.ux-toggle-card:has(.ux-toggle-card-input:checked) .ux-toggle-card-status-off { display: none; }
.ux-toggle-card:has(.ux-toggle-card-input:checked) .ux-toggle-card-status-on  { display: inline-flex; }

/* Switch iOS-style */
.ux-toggle-switch {
    flex-shrink: 0;
    position: relative;
    width: 52px;
    height: 30px;
    border-radius: 999px;
    background: var(--ux-border-strong);
    transition: background .2s ease, box-shadow .2s ease;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.12);
}
.ux-toggle-switch-thumb {
    position: absolute;
    top: 3px;
    left: 3px;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: #fff;
    box-shadow: 0 2px 6px rgba(0,0,0,0.25);
    transition: transform .25s cubic-bezier(.4, 1.4, .5, 1), background .2s;
}
.ux-toggle-card:has(.ux-toggle-card-input:checked) .ux-toggle-switch {
    background: var(--ux-accent);
    box-shadow: inset 0 2px 4px color-mix(in srgb, var(--ux-accent-dark) 60%, transparent);
}
.ux-toggle-card:has(.ux-toggle-card-input:checked) .ux-toggle-switch-thumb {
    transform: translateX(22px);
    background: #fff;
}

/* Focus visible */
.ux-toggle-card-input:focus-visible + .ux-toggle-card-icon {
    outline: 2px solid var(--ux-accent);
    outline-offset: 2px;
}
.ux-toggle-card:has(.ux-toggle-card-input:focus-visible) {
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--ux-accent) 25%, transparent);
}

/* Responsive */
@media (max-width: 600px) {
    .ux-toggle-card {
        flex-wrap: wrap;
        gap: 12px;
    }
    .ux-toggle-card-text {
        flex-basis: 100%;
        order: 3;
    }
    .ux-toggle-switch {
        margin-left: auto;
    }
}

/* ============================================================== */
/* /buscar — Resultados de búsqueda                                */
/* ============================================================== */

/* Barra de búsqueda inline (refinar consulta sin volver al navbar) */
.ux-search-query-bar {
    display: flex;
    flex-direction: column;
    gap: 12px;
    padding: 18px 24px;
    background: linear-gradient(180deg, var(--ux-surface) 0%, var(--ux-surface-alt) 100%);
    border-bottom: 1px solid var(--ux-border);
}
.ux-search-form {
    display: flex;
    gap: 10px;
    align-items: stretch;
}
.ux-search-input {
    flex: 1 1 auto;
    min-width: 0;            /* clave para permitir shrink en flex */
    position: relative;
    display: flex;
    align-items: center;
}
.ux-search-input > i:first-child {
    position: absolute;
    left: 14px;
    color: var(--ux-accent);
    font-size: 14px;
    pointer-events: none;
    z-index: 2;
}
.ux-search-input input {
    width: 100%;
    min-width: 0;
    flex: 1 1 auto;
    padding: 10px 42px 10px 38px;
    border: 1px solid var(--ux-border);
    background: var(--ux-surface);
    color: var(--ux-text);
    border-radius: 10px;
    font-size: 14px;
    height: 42px;
    transition: border-color .15s, box-shadow .15s;
}
.ux-search-input input:focus {
    outline: none;
    border-color: var(--ux-primary);
    box-shadow: 0 0 0 3px var(--ux-primary-ring);
}
.ux-search-clear {
    position: absolute;
    right: 8px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--ux-text-subtle);
    width: 26px;
    height: 26px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    text-decoration: none !important;
    transition: background .15s, color .15s;
    z-index: 2;
}
.ux-search-clear:hover {
    background: var(--ux-surface-alt);
    color: var(--ux-accent);
}
.ux-search-form .ux-btn-primary {
    height: 42px;
    flex: 0 0 auto;
    white-space: nowrap;
}

@media (max-width: 600px) {
    .ux-search-form { flex-wrap: wrap; }
    .ux-search-form .ux-btn-primary { width: 100%; justify-content: center; }
}

.ux-search-query-tag {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 6px 14px;
    background: var(--ux-surface);
    border: 1px dashed var(--ux-border);
    border-radius: 8px;
    color: var(--ux-text-muted);
    font-size: 12.5px;
    align-self: flex-start;
}
.ux-search-query-tag i { color: var(--ux-accent); font-size: 11px; }
.ux-search-query-tag strong { color: var(--ux-text); font-weight: 700; }

/* Cuerpo: lista de grupos */
.ux-search-body {
    padding: 18px 24px 22px;
    display: flex;
    flex-direction: column;
    gap: 22px;
}
.ux-search-group {
    display: flex;
    flex-direction: column;
    gap: 10px;
}
.ux-search-group-head {
    display: flex;
    align-items: center;
    gap: 8px;
    color: var(--ux-primary);
    font-size: 12px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.6px;
    padding-bottom: 6px;
    border-bottom: 2px solid color-mix(in srgb, var(--ux-primary) 25%, transparent);
}
.ux-search-group-head > i { color: var(--ux-accent); font-size: 11px; }
.ux-search-group-count {
    margin-left: auto;
    background: var(--ux-primary);
    color: #fff;
    font-size: 10.5px;
    font-weight: 700;
    padding: 2px 9px;
    border-radius: 999px;
    text-transform: none;
    letter-spacing: 0;
    min-width: 24px;
    text-align: center;
}

/* Card de resultado individual */
.ux-search-result {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 14px 16px;
    background: var(--ux-surface);
    border: 1px solid var(--ux-border);
    border-radius: 12px;
    color: var(--ux-text);
    text-decoration: none !important;
    transition: border-color .15s, transform .15s, box-shadow .15s, background .15s;
}
.ux-search-result:hover {
    border-color: var(--ux-primary);
    background: color-mix(in srgb, var(--ux-primary) 4%, var(--ux-surface));
    transform: translateY(-1px);
    box-shadow: 0 4px 14px var(--ux-shadow);
    color: var(--ux-text);
}
.ux-search-result-icon {
    flex-shrink: 0;
    width: 42px;
    height: 42px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #fff;
    font-size: 16px;
    box-shadow: 0 2px 6px var(--ux-shadow);
    transition: transform .25s ease;
}
.ux-search-result:hover .ux-search-result-icon { transform: scale(1.06) rotate(-4deg); }

.ux-search-icon-ticket-exact { background: linear-gradient(135deg, var(--ux-accent) 0%, var(--ux-accent-dark) 100%); }
.ux-search-icon-ticket       { background: linear-gradient(135deg, var(--ux-primary) 0%, var(--ux-primary-dark) 100%); }
.ux-search-icon-section      { background: linear-gradient(135deg, #8b5cf6 0%, #6d3ed8 100%); }

.ux-search-result-body {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 4px;
}
.ux-search-result-kind {
    font-size: 10.5px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--ux-accent);
    font-weight: 700;
}
.ux-search-result-title {
    color: var(--ux-text);
    font-size: 14.5px;
    font-weight: 600;
    line-height: 1.35;
}
.ux-search-result-title code {
    background: var(--ux-surface-alt);
    border: 1px solid var(--ux-border);
    color: var(--ux-text);
    font-size: 12.5px;
    padding: 2px 8px;
    border-radius: 4px;
    font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
    letter-spacing: 0.3px;
}
.ux-search-result-snippet {
    color: var(--ux-text-muted);
    font-size: 13px;
    line-height: 1.5;
    word-break: break-word;
}
.ux-search-result-meta {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
    color: var(--ux-text-subtle);
    font-size: 11.5px;
    margin-top: 2px;
}
.ux-search-result-meta i { color: var(--ux-accent); font-size: 10px; }
.ux-search-meta-sep { opacity: 0.5; }
.ux-search-result-arrow {
    flex-shrink: 0;
    color: var(--ux-text-subtle);
    font-size: 14px;
    transition: transform .15s, color .15s;
}
.ux-search-result:hover .ux-search-result-arrow {
    color: var(--ux-primary);
    transform: translateX(4px);
}

/* Highlight del término dentro del snippet */
.ux-search-mark {
    background: color-mix(in srgb, var(--ux-accent) 30%, transparent);
    color: var(--ux-text);
    padding: 1px 4px;
    border-radius: 3px;
    font-weight: 700;
    box-shadow: 0 0 0 1px color-mix(in srgb, var(--ux-accent) 50%, transparent);
}
[data-theme="dark"] .ux-search-mark {
    background: color-mix(in srgb, var(--ux-accent) 35%, transparent);
}

/* Sugerencias en empty state */
.ux-search-suggestions {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    margin-top: 10px;
    justify-content: center;
}
.ux-search-suggestion-label {
    color: var(--ux-text-subtle);
    font-size: 12px;
    margin-right: 4px;
}
.ux-search-chip {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 5px 14px;
    background: var(--ux-primary-soft);
    border: 1px solid color-mix(in srgb, var(--ux-primary) 35%, transparent);
    color: var(--ux-primary);
    border-radius: 999px;
    font-size: 12px;
    font-weight: 600;
    text-decoration: none !important;
    transition: background .15s, transform .1s;
}
.ux-search-chip::before {
    content: '\f002'; /* fa-magnifying-glass */
    font-family: "Font Awesome 6 Free", "Font Awesome 5 Free";
    font-weight: 900;
    font-size: 10px;
    opacity: 0.7;
}
.ux-search-chip:hover {
    background: color-mix(in srgb, var(--ux-primary) 18%, transparent);
    color: var(--ux-primary-dark);
    transform: translateY(-1px);
}

/* Responsive */
@media (max-width: 600px) {
    .ux-search-query-bar { padding: 14px 16px; }
    .ux-search-body { padding: 14px 16px 18px; }
    .ux-search-result { padding: 12px 14px; gap: 10px; }
    .ux-search-result-icon { width: 36px; height: 36px; font-size: 14px; }
}

/* ============================================================== */
/* Topbar — Navbar superior (rediseño UX, responsive completo)     */
/* ============================================================== */

.ux-topbar {
    display: flex !important;
    align-items: center;
    gap: 12px;
    padding: 8px 18px !important;
    background: var(--ux-surface) !important;
    border-bottom: 1px solid var(--ux-border);
    box-shadow: 0 2px 10px var(--ux-shadow) !important;
    margin-bottom: 1.5rem !important;
    min-height: 64px;
}

/* Brand (logo + admin pill) */
.ux-topbar-brand {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    flex-shrink: 0;
    padding: 4px 6px;
    border-radius: 10px;
    text-decoration: none !important;
    transition: background .15s ease;
}
.ux-topbar-brand:hover { background: var(--ux-surface-alt); }
.ux-topbar-logo {
    height: 42px;
    width: auto;
    display: block;
    border-radius: 6px;
}
.ux-topbar-admin-pill {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 3px 9px;
    background: var(--ux-accent);
    color: #fff;
    border-radius: 999px;
    font-size: 10.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.4px;
}
.ux-topbar-admin-pill i { font-size: 9px; }

/* ===== Search (desktop) ===== */
.ux-topbar-search {
    flex: 1 1 auto;
    max-width: 480px;
    margin: 0 16px;
    position: relative;
    display: flex;
    align-items: center;
}
.ux-topbar-search-icon {
    position: absolute;
    left: 14px;
    color: var(--ux-text-subtle);
    font-size: 13px;
    pointer-events: none;
    z-index: 2;
    transition: color .15s ease;
}
.ux-topbar-search input {
    width: 100%;
    height: 40px;
    padding: 8px 44px 8px 38px;
    border: 1px solid var(--ux-border);
    background: var(--ux-surface-alt);
    color: var(--ux-text);
    border-radius: 999px;
    font-size: 13.5px;
    transition: border-color .15s, background .15s, box-shadow .15s;
}
.ux-topbar-search input::placeholder { color: var(--ux-text-subtle); }
.ux-topbar-search input:focus {
    outline: none;
    border-color: var(--ux-primary);
    background: var(--ux-surface);
    box-shadow: 0 0 0 3px var(--ux-primary-ring);
}
.ux-topbar-search input:focus ~ .ux-topbar-search-icon,
.ux-topbar-search:focus-within .ux-topbar-search-icon {
    color: var(--ux-accent);
}
.ux-topbar-search-submit {
    position: absolute;
    right: 4px;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--ux-primary);
    color: #fff;
    border: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 11px;
    cursor: pointer;
    transition: background .15s, transform .1s, box-shadow .2s;
    z-index: 2;
}
.ux-topbar-search-submit:hover {
    background: var(--ux-primary-dark);
    transform: scale(1.05);
    box-shadow: 0 3px 8px var(--ux-primary-ring);
}

/* Search mobile dropdown */
.ux-topbar-search-mobile {
    background: var(--ux-surface) !important;
    border: 1px solid var(--ux-border) !important;
    border-radius: 12px !important;
    padding: 10px !important;
    min-width: 280px;
    box-shadow: 0 8px 24px var(--ux-shadow) !important;
}
.ux-topbar-search-mobile form { position: relative; display: flex; }
.ux-topbar-search-mobile input {
    width: 100%;
    height: 38px;
    padding: 8px 42px 8px 36px;
    border: 1px solid var(--ux-border);
    background: var(--ux-surface-alt);
    color: var(--ux-text);
    border-radius: 999px;
    font-size: 13px;
}
.ux-topbar-search-mobile input:focus {
    outline: none;
    border-color: var(--ux-primary);
    box-shadow: 0 0 0 3px var(--ux-primary-ring);
}
.ux-topbar-search-mobile .ux-topbar-search-icon { left: 12px; }
.ux-topbar-search-mobile .ux-topbar-search-submit { right: 4px; }

/* ===== Acciones (bell, theme, user) ===== */
.ux-topbar-actions {
    display: flex;
    align-items: center;
    gap: 4px;
    margin: 0;
    padding: 0;
    list-style: none;
    flex-shrink: 0;
}
.ux-topbar-action {
    display: flex;
    align-items: center;
    margin: 0 !important;
    padding: 0 !important;
}

/* Botón redondo de icono (search mobile, bell) */
.ux-topbar-icon-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    color: var(--ux-text-muted) !important;
    background: transparent;
    text-decoration: none !important;
    transition: background .15s ease, color .15s ease;
    position: relative;
}
.ux-topbar-icon-btn:hover,
.ux-topbar-icon-btn:focus {
    background: var(--ux-surface-alt);
    color: var(--ux-primary) !important;
}
.ux-topbar-icon-btn i { font-size: 16px; }
.ux-topbar-icon-btn::after { display: none !important; }

/* La campanita usa el icon-btn de base */
.ux-bell-toggle.ux-topbar-icon-btn { padding: 0 !important; }

/* ===== Toggle de tema en topbar ===== */
.ux-topbar-theme {
    padding: 0 6px !important;
    align-self: center;
}

/* ===== User toggle ===== */
.ux-user-toggle {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding: 4px 12px 4px 4px;
    border-radius: 999px;
    background: transparent;
    color: var(--ux-text);
    text-decoration: none !important;
    transition: background .15s ease;
    cursor: pointer;
}
.ux-user-toggle:hover {
    background: var(--ux-surface-alt);
    color: var(--ux-text);
}
.ux-user-toggle::after { display: none !important; }
.ux-user-avatar {
    width: 36px;
    height: 36px;
    border-radius: 50%;
    object-fit: cover;
    border: 2px solid var(--ux-border);
    box-shadow: 0 2px 6px var(--ux-shadow);
    display: block;
    background: var(--ux-surface-alt);
    transition: border-color .15s ease;
}
.ux-user-toggle:hover .ux-user-avatar { border-color: var(--ux-primary); }
.ux-user-avatar-admin { border-color: var(--ux-accent); }
.ux-user-toggle:hover .ux-user-avatar-admin { border-color: var(--ux-accent-dark); }
.ux-user-name {
    font-size: 13.5px;
    font-weight: 600;
    color: var(--ux-text);
    max-width: 140px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.ux-user-chev {
    font-size: 10px;
    color: var(--ux-text-subtle);
    transition: transform .2s ease, color .15s ease;
}
.ux-user-li.show .ux-user-chev,
.ux-user-toggle[aria-expanded="true"] .ux-user-chev {
    transform: rotate(180deg);
    color: var(--ux-primary);
}

/* ===== User menu (dropdown) ===== */
.ux-user-menu {
    width: 280px;
    padding: 0 !important;
    border: 1px solid var(--ux-border) !important;
    border-radius: 14px !important;
    background: var(--ux-surface) !important;
    box-shadow: 0 16px 40px var(--ux-shadow) !important;
    overflow: hidden;
    margin-top: 8px !important;
    animation: ux-fade-slide-in .18s ease both;
}
.ux-user-menu-head {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 16px;
    background: linear-gradient(135deg, var(--ux-primary-soft) 0%, var(--ux-surface-alt) 100%);
    border-bottom: 1px solid var(--ux-border);
}
.ux-user-menu-head-admin {
    background: linear-gradient(135deg,
        color-mix(in srgb, var(--ux-accent) 16%, var(--ux-surface)) 0%,
        var(--ux-surface-alt) 100%);
}
.ux-user-menu-avatar {
    width: 44px;
    height: 44px;
    border-radius: 50%;
    object-fit: cover;
    border: 2px solid var(--ux-surface);
    box-shadow: 0 2px 6px var(--ux-shadow);
    flex-shrink: 0;
    background: var(--ux-surface-alt);
}
.ux-user-menu-info { min-width: 0; flex: 1; }
.ux-user-menu-name {
    color: var(--ux-text);
    font-weight: 700;
    font-size: 14px;
    line-height: 1.2;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.ux-user-menu-email {
    color: var(--ux-text-muted);
    font-size: 11.5px;
    margin-top: 2px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.ux-user-menu-role {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    margin-top: 4px;
    padding: 2px 8px;
    border-radius: 999px;
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}
.ux-user-menu-role i { font-size: 9px; }
.ux-user-menu-role-user {
    background: var(--ux-primary-soft);
    color: var(--ux-primary);
    border: 1px solid color-mix(in srgb, var(--ux-primary) 35%, transparent);
}
.ux-user-menu-role-admin {
    background: color-mix(in srgb, var(--ux-accent) 14%, transparent);
    color: var(--ux-accent);
    border: 1px solid color-mix(in srgb, var(--ux-accent) 40%, transparent);
}

.ux-user-menu-section {
    padding: 10px 16px 4px;
    color: var(--ux-text-subtle);
    font-size: 10.5px;
    text-transform: uppercase;
    letter-spacing: 0.6px;
    font-weight: 700;
}
.ux-user-menu-divider {
    height: 1px;
    background: var(--ux-border);
    margin: 6px 0;
}
.ux-user-menu-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 9px 16px;
    color: var(--ux-text) !important;
    font-size: 13px;
    text-decoration: none !important;
    transition: background .12s ease, color .12s ease, padding-left .15s ease;
}
.ux-user-menu-item:hover {
    background: var(--ux-primary-soft);
    color: var(--ux-primary) !important;
    padding-left: 20px;
}
.ux-user-menu-icon {
    width: 20px;
    text-align: center;
    color: var(--ux-text-subtle);
    font-size: 13px;
    transition: color .12s ease;
}
.ux-user-menu-item:hover .ux-user-menu-icon { color: var(--ux-primary); }

.ux-user-menu-item-danger:hover {
    background: color-mix(in srgb, #b63434 8%, transparent);
    color: #b63434 !important;
}
.ux-user-menu-item-danger:hover .ux-user-menu-icon { color: #b63434; }

/* ============================================================== */
/* Responsive — móvil (≤ 768px)                                   */
/* ============================================================== */

/* Search inline desaparece en móvil; aparece el icono-dropdown */
.ux-topbar-mobile-only { display: none !important; }

@media (max-width: 768px) {
    .ux-topbar {
        padding: 6px 10px !important;
        gap: 6px;
    }
    .ux-topbar-search { display: none; }
    .ux-topbar-mobile-only { display: flex !important; }
    .ux-topbar-logo { height: 36px; }
    .ux-topbar-admin-pill {
        font-size: 9.5px;
        padding: 2px 7px;
    }
    .ux-topbar-actions { gap: 2px; }
    .ux-topbar-icon-btn { width: 38px; height: 38px; }
    .ux-topbar-icon-btn i { font-size: 15px; }
    .ux-user-name, .ux-user-chev { display: none !important; }
    .ux-user-toggle { padding: 4px; }
    .ux-user-avatar { width: 34px; height: 34px; }
    .ux-bell-menu, .ux-user-menu {
        width: calc(100vw - 16px) !important;
        max-width: 360px;
    }
}

@media (max-width: 480px) {
    .ux-topbar-admin-pill { display: none; }
    .ux-topbar-logo { height: 32px; }
    .ux-topbar-icon-btn { width: 36px; height: 36px; }
    .ux-topbar-search-mobile {
        margin-right: 8px;
        margin-left: 8px;
    }
}

/* Quita los estilos de Bootstrap que no queremos */
.ux-topbar .navbar-nav,
.ux-topbar .nav-item { padding: 0 !important; }
.ux-topbar .topbar-divider { display: none !important; }

/* Animación reutilizable para los dropdowns del navbar */
@keyframes ux-fade-slide-in {
    from { opacity: 0; transform: translateY(-6px); }
    to   { opacity: 1; transform: translateY(0); }
}

/* ============================================================== */
/* /inplan — Resumen de cálculo (Neto + IVA + Total)               */
/* ============================================================== */

.ux-calc-summary {
    margin-top: 10px;
    background: var(--ux-surface-alt);
    border: 1px solid var(--ux-border);
    border-radius: 12px;
    overflow: hidden;
    transition: border-color .2s ease, box-shadow .2s ease;
}
.ux-calc-summary-active {
    border-color: var(--ux-primary);
    box-shadow: 0 4px 14px var(--ux-primary-ring);
}

/* Head con label y hint */
.ux-calc-summary-head {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 10px 16px;
    background: linear-gradient(90deg, var(--ux-primary-soft) 0%, var(--ux-surface-alt) 100%);
    border-bottom: 1px solid var(--ux-border);
    color: var(--ux-primary);
    font-size: 11.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.6px;
}
.ux-calc-summary-head > i { color: var(--ux-accent); font-size: 12px; }
.ux-calc-summary-hint {
    margin-left: auto;
    color: var(--ux-text-subtle);
    font-size: 10.5px;
    font-weight: 500;
    text-transform: none;
    letter-spacing: 0;
}

/* Body como tabla */
.ux-calc-summary-body {
    padding: 8px 0;
    background: var(--ux-surface);
}

/* Cada fila (Neto / IVA / Total) */
.ux-calc-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    padding: 10px 18px;
    border-bottom: 1px dashed var(--ux-border);
}
.ux-calc-row:last-child { border-bottom: none; }

.ux-calc-label {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    color: var(--ux-text-muted);
    font-size: 13px;
    font-weight: 600;
}
.ux-calc-label > i {
    color: var(--ux-accent);
    font-size: 12px;
    width: 18px;
    text-align: center;
}
.ux-calc-meta {
    color: var(--ux-text-subtle);
    font-size: 11px;
    font-weight: 500;
    margin-left: 2px;
}

.ux-calc-value {
    color: var(--ux-text);
    font-size: 15px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
    letter-spacing: -0.3px;
}

/* Fila Total — acento */
.ux-calc-total {
    background: linear-gradient(90deg,
        color-mix(in srgb, var(--ux-accent) 8%, transparent) 0%,
        color-mix(in srgb, var(--ux-accent) 4%, transparent) 100%);
    padding: 14px 18px;
    border-top: 2px solid color-mix(in srgb, var(--ux-accent) 35%, transparent);
    border-bottom: none !important;
}
.ux-calc-total .ux-calc-label {
    color: var(--ux-text);
    font-size: 13.5px;
    font-weight: 700;
}
.ux-calc-total .ux-calc-label > i {
    color: var(--ux-accent);
    font-size: 14px;
}
.ux-calc-total .ux-calc-value {
    color: var(--ux-accent);
    font-size: 22px;
    font-weight: 800;
    letter-spacing: -0.5px;
}

/* ============================================================== */
/* Auxiliares de /inplan                                           */
/* ============================================================== */

.ux-form-section-title {
    display: flex;
    align-items: center;
    gap: 8px;
    color: var(--ux-primary);
    font-size: 13px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.6px;
    margin: 6px 0 -2px;
    padding-bottom: 6px;
    border-bottom: 2px solid color-mix(in srgb, var(--ux-primary) 22%, transparent);
}
.ux-form-section-title > i { color: var(--ux-accent); font-size: 12px; }

.ux-readonly-num {
    flex: 0 0 auto;
    width: 60px;
    background: var(--ux-surface);
    border: 1px solid var(--ux-border);
    border-radius: 8px;
    color: var(--ux-primary);
    font-weight: 700;
    text-align: center;
    padding: 4px;
    font-variant-numeric: tabular-nums;
}
.ux-readonly-meta {
    color: var(--ux-text-muted);
    font-size: 12.5px;
    flex: 1;
    min-width: 0;
}

.ux-form-pay-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 18px;
    margin-top: 10px;
}
.ux-pay-logo {
    display: flex;
    justify-content: center;
    padding: 12px;
    background: var(--ux-surface-alt);
    border-bottom: 1px solid var(--ux-border);
}
.ux-pay-logo img { max-height: 64px; height: auto; }

.ux-empty-actions {
    display: inline-flex;
    gap: 12px;
    flex-wrap: wrap;
    justify-content: center;
}

@media (max-width: 768px) {
    .ux-form-pay-grid { grid-template-columns: 1fr; }
    .ux-calc-summary-hint { display: none; }
    .ux-calc-total .ux-calc-value { font-size: 18px; }
    .ux-readonly-box { flex-wrap: wrap; }
}

/* ============================================================== */
/* Footer global del sitio                                         */
/* ============================================================== */

/* Override de la regla agresiva en css.css que decía:
   footer { position: absolute; bottom: 0; height: 40px; }
   Ahora el footer es estático y se acomoda al final del flujo. */
footer.ux-footer {
    position: static !important;
    bottom: auto !important;
    height: auto !important;
    width: 100% !important;
    margin-top: 60px;
    background: linear-gradient(180deg,
        var(--ux-surface) 0%,
        var(--ux-surface-alt) 100%);
    border-top: 1px solid var(--ux-border);
    color: var(--ux-text-muted);
    font-size: 13.5px;
    box-shadow: 0 -4px 20px var(--ux-shadow);
}
[data-theme="dark"] footer.ux-footer {
    background: linear-gradient(180deg,
        var(--ux-surface) 0%,
        var(--ux-bg) 100%);
}

/* Container con grid 2 columnas: brand + 4 cols de links */
.ux-footer-container {
    max-width: 1280px;
    margin: 0 auto;
    padding: 40px 28px 28px;
    display: grid;
    grid-template-columns: minmax(220px, 1fr) 2.4fr;
    gap: 40px;
    align-items: start;
}

/* Brand */
.ux-footer-brand {
    display: flex;
    flex-direction: column;
    gap: 14px;
}
.ux-footer-logo-link {
    display: inline-block;
    width: fit-content;
    transition: transform .2s ease;
}
.ux-footer-logo-link:hover { transform: translateY(-2px); }
.ux-footer-logo {
    height: 56px;
    width: auto;
    border-radius: 8px;
    background: var(--ux-surface);
    padding: 4px 8px;
    box-shadow: 0 2px 8px var(--ux-shadow);
}
.ux-footer-tagline {
    color: var(--ux-text-muted);
    font-size: 13px;
    line-height: 1.55;
    margin: 0;
    max-width: 320px;
}
.ux-footer-tagline strong {
    color: var(--ux-primary);
    font-weight: 700;
}

/* 4 columnas de links */
.ux-footer-cols {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 28px;
}
.ux-footer-col {
    display: flex;
    flex-direction: column;
    gap: 12px;
}
.ux-footer-col-title {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 4px;
    color: var(--ux-primary);
    font-size: 12px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.7px;
    padding-bottom: 8px;
    border-bottom: 2px solid color-mix(in srgb, var(--ux-accent) 35%, transparent);
}
.ux-footer-col-title i {
    color: var(--ux-accent);
    font-size: 12px;
}
.ux-footer-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.ux-footer-list li { line-height: 1; }
.ux-footer-list a {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    color: var(--ux-text-muted);
    text-decoration: none;
    font-size: 13px;
    padding: 4px 6px;
    border-radius: 6px;
    transition: color .15s ease, background .15s ease, transform .15s ease;
}
.ux-footer-list a > i {
    color: var(--ux-text-subtle);
    font-size: 11px;
    transition: color .15s ease, transform .15s ease;
}
.ux-footer-list a:hover {
    color: var(--ux-primary);
    background: var(--ux-primary-soft);
    transform: translateX(3px);
}
.ux-footer-list a:hover > i {
    color: var(--ux-accent);
    transform: translateX(2px);
}

/* Bottom bar (copyright + términos) */
.ux-footer-bottom {
    border-top: 1px solid var(--ux-border);
    background: color-mix(in srgb, var(--ux-primary) 4%, var(--ux-surface-alt));
}
[data-theme="dark"] .ux-footer-bottom {
    background: color-mix(in srgb, var(--ux-primary) 8%, var(--ux-bg));
}
.ux-footer-bottom-inner {
    max-width: 1280px;
    margin: 0 auto;
    padding: 14px 28px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 14px;
    flex-wrap: wrap;
}
.ux-footer-copy {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    color: var(--ux-text-subtle);
    font-size: 12.5px;
}
.ux-footer-copy a {
    color: var(--ux-primary);
    font-weight: 600;
    text-decoration: none;
    transition: color .15s ease;
}
.ux-footer-copy a:hover { color: var(--ux-accent); }
.ux-footer-copy > i { font-size: 11px; opacity: 0.7; }
.ux-footer-sep { color: var(--ux-text-subtle); opacity: 0.5; }
.ux-footer-terms {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    color: var(--ux-text-muted);
    font-size: 12.5px;
    text-decoration: none;
    padding: 6px 12px;
    border-radius: 999px;
    border: 1px solid var(--ux-border);
    background: var(--ux-surface);
    transition: color .15s ease, border-color .15s ease, background .15s ease;
}
.ux-footer-terms i { font-size: 11px; color: var(--ux-accent); }
.ux-footer-terms:hover {
    color: var(--ux-primary);
    border-color: var(--ux-primary);
    background: var(--ux-primary-soft);
}

/* Responsive */
@media (max-width: 992px) {
    .ux-footer-container {
        grid-template-columns: 1fr;
        gap: 30px;
        padding: 32px 22px 22px;
    }
    .ux-footer-cols { gap: 22px; }
}
@media (max-width: 600px) {
    .ux-footer-container { padding: 28px 18px 20px; }
    .ux-footer-cols {
        grid-template-columns: repeat(2, 1fr);
        gap: 24px;
    }
    .ux-footer-bottom-inner {
        padding: 12px 18px;
        flex-direction: column;
        text-align: center;
    }
    .ux-footer-tagline { max-width: 100%; }
}
@media (max-width: 380px) {
    .ux-footer-cols { grid-template-columns: 1fr; }
}

/* ============================================================== */
/* SweetAlert2 — Override con paleta UX                            */
/* ============================================================== */

/* Backdrop con tinte de la paleta */
.swal2-container.swal2-backdrop-show {
    background: rgba(37, 53, 72, 0.55) !important;
    backdrop-filter: blur(2px);
    -webkit-backdrop-filter: blur(2px);
}
[data-theme="dark"] .swal2-container.swal2-backdrop-show {
    background: rgba(0, 0, 0, 0.65) !important;
}

/* Popup */
.swal2-popup,
.ux-swal-popup {
    background: var(--ux-surface) !important;
    color: var(--ux-text) !important;
    border: 1px solid var(--ux-border) !important;
    border-radius: 16px !important;
    box-shadow: 0 24px 60px var(--ux-shadow) !important;
    padding: 24px 26px 22px !important;
    font-family: 'Inter', 'Nunito', 'Segoe UI', Arial, sans-serif !important;
}

/* Title */
.swal2-title,
.ux-swal-title {
    color: var(--ux-primary) !important;
    font-size: 19px !important;
    font-weight: 700 !important;
    line-height: 1.3 !important;
    padding: 8px 0 4px !important;
}

/* Texto / html container */
.swal2-html-container,
.ux-swal-html {
    color: var(--ux-text-muted) !important;
    font-size: 14px !important;
    line-height: 1.55 !important;
    margin: 8px 0 !important;
}

/* Iconos — colorearlos con la paleta */
.swal2-icon { border-color: currentColor !important; margin-top: 8px !important; }

/* Warning */
.swal2-icon.swal2-warning {
    color: var(--ux-accent) !important;
    border-color: var(--ux-accent) !important;
}
.swal2-icon.swal2-warning .swal2-icon-content { color: var(--ux-accent) !important; }

/* Info */
.swal2-icon.swal2-info {
    color: var(--ux-primary) !important;
    border-color: var(--ux-primary) !important;
}
.swal2-icon.swal2-info .swal2-icon-content { color: var(--ux-primary) !important; }

/* Question */
.swal2-icon.swal2-question {
    color: var(--ux-primary) !important;
    border-color: var(--ux-primary) !important;
}
.swal2-icon.swal2-question .swal2-icon-content { color: var(--ux-primary) !important; }

/* Success — verde de la paleta */
.swal2-icon.swal2-success [class^="swal2-success-line"] { background-color: #28b464 !important; }
.swal2-icon.swal2-success .swal2-success-ring { border-color: color-mix(in srgb, #28b464 35%, transparent) !important; }
.swal2-icon.swal2-success [class^="swal2-success-circular-line"] { background-color: var(--ux-surface) !important; }
.swal2-icon.swal2-success .swal2-success-fix { background-color: var(--ux-surface) !important; }

/* Error — rojo soft */
.swal2-icon.swal2-error {
    color: #b63434 !important;
    border-color: #b63434 !important;
}
.swal2-icon.swal2-error .swal2-x-mark-line-left,
.swal2-icon.swal2-error .swal2-x-mark-line-right { background-color: #b63434 !important; }
[data-theme="dark"] .swal2-icon.swal2-error {
    color: #f5a5a5 !important;
    border-color: #f5a5a5 !important;
}
[data-theme="dark"] .swal2-icon.swal2-error .swal2-x-mark-line-left,
[data-theme="dark"] .swal2-icon.swal2-error .swal2-x-mark-line-right { background-color: #f5a5a5 !important; }

/* ====== Botones ====== */

/* Wrapper de acciones */
.swal2-actions,
.ux-swal-actions {
    gap: 10px !important;
    margin-top: 18px !important;
}

/* Confirm — celeste primary */
.swal2-styled.swal2-confirm,
.ux-swal-btn-confirm {
    background: var(--ux-primary) !important;
    color: #fff !important;
    border: 1px solid var(--ux-primary) !important;
    border-radius: 8px !important;
    padding: 9px 22px !important;
    font-weight: 600 !important;
    font-size: 13.5px !important;
    box-shadow: 0 2px 6px var(--ux-primary-ring) !important;
    transition: background .15s, box-shadow .2s, transform .1s !important;
}
.swal2-styled.swal2-confirm:hover,
.ux-swal-btn-confirm:hover {
    background: var(--ux-primary-dark) !important;
    box-shadow: 0 4px 14px var(--ux-primary-ring) !important;
    transform: translateY(-1px);
}
.swal2-styled.swal2-confirm:focus,
.ux-swal-btn-confirm:focus {
    box-shadow: 0 0 0 3px var(--ux-primary-ring) !important;
}

/* Cancel — ghost */
.swal2-styled.swal2-cancel,
.ux-swal-btn-cancel {
    background: transparent !important;
    color: var(--ux-text-muted) !important;
    border: 1px solid var(--ux-border) !important;
    border-radius: 8px !important;
    padding: 9px 18px !important;
    font-weight: 500 !important;
    font-size: 13.5px !important;
    transition: background .15s, color .15s, border-color .15s !important;
}
.swal2-styled.swal2-cancel:hover,
.ux-swal-btn-cancel:hover {
    background: var(--ux-surface-alt) !important;
    color: var(--ux-text) !important;
    border-color: var(--ux-border-strong) !important;
}
.swal2-styled.swal2-cancel:focus,
.ux-swal-btn-cancel:focus {
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--ux-text-muted) 20%, transparent) !important;
}

/* Variante danger (eliminar) */
.swal2-styled.swal2-confirm.ux-swal-btn-danger,
.ux-swal-btn-danger {
    background: #b63434 !important;
    border-color: #b63434 !important;
    color: #fff !important;
    box-shadow: 0 2px 6px rgba(182, 52, 52, 0.3) !important;
}
.swal2-styled.swal2-confirm.ux-swal-btn-danger:hover,
.ux-swal-btn-danger:hover {
    background: #962a2a !important;
    border-color: #962a2a !important;
    box-shadow: 0 4px 14px rgba(182, 52, 52, 0.4) !important;
}
.swal2-styled.swal2-confirm.ux-swal-btn-danger:focus,
.ux-swal-btn-danger:focus {
    box-shadow: 0 0 0 3px rgba(182, 52, 52, 0.25) !important;
}
[data-theme="dark"] .ux-swal-btn-danger { background: #c14848 !important; border-color: #c14848 !important; }
[data-theme="dark"] .ux-swal-btn-danger:hover { background: #a83838 !important; }

/* Deny */
.swal2-styled.swal2-deny,
.ux-swal-btn-deny {
    background: var(--ux-accent) !important;
    color: #fff !important;
    border: 1px solid var(--ux-accent) !important;
    border-radius: 8px !important;
    padding: 9px 18px !important;
    font-weight: 600 !important;
}

/* Close button */
.swal2-close {
    color: var(--ux-text-muted) !important;
    background: var(--ux-surface-alt) !important;
    border-radius: 50% !important;
    width: 32px !important;
    height: 32px !important;
    line-height: 32px !important;
    transition: background .15s, color .15s !important;
}
.swal2-close:hover {
    background: var(--ux-primary-soft) !important;
    color: var(--ux-primary) !important;
    transform: none !important;
}

/* ====== Inputs dentro del popup ====== */

.swal2-input,
.swal2-textarea,
.swal2-select,
.ux-swal-input {
    background: var(--ux-surface-alt) !important;
    border: 1px solid var(--ux-border) !important;
    color: var(--ux-text) !important;
    border-radius: 8px !important;
    padding: 10px 14px !important;
    font-size: 14px !important;
    box-shadow: none !important;
    transition: border-color .15s, box-shadow .15s !important;
}
.swal2-input:focus,
.swal2-textarea:focus,
.swal2-select:focus,
.ux-swal-input:focus {
    outline: none !important;
    border-color: var(--ux-primary) !important;
    box-shadow: 0 0 0 3px var(--ux-primary-ring) !important;
}
.swal2-input::placeholder,
.swal2-textarea::placeholder { color: var(--ux-text-subtle) !important; }

/* Validation message */
.swal2-validation-message,
.ux-swal-validation {
    background: color-mix(in srgb, #b63434 8%, transparent) !important;
    color: #b63434 !important;
    border-radius: 8px !important;
    margin: 10px 0 0 !important;
    padding: 8px 12px !important;
    font-size: 12.5px !important;
}
[data-theme="dark"] .swal2-validation-message,
[data-theme="dark"] .ux-swal-validation { color: #f5a5a5 !important; }

/* Loader */
.swal2-loader { border-color: var(--ux-primary) transparent var(--ux-primary) transparent !important; }

/* Progress bar (timer) */
.swal2-timer-progress-bar { background: var(--ux-accent) !important; }

/* ====== Toast (top-end notification) ====== */

.swal2-toast.ux-swal-toast {
    background: var(--ux-surface) !important;
    border: 1px solid var(--ux-border) !important;
    border-left: 4px solid var(--ux-primary) !important;
    border-radius: 12px !important;
    box-shadow: 0 12px 32px var(--ux-shadow) !important;
    padding: 12px 16px !important;
}
.swal2-toast.ux-swal-toast .swal2-title {
    color: var(--ux-text) !important;
    font-size: 13.5px !important;
    font-weight: 600 !important;
    padding: 0 !important;
}
.swal2-toast.ux-swal-toast .swal2-icon {
    width: 24px !important;
    height: 24px !important;
    margin: 0 10px 0 0 !important;
    border-width: 2px !important;
}

/* Toast variantes según icon */
.swal2-toast.ux-swal-toast.swal2-icon-success { border-left-color: #28b464 !important; }
.swal2-toast.ux-swal-toast.swal2-icon-error   { border-left-color: #b63434 !important; }
.swal2-toast.ux-swal-toast.swal2-icon-warning { border-left-color: var(--ux-accent) !important; }
.swal2-toast.ux-swal-toast.swal2-icon-info    { border-left-color: var(--ux-primary) !important; }

/* Animaciones suaves */
.swal2-show { animation: ux-swal-pop .25s cubic-bezier(.4, 1.4, .5, 1) !important; }
.swal2-hide { animation: ux-swal-out .15s ease forwards !important; }
@keyframes ux-swal-pop {
    0%   { opacity: 0; transform: scale(.92); }
    100% { opacity: 1; transform: scale(1); }
}
@keyframes ux-swal-out {
    0%   { opacity: 1; transform: scale(1); }
    100% { opacity: 0; transform: scale(.96); }
}

/* Mobile: ajustes de espaciado */
@media (max-width: 480px) {
    .swal2-popup,
    .ux-swal-popup { padding: 20px 18px 18px !important; }
    .swal2-title,
    .ux-swal-title { font-size: 17px !important; }
    .swal2-actions,
    .ux-swal-actions { flex-direction: column-reverse; width: 100%; }
    .swal2-actions > button,
    .ux-swal-actions > button { width: 100%; justify-content: center; }
}

/* ============================================================== */
/* Zona de peligro (eliminar plan, etc.)                           */
/* ============================================================== */

.ux-form-danger-zone {
    margin-top: 24px;
    padding: 22px 24px;
    background: color-mix(in srgb, #b63434 5%, var(--ux-surface));
    border: 1px solid color-mix(in srgb, #b63434 35%, transparent);
    border-left: 4px solid #b63434;
    border-radius: 12px;
    position: relative;
    overflow: hidden;
}
[data-theme="dark"] .ux-form-danger-zone {
    background: color-mix(in srgb, #b63434 12%, var(--ux-surface));
    border-color: color-mix(in srgb, #f5a5a5 40%, transparent);
    border-left-color: #f5a5a5;
}
/* Tira sutil al fondo para reforzar la advertencia visual */
.ux-form-danger-zone::before {
    content: '';
    position: absolute;
    inset: 0;
    background: repeating-linear-gradient(
        45deg,
        transparent 0 14px,
        color-mix(in srgb, #b63434 5%, transparent) 14px 28px
    );
    pointer-events: none;
    opacity: 0.5;
}
.ux-form-danger-zone > * { position: relative; z-index: 1; }

.ux-danger-title {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    color: #b63434;
    font-size: 14px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.6px;
    margin-bottom: 8px;
}
.ux-danger-title i { font-size: 14px; }
[data-theme="dark"] .ux-danger-title { color: #f5a5a5; }

.ux-danger-desc {
    color: var(--ux-text-muted);
    font-size: 13px;
    line-height: 1.55;
    margin: 0 0 14px;
    max-width: 620px;
}

/* Botón "Borrar plan permanentemente" */
.ux-btn-danger,
.btn.ux-btn-danger {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 10px 20px;
    background: #b63434 !important;
    color: #fff !important;
    border: 1px solid #b63434 !important;
    border-radius: 8px !important;
    font-size: 13.5px;
    font-weight: 600;
    text-decoration: none !important;
    box-shadow: 0 2px 6px rgba(182, 52, 52, 0.3);
    transition: background .15s, box-shadow .2s, transform .1s, border-color .15s;
    cursor: pointer;
}
.ux-btn-danger:hover,
.btn.ux-btn-danger:hover {
    background: #962a2a !important;
    border-color: #962a2a !important;
    box-shadow: 0 4px 14px rgba(182, 52, 52, 0.45);
    transform: translateY(-1px);
    color: #fff !important;
}
.ux-btn-danger:focus,
.btn.ux-btn-danger:focus {
    outline: none;
    box-shadow: 0 0 0 3px rgba(182, 52, 52, 0.25), 0 2px 6px rgba(182, 52, 52, 0.3);
}
.ux-btn-danger i { font-size: 12px; }
[data-theme="dark"] .ux-btn-danger,
[data-theme="dark"] .btn.ux-btn-danger {
    background: #c14848 !important;
    border-color: #c14848 !important;
}
[data-theme="dark"] .ux-btn-danger:hover,
[data-theme="dark"] .btn.ux-btn-danger:hover {
    background: #a83838 !important;
    border-color: #a83838 !important;
}

/* Responsive */
@media (max-width: 480px) {
    .ux-form-danger-zone { padding: 18px 16px; }
    .ux-btn-danger,
    .btn.ux-btn-danger { width: 100%; justify-content: center; }
}

/* ============================================================== */
/* Auth — Login / Recuperar contraseña / Register                  */
/* ============================================================== */

/* Override del navbar de layouts/app.blade.php para que no choque */
.navbar-laravel {
    background: var(--ux-surface) !important;
    border-bottom: 1px solid var(--ux-border) !important;
    box-shadow: 0 1px 4px var(--ux-shadow);
    padding: 8px 16px !important;
    position: relative;
    z-index: 5;
}
.navbar-laravel .navbar-brand {
    color: var(--ux-primary) !important;
    font-weight: 600;
}

/* Página de auth: fondo, layout flex */
.ux-auth-page {
    min-height: calc(100vh - 65px);
    background:
        radial-gradient(circle at 12% 18%, color-mix(in srgb, var(--ux-primary) 12%, transparent) 0%, transparent 45%),
        radial-gradient(circle at 88% 82%, color-mix(in srgb, var(--ux-accent) 10%, transparent) 0%, transparent 50%),
        var(--ux-bg);
    padding: 24px 16px 60px;
    display: flex;
    flex-direction: column;
    align-items: center;
}

/* Banner informativo, ahora dentro del flujo (NO fixed sobre el navbar) */
.ux-auth-banner {
    width: 100%;
    max-width: 920px;
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 18px;
    background: linear-gradient(90deg, var(--ux-primary-soft) 0%, var(--ux-surface-alt) 100%);
    border: 1px solid color-mix(in srgb, var(--ux-primary) 30%, transparent);
    border-radius: 12px;
    color: var(--ux-text);
    font-size: 13.5px;
    margin-bottom: 24px;
    box-shadow: 0 2px 10px var(--ux-shadow);
    animation: ux-fade-slide-in .3s ease both;
}
.ux-auth-banner-icon {
    flex-shrink: 0;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: var(--ux-primary);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
}
.ux-auth-banner-text {
    flex: 1;
    line-height: 1.5;
}
.ux-auth-banner-close {
    flex-shrink: 0;
    width: 30px;
    height: 30px;
    border-radius: 50%;
    background: transparent;
    border: none;
    color: var(--ux-text-muted);
    font-size: 13px;
    cursor: pointer;
    transition: background .15s, color .15s;
}
.ux-auth-banner-close:hover {
    background: var(--ux-surface-alt);
    color: var(--ux-text);
}

/* Wrapper centrado del formulario */
.ux-auth-wrapper {
    width: 100%;
    max-width: 440px;
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 18px;
}

/* Brand: logo + titulo + subtitulo */
.ux-auth-brand {
    text-align: center;
    margin-bottom: 4px;
}
.ux-auth-logo-wrap {
    width: 96px;
    height: 96px;
    margin: 0 auto 14px;
    border-radius: 24px;
    background: var(--ux-surface);
    border: 1px solid var(--ux-border);
    box-shadow:
        0 4px 16px var(--ux-shadow),
        0 0 0 6px color-mix(in srgb, var(--ux-primary) 8%, transparent);
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    transition: transform .25s ease, box-shadow .25s ease;
}
.ux-auth-logo-wrap:hover {
    transform: translateY(-2px);
    box-shadow:
        0 8px 24px var(--ux-shadow),
        0 0 0 6px color-mix(in srgb, var(--ux-accent) 18%, transparent);
}
.ux-auth-logo {
    max-width: 70px;
    max-height: 70px;
    width: auto;
    height: auto;
}
.ux-auth-title {
    color: var(--ux-primary);
    font-size: 24px;
    font-weight: 700;
    margin: 0 0 4px;
    letter-spacing: -0.3px;
}
.ux-auth-subtitle {
    color: var(--ux-text-muted);
    font-size: 13.5px;
    margin: 0;
}

/* Alertas APARTE de la card */
.alert.ux-auth-alert {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    border-radius: 10px;
    padding: 12px 14px;
    border: 1px solid var(--ux-border);
    margin: 0;
    font-size: 13px;
    box-shadow: 0 2px 8px var(--ux-shadow);
}
.alert.ux-auth-alert > i {
    flex-shrink: 0;
    font-size: 16px;
    margin-top: 2px;
}
.alert.ux-auth-alert > div { flex: 1; }
.alert.ux-auth-alert.alert-danger {
    background: color-mix(in srgb, #b63434 8%, var(--ux-surface));
    border-color: color-mix(in srgb, #b63434 30%, transparent);
    color: #b63434;
}
[data-theme="dark"] .alert.ux-auth-alert.alert-danger { color: #f5a5a5; }
.alert.ux-auth-alert.alert-success {
    background: color-mix(in srgb, #28b464 10%, var(--ux-surface));
    border-color: color-mix(in srgb, #28b464 35%, transparent);
    color: #1a7f4a;
}
[data-theme="dark"] .alert.ux-auth-alert.alert-success { color: #7ee0a5; }

/* Card del form */
.ux-auth-card {
    background: var(--ux-surface);
    border: 1px solid var(--ux-border);
    border-radius: 16px;
    padding: 28px 28px 26px;
    box-shadow: 0 12px 30px var(--ux-shadow);
    animation: ux-fade-slide-in .3s .05s ease both;
}
.ux-auth-form {
    display: flex;
    flex-direction: column;
    gap: 16px;
}
.ux-auth-form .form-control {
    height: 44px;
    padding: 10px 14px;
    border-radius: 10px;
    border: 1px solid var(--ux-border);
    background: var(--ux-surface-alt);
    color: var(--ux-text);
    font-size: 14px;
    transition: border-color .15s, box-shadow .15s, background .15s;
}
.ux-auth-form .form-control::placeholder { color: var(--ux-text-subtle); }
.ux-auth-form .form-control:focus {
    outline: none;
    border-color: var(--ux-primary);
    background: var(--ux-surface);
    box-shadow: 0 0 0 3px var(--ux-primary-ring);
}

/* Password con botón ojo */
.ux-auth-password {
    position: relative;
    display: flex;
}
.ux-auth-password .form-control { padding-right: 42px; }
.ux-auth-password-toggle {
    position: absolute;
    right: 8px;
    top: 50%;
    transform: translateY(-50%);
    background: transparent;
    border: none;
    color: var(--ux-text-subtle);
    font-size: 14px;
    width: 30px;
    height: 30px;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    transition: background .15s, color .15s;
}
.ux-auth-password-toggle:hover {
    background: var(--ux-surface-alt);
    color: var(--ux-primary);
}

/* Row con remember + forgot */
.ux-auth-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
}
.ux-auth-remember {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    margin: 0;
    cursor: pointer;
    font-size: 13px;
    color: var(--ux-text-muted);
    user-select: none;
    line-height: 1.2;
}
.ux-auth-remember input[type="checkbox"],
.ux-auth-remember .form-check-input {
    /* Override del Bootstrap form-check-input que era position:absolute
       y se montaba sobre el texto "Recordarme" tapando la 'Re'. */
    position: static !important;
    margin: 0 !important;
    width: 16px;
    height: 16px;
    accent-color: var(--ux-primary);
    cursor: pointer;
    flex-shrink: 0;
}
.ux-auth-remember-text {
    line-height: 1.2;
    white-space: nowrap;
}
.ux-auth-link {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    color: var(--ux-accent);
    font-size: 13px;
    font-weight: 600;
    text-decoration: none !important;
    transition: color .15s, transform .1s;
}
.ux-auth-link:hover {
    color: var(--ux-accent-dark);
    transform: translateX(2px);
}
.ux-auth-link i { font-size: 11px; }

/* Submit grande */
.ux-auth-submit {
    height: 46px !important;
    justify-content: center;
    font-size: 14px !important;
    font-weight: 700 !important;
    letter-spacing: 0.4px;
    margin-top: 4px;
    width: 100%;
}

/* "Volver al inicio de sesión" en recovery */
.ux-auth-back {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    color: var(--ux-text-muted) !important;
    font-size: 13px;
    text-decoration: none !important;
    margin-top: 10px;
    padding: 8px;
    transition: color .15s;
}
.ux-auth-back:hover { color: var(--ux-primary) !important; }
.ux-auth-back i { font-size: 11px; }

/* Footer del wrapper (notas debajo de la card) */
.ux-auth-foot {
    margin: 8px 0 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
    text-align: center;
}
.ux-auth-foot-tagline {
    margin: 0;
    color: var(--ux-text-muted);
    font-size: 12.5px;
    line-height: 1.5;
    padding: 10px 14px;
    background: color-mix(in srgb, var(--ux-primary) 5%, transparent);
    border: 1px solid color-mix(in srgb, var(--ux-primary) 18%, transparent);
    border-radius: 10px;
}
.ux-auth-foot-tagline i {
    color: var(--ux-primary);
    margin-right: 4px;
    font-size: 11px;
}
.ux-auth-foot-note {
    margin: 0;
    color: var(--ux-text-subtle);
    font-size: 11.5px;
    line-height: 1.5;
}
.ux-auth-foot-note i { color: var(--ux-accent); margin-right: 4px; }

/* Responsive */
@media (max-width: 480px) {
    .ux-auth-page { padding: 16px 12px 40px; }
    .ux-auth-banner {
        padding: 10px 12px;
        font-size: 12.5px;
    }
    .ux-auth-card { padding: 22px 18px 20px; border-radius: 14px; }
    .ux-auth-logo-wrap { width: 80px; height: 80px; border-radius: 20px; }
    .ux-auth-logo { max-width: 58px; max-height: 58px; }
    .ux-auth-title { font-size: 21px; }
    .ux-auth-row { flex-direction: column; align-items: flex-start; gap: 10px; }
    .ux-auth-link { align-self: flex-end; }
}

/* ============================================================== */
/* /ver_id (admin ticket detail) — fix scroll horizontal overflow  */
/* ============================================================== */

/* La página del ticket no debe permitir overflow horizontal del viewport */
.ux-ticket-page {
    overflow-x: hidden;
    width: 100%;
    box-sizing: border-box;
}

/* Header del ticket: que sus dos zonas se acomoden y no fuercen ancho */
.ux-ticket-header {
    min-width: 0;
}
.ux-ticket-header-left {
    flex: 1 1 auto;
    min-width: 0;          /* permite truncar/wrap el meta largo */
}
.ux-ticket-header-left > div:last-child {
    min-width: 0;
    flex: 1 1 auto;
}
.ux-ticket-header-right {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    flex-shrink: 0;
    flex-wrap: wrap;
}
.ux-ticket-meta {
    min-width: 0;
    word-break: break-word;
    overflow-wrap: break-word;
}
.ux-ticket-meta > span {
    min-width: 0;
    overflow-wrap: anywhere;     /* corta emails/IDs largos sin desbordar */
}

/* Mensajes: cada artículo no debe forzar ancho */
.ux-ticket-msg {
    min-width: 0;
    width: 100%;
    box-sizing: border-box;
}
.ux-ticket-bubble {
    min-width: 0;
    max-width: 100%;
    overflow: hidden;            /* contiene contenido con líneas largas */
    box-sizing: border-box;
}
.ux-ticket-bubble-head {
    min-width: 0;
    flex-wrap: wrap;
}
.ux-ticket-bubble-author {
    min-width: 0;
    max-width: 100%;
    flex-wrap: wrap;
    word-break: break-word;
}
.ux-ticket-author-email {
    word-break: break-all;       /* emails largos sin espacios */
    max-width: 100%;
}

/* Contenido del mensaje: HTML libre del usuario */
.ux-ticket-content {
    overflow-wrap: break-word;
    word-break: break-word;
    max-width: 100%;
}
.ux-ticket-content > * { max-width: 100%; }
.ux-ticket-content img,
.ux-ticket-content video,
.ux-ticket-content iframe {
    max-width: 100%;
    height: auto;
    display: block;
    border-radius: 6px;
}
.ux-ticket-content pre,
.ux-ticket-content code {
    white-space: pre-wrap;
    word-break: break-word;
    overflow-wrap: anywhere;
    background: var(--ux-surface-alt);
    color: var(--ux-text);
    padding: 4px 8px;
    border-radius: 4px;
    font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
    font-size: 12.5px;
}
.ux-ticket-content pre {
    padding: 10px 12px;
    overflow-x: auto;            /* tabs largos: scroll DENTRO del pre, no del viewport */
    max-width: 100%;
}
.ux-ticket-content table {
    display: block;
    overflow-x: auto;
    max-width: 100%;
    width: 100%;
    border-collapse: collapse;
}
.ux-ticket-content a {
    word-break: break-all;       /* URLs largas */
    color: var(--ux-primary);
}
.ux-ticket-content blockquote {
    margin: 8px 0;
    padding: 8px 12px;
    border-left: 3px solid var(--ux-primary);
    background: color-mix(in srgb, var(--ux-primary) 6%, transparent);
    border-radius: 0 6px 6px 0;
}

/* Tag del bubble (footer del mensaje) */
.ux-ticket-bubble-foot {
    margin-top: 8px;
    padding-top: 6px;
    border-top: 1px dashed var(--ux-border);
}
.ux-ticket-tag {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 3px 9px;
    background: var(--ux-primary-soft);
    color: var(--ux-primary);
    border-radius: 999px;
    font-size: 11px;
    font-weight: 600;
}
.ux-ticket-tag i { font-size: 10px; }

/* Avatar de iniciales (si no hay foto) */
.ux-ticket-avatar-initials {
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 0.3px;
    color: #fff;
}

/* Reply: textarea responsivo, no se desborda */
.ux-ticket-reply textarea.form-control {
    width: 100%;
    max-width: 100%;
    min-height: 96px;
    resize: vertical;
    box-sizing: border-box;
}

/* Responsive móvil */
@media (max-width: 600px) {
    .ux-ticket-page { padding: 0.5rem 0.75rem 2rem; }
    .ux-ticket-header { flex-direction: column; align-items: stretch; }
    .ux-ticket-header-right {
        align-self: flex-end;
        margin-top: 8px;
    }
    .ux-ticket-msg { gap: 8px; }
    .ux-ticket-avatar { width: 34px; height: 34px; font-size: 12px; }
    .ux-ticket-bubble { padding: 10px 12px; }
    .ux-ticket-bubble-head { gap: 6px; }
    .ux-ticket-time { font-size: 10.5px; }
    .ux-ticket-reply-actions {
        flex-direction: column;
        align-items: stretch;
        gap: 8px;
    }
    .ux-ticket-reply-actions .btn { width: 100%; justify-content: center; }
    .ux-ticket-back .btn { width: 100%; justify-content: center; }
}

/* ============================================================== */
/* Fix global de overflow horizontal del viewport                  */
/* ============================================================== */

/* Evita que cualquier contenido (modal residual, footer absoluto,
   tabla ancha, imagen escapada, etc.) genere scroll horizontal
   del viewport completo. */
html, body {
    max-width: 100%;
    overflow-x: hidden !important;
}
body {
    width: 100%;
    box-sizing: border-box;
}

/* El footer global no debe overflow por su position absolute.
   La regla de css.css lo dejaba absoluto a nivel de toda la página;
   ya tiene override en ux-footer pero forzamos width 100% del viewport. */
footer.page-footer:not(.ux-footer) {
    position: static !important;
    width: 100% !important;
    max-width: 100% !important;
    height: auto !important;
}

/* Container global de Bootstrap: nunca debe pasar el viewport */
body > .container,
body > main,
.background-container {
    max-width: 100%;
    box-sizing: border-box;
}

/* Header del impersonate banner y el contenedor #content tampoco */
#content {
    max-width: 100%;
    overflow-x: clip;        /* moderno: clipping sin crear scroll */
}

/* ============================================================== */
/* Topbar fix — neutralizar restos del .navbar de Bootstrap        */
/* ============================================================== */

/* Bootstrap añade flex-wrap: nowrap por default al .navbar lo que
   junto con elementos rígidos puede empujar contenido fuera del viewport.
   Forzamos comportamiento controlado. */
nav.navbar.ux-topbar {
    flex-wrap: nowrap;
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
    overflow: visible;        /* dropdowns deben poder salir verticalmente */
}

/* La búsqueda no debe forzar 480px si no hay espacio */
.ux-topbar-search {
    flex: 1 1 auto;
    min-width: 0;             /* clave para que pueda shrink */
    max-width: 480px;
}

/* Las acciones a la derecha deben encogerse antes que romper el layout */
.ux-topbar-actions {
    min-width: 0;
    flex-shrink: 1;
    flex-wrap: nowrap;
}

/* Brand también con min-width 0 para shrinking */
.ux-topbar-brand {
    min-width: 0;
}

/* Pill "Vista admin" en el copyright del footer (solo visible para admin) */
.ux-footer-role-pill {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    margin-left: 8px;
    padding: 2px 10px;
    background: color-mix(in srgb, var(--ux-accent) 14%, transparent);
    border: 1px solid color-mix(in srgb, var(--ux-accent) 35%, transparent);
    color: var(--ux-accent);
    border-radius: 999px;
    font-size: 10.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.4px;
}
.ux-footer-role-pill i { font-size: 9px; }

/* Footer: link disabled (placeholder cuando la env no tiene URL real) */
.ux-footer-list .ux-footer-link-disabled {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 4px 6px;
    color: var(--ux-text-subtle);
    font-size: 13px;
    cursor: not-allowed;
    opacity: 0.55;
    font-style: italic;
}
.ux-footer-list .ux-footer-link-disabled > i {
    color: var(--ux-text-subtle);
    font-size: 11px;
    opacity: 0.6;
}
.ux-footer-list .ux-footer-link-disabled::after {
    content: '\f023'; /* fa-lock */
    font-family: 'Font Awesome 6 Free', 'Font Awesome 5 Free';
    font-weight: 900;
    font-size: 9px;
    margin-left: 4px;
    opacity: 0.7;
}

/* Animación "alerta nueva" — pulse extra fuerte por 2.4s cuando sube el count */
.ux-bell-badge.ux-bell-badge-pop {
    animation: ux-bell-pop 2.4s ease-out 1;
}
@keyframes ux-bell-pop {
    0%   { transform: scale(1);   box-shadow: 0 0 0 0 color-mix(in srgb, var(--ux-accent) 70%, transparent); }
    15%  { transform: scale(1.45); box-shadow: 0 0 0 14px color-mix(in srgb, var(--ux-accent) 0%, transparent); }
    30%  { transform: scale(1);   box-shadow: 0 0 0 0 color-mix(in srgb, var(--ux-accent) 70%, transparent); }
    45%  { transform: scale(1.25); box-shadow: 0 0 0 10px color-mix(in srgb, var(--ux-accent) 0%, transparent); }
    60%  { transform: scale(1);   box-shadow: 0 0 0 0 color-mix(in srgb, var(--ux-accent) 50%, transparent); }
    100% { transform: scale(1);   box-shadow: 0 0 0 0 color-mix(in srgb, var(--ux-accent) 0%, transparent); }
}

/* ============================================================== */
/* Bell — Prompt para activar notificaciones nativas               */
/* ============================================================== */

.ux-bell-notif-prompt {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 14px;
    background: color-mix(in srgb, var(--ux-primary) 8%, var(--ux-surface));
    border-bottom: 1px solid var(--ux-border);
    color: var(--ux-text);
    font-size: 12px;
    font-weight: 500;
}
.ux-bell-notif-prompt > i {
    color: var(--ux-primary);
    font-size: 14px;
    flex-shrink: 0;
}
.ux-bell-notif-prompt > span {
    flex: 1;
    line-height: 1.35;
}
.ux-bell-notif-btn {
    flex-shrink: 0;
    background: var(--ux-primary);
    color: #fff;
    border: 1px solid var(--ux-primary);
    border-radius: 6px;
    padding: 5px 12px;
    font-size: 11.5px;
    font-weight: 600;
    cursor: pointer;
    transition: background .15s, box-shadow .15s, transform .1s;
}
.ux-bell-notif-btn:hover {
    background: var(--ux-primary-dark);
    box-shadow: 0 3px 8px var(--ux-primary-ring);
    transform: translateY(-1px);
}

/* Variante "desactivado por el usuario" */
.ux-bell-notif-prompt-off {
    background: color-mix(in srgb, var(--ux-text-muted) 8%, var(--ux-surface));
}
.ux-bell-notif-prompt-off > i {
    color: var(--ux-text-muted);
}

/* Variante "bloqueado por el navegador" — sin botón, sólo nota */
.ux-bell-notif-prompt-blocked {
    background: color-mix(in srgb, #b63434 6%, var(--ux-surface));
    color: #b63434;
}
.ux-bell-notif-prompt-blocked > i {
    color: #b63434;
}
[data-theme="dark"] .ux-bell-notif-prompt-blocked {
    color: #f5a5a5;
}
[data-theme="dark"] .ux-bell-notif-prompt-blocked > i {
    color: #f5a5a5;
}

/* ============================================================== */
/* /obj_user — Buscador en tiempo real                             */
/* ============================================================== */

.ux-obj-search {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    margin: 0 0 18px;
    flex-wrap: wrap;
}
.ux-obj-search-input {
    position: relative;
    flex: 1 1 320px;
    min-width: 0;
    max-width: 540px;
}
.ux-obj-search-icon {
    position: absolute;
    left: 14px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--ux-text-subtle);
    font-size: 13px;
    pointer-events: none;
    transition: color .15s ease;
    z-index: 2;
}
.ux-obj-search-input input {
    width: 100%;
    height: 42px;
    padding: 8px 42px 8px 38px;
    border: 1px solid var(--ux-border);
    background: var(--ux-surface);
    color: var(--ux-text);
    border-radius: 999px;
    font-size: 14px;
    transition: border-color .15s, box-shadow .15s, background .15s;
}
.ux-obj-search-input input::placeholder { color: var(--ux-text-subtle); }
.ux-obj-search-input input:focus {
    outline: none;
    border-color: var(--ux-primary);
    box-shadow: 0 0 0 3px var(--ux-primary-ring);
    background: var(--ux-surface-alt);
}
.ux-obj-search-input input:focus ~ .ux-obj-search-icon,
.ux-obj-search-input:focus-within .ux-obj-search-icon {
    color: var(--ux-accent);
}
.ux-obj-search-clear {
    position: absolute;
    right: 8px;
    top: 50%;
    transform: translateY(-50%);
    width: 28px;
    height: 28px;
    border-radius: 50%;
    border: none;
    background: transparent;
    color: var(--ux-text-subtle);
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: background .15s, color .15s;
    z-index: 2;
}
.ux-obj-search-clear:hover {
    background: var(--ux-surface-alt);
    color: var(--ux-accent);
}
.ux-obj-search-clear[hidden] { display: none !important; }

/* Contador "Mostrando X de Y" */
.ux-obj-search-status {
    color: var(--ux-text-muted);
    font-size: 12.5px;
    line-height: 1.4;
    flex-shrink: 0;
    white-space: nowrap;
}
.ux-obj-search-status strong {
    color: var(--ux-text);
    font-variant-numeric: tabular-nums;
}

/* Estado "sin coincidencias" — variante con icono lupa - */
.ux-obj-no-matches {
    margin-top: 8px;
}
.ux-obj-no-matches strong { color: var(--ux-accent); }

@media (max-width: 600px) {
    .ux-obj-search { flex-direction: column; align-items: stretch; gap: 8px; }
    .ux-obj-search-input { flex-basis: auto; max-width: none; }
    .ux-obj-search-status { text-align: center; }
}

/* ============================================================== */
/* /obj_user — Status multi-estado + panel de conexión             */
/* ============================================================== */

/* Estados del pill principal */
.ux-obj-status-online {
    background: rgba(40, 180, 100, 0.15);
    color: #1a7f4a;
    border: 1px solid rgba(40, 180, 100, 0.4);
}
.ux-obj-status-online i {
    color: #28b464;
    animation: ux-pulse-dot 2s ease-in-out infinite;
}
[data-theme="dark"] .ux-obj-status-online { color: #7ee0a5; }

.ux-obj-status-no-gps {
    background: color-mix(in srgb, var(--ux-accent) 14%, transparent);
    color: var(--ux-accent);
    border: 1px solid color-mix(in srgb, var(--ux-accent) 40%, transparent);
}
.ux-obj-status-no-gps i {
    color: var(--ux-accent);
    animation: ux-pulse-dot 2s ease-in-out infinite;
}

.ux-obj-status-offline {
    background: color-mix(in srgb, #c08e2a 14%, transparent);
    color: #8a6500;
    border: 1px solid color-mix(in srgb, #c08e2a 35%, transparent);
}
.ux-obj-status-offline i { color: #c08e2a; }
[data-theme="dark"] .ux-obj-status-offline { color: #f3c97c; }

.ux-obj-status-inactive {
    background: rgba(150, 160, 175, 0.15);
    color: var(--ux-text-muted);
    border: 1px solid var(--ux-border);
}
.ux-obj-status-inactive i { color: var(--ux-text-subtle); }

.ux-obj-status-disabled {
    background: rgba(120, 50, 50, 0.10);
    color: #8a4040;
    border: 1px solid rgba(120, 50, 50, 0.30);
}
.ux-obj-status-disabled i { color: #8a4040; }
[data-theme="dark"] .ux-obj-status-disabled { color: #d28a8a; }

/* Mantener compatibilidad con clases legacy */
.ux-obj-status-on  { /* idéntico a online */
    background: rgba(40, 180, 100, 0.15);
    color: #1a7f4a;
    border: 1px solid rgba(40, 180, 100, 0.4);
}
.ux-obj-status-on i {
    color: #28b464;
    animation: ux-pulse-dot 2s ease-in-out infinite;
}
[data-theme="dark"] .ux-obj-status-on { color: #7ee0a5; }
.ux-obj-status-off {
    background: rgba(150, 160, 175, 0.15);
    color: var(--ux-text-muted);
    border: 1px solid var(--ux-border);
}
.ux-obj-status-off i { color: var(--ux-text-subtle); }

/* Panel de conexión (Internet / GPS / Última señal) */
.ux-obj-conn {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    padding: 12px 18px;
    border-bottom: 1px dashed var(--ux-border);
    background: color-mix(in srgb, var(--ux-primary) 3%, var(--ux-surface));
}
[data-theme="dark"] .ux-obj-conn {
    background: color-mix(in srgb, var(--ux-primary) 6%, var(--ux-surface));
}
.ux-obj-conn-item {
    flex: 1 1 auto;
    min-width: 0;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 6px 10px;
    background: var(--ux-surface);
    border: 1px solid var(--ux-border);
    border-radius: 8px;
    font-size: 11px;
    line-height: 1.3;
    transition: border-color .15s, color .15s;
}
.ux-obj-conn-item > i {
    flex-shrink: 0;
    font-size: 11px;
    width: 14px;
    text-align: center;
}
.ux-obj-conn-label {
    color: var(--ux-text-subtle);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    font-size: 9.5px;
    font-weight: 700;
}
.ux-obj-conn-value {
    color: var(--ux-text);
    font-weight: 600;
    margin-left: auto;
    font-size: 11px;
}

/* Item online: borde verde + check */
.ux-obj-conn-on {
    border-color: rgba(40, 180, 100, 0.4);
    background: color-mix(in srgb, #28b464 5%, var(--ux-surface));
}
.ux-obj-conn-on > i,
.ux-obj-conn-on .ux-obj-conn-value { color: #1a7f4a; }
[data-theme="dark"] .ux-obj-conn-on > i,
[data-theme="dark"] .ux-obj-conn-on .ux-obj-conn-value { color: #7ee0a5; }

/* Item off: borde tenue + texto muted */
.ux-obj-conn-off {
    border-color: var(--ux-border);
    background: var(--ux-surface);
}
.ux-obj-conn-off > i,
.ux-obj-conn-off .ux-obj-conn-value {
    color: var(--ux-text-subtle);
}

/* Item meta (última señal): info-only */
.ux-obj-conn-meta > i,
.ux-obj-conn-meta .ux-obj-conn-value {
    color: var(--ux-text-muted);
}

/* Responsive: en móvil los items se apilan en columna para no comprimir */
@media (max-width: 600px) {
    .ux-obj-conn { padding: 10px 14px; gap: 6px; }
    .ux-obj-conn-item { flex-basis: 100%; }
}

/* ============================================================== */
/* /obj_user — Chips de filtro por estado                          */
/* ============================================================== */

.ux-obj-filters {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin: 0 0 18px;
    align-items: center;
}

.ux-obj-chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 12px;
    background: var(--ux-surface);
    border: 1px solid var(--ux-border);
    border-radius: 999px;
    color: var(--ux-text-muted);
    font-size: 12px;
    font-weight: 600;
    cursor: pointer;
    transition: background .15s, border-color .15s, color .15s, transform .1s;
    user-select: none;
}
.ux-obj-chip > i {
    font-size: 8px;
    color: var(--ux-text-subtle);
}
.ux-obj-chip-count {
    margin-left: 4px;
    padding: 1px 7px;
    background: var(--ux-surface-alt);
    color: var(--ux-text-muted);
    border-radius: 999px;
    font-size: 10.5px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
}
.ux-obj-chip:hover:not(:disabled) {
    border-color: var(--ux-border-strong);
    color: var(--ux-text);
    transform: translateY(-1px);
}
.ux-obj-chip:disabled {
    opacity: 0.4;
    cursor: not-allowed;
}

/* Activo: fondo lleno con su color de estado */
.ux-obj-chip.is-active {
    color: #fff;
    transform: translateY(-1px);
    box-shadow: 0 3px 8px var(--ux-shadow);
}
.ux-obj-chip.is-active > i { color: #fff; }
.ux-obj-chip.is-active .ux-obj-chip-count {
    background: rgba(255,255,255,0.25);
    color: #fff;
}

/* Variantes por estado — color del puntito en reposo y fondo cuando activo */
.ux-obj-chip-online > i      { color: #28b464; }
.ux-obj-chip-online.is-active{ background: #28b464; border-color: #28b464; }

.ux-obj-chip-no-gps > i      { color: var(--ux-accent); }
.ux-obj-chip-no-gps.is-active{ background: var(--ux-accent); border-color: var(--ux-accent); }

.ux-obj-chip-offline > i     { color: #c08e2a; }
.ux-obj-chip-offline.is-active{ background: #c08e2a; border-color: #c08e2a; }

.ux-obj-chip-inactive > i    { color: var(--ux-text-subtle); }
.ux-obj-chip-inactive.is-active{
    background: var(--ux-text-muted);
    border-color: var(--ux-text-muted);
}

.ux-obj-chip-disabled > i    { color: #8a4040; }
.ux-obj-chip-disabled.is-active{ background: #8a4040; border-color: #8a4040; }

.ux-obj-chip-all > i         { color: var(--ux-primary); font-size: 10px; }
.ux-obj-chip-all.is-active   { background: var(--ux-primary); border-color: var(--ux-primary); }

@media (max-width: 600px) {
    .ux-obj-filters { gap: 6px; }
    .ux-obj-chip { font-size: 11px; padding: 5px 10px; }
    .ux-obj-chip-count { font-size: 9.5px; padding: 1px 6px; }
}

/* ============================================================== */
/* Tickets — contenido sensible oculto (spoilers)                  */
/* ============================================================== */

/* El span actúa como "redacted block": gris con candado hasta que se revela */
.ux-ticket-spoiler {
    display: inline-block;
    position: relative;
    cursor: pointer;
    user-select: none;
    border-radius: 6px;
    padding: 1px 2px;
    transition: background .15s ease;
}

.ux-ticket-spoiler-mask {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 3px 12px;
    background: var(--ux-text-muted);
    color: #fff;
    border-radius: 6px;
    font-size: 11.5px;
    font-weight: 600;
    letter-spacing: 0.3px;
    transition: background .15s ease, color .15s ease;
}
.ux-ticket-spoiler-mask > i { font-size: 10px; }

.ux-ticket-spoiler:hover .ux-ticket-spoiler-mask {
    background: var(--ux-accent);
}

.ux-ticket-spoiler:focus { outline: none; }
.ux-ticket-spoiler:focus-visible {
    outline: 2px solid var(--ux-accent);
    outline-offset: 2px;
}

/* Contenido oculto por default; se muestra al revelar */
.ux-ticket-spoiler-content {
    display: none;
    background: color-mix(in srgb, var(--ux-accent) 12%, var(--ux-surface));
    border: 1px dashed var(--ux-accent);
    color: var(--ux-text);
    padding: 4px 10px;
    border-radius: 6px;
    font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
    font-size: 12.5px;
    word-break: break-all;
}

/* Estado revelado: oculta la máscara, muestra el contenido */
.ux-ticket-spoiler.is-revealed .ux-ticket-spoiler-mask {
    display: none;
}
.ux-ticket-spoiler.is-revealed .ux-ticket-spoiler-content {
    display: inline;
    cursor: text;
    user-select: text;
    animation: ux-spoiler-reveal .2s ease both;
}

@keyframes ux-spoiler-reveal {
    from { opacity: 0; transform: scale(0.96); }
    to   { opacity: 1; transform: scale(1); }
}

/* Hint en el textarea — código inline que no se parte entre líneas */
.ux-form-help-block code {
    display: inline-block;
    vertical-align: baseline;
    background: var(--ux-surface-alt);
    border: 1px solid var(--ux-border);
    color: var(--ux-accent);
    padding: 0 6px;
    border-radius: 4px;
    font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
    font-size: 11px;
    line-height: 1.6;
    white-space: nowrap;       /* mantiene [script] en una sola línea */
    word-break: keep-all;
}

/* En el contenido del ticket (mensajes), los <code> también */
.ux-ticket-content code {
    display: inline-block;
    vertical-align: baseline;
    background: var(--ux-surface-alt);
    border: 1px solid var(--ux-border);
    color: var(--ux-accent);
    padding: 0 6px;
    border-radius: 4px;
    font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
    font-size: 12.5px;
    line-height: 1.6;
    white-space: nowrap;
    word-break: keep-all;
}

/* Links auto-detectados en el contenido */
.ux-ticket-content a {
    color: var(--ux-primary);
    text-decoration: underline;
    word-break: break-word;
}
.ux-ticket-content a:hover { color: var(--ux-primary-dark); }
