        /* ═════════════════════════════════════════════════════════════
           Paleta arcade. Variables para que cada componente las consuma
           y un futuro cambio de tema sea barato.
        ═════════════════════════════════════════════════════════════ */
        :root {
            --arc-bg-0:       #141019;   /* fondo profundo */
            --arc-bg-1:       #1C1725;   /* fondo intermedio */
            --arc-bg-2:       #241D2F;   /* panel */
            --arc-panel:      #1C1725;
            --arc-line:       #6A6288;

            /* ── PALETA ────────────────────────────────────────────────────────
               OJO AL LEER ESTE ARCHIVO: los comentarios de esta seccion se
               reescribieron a mano el 2026-09-02 porque los reemplazos globales
               de color los habian corrompido — citaban hex que ya no
               correspondian a lo que decian nombrar. Si volves a hacer un
               reemplazo masivo de colores, revisa DESPUES que los comentarios
               sigan diciendo la verdad; un comentario que miente es peor que
               ninguno.

               HISTORIA REAL, en orden:
                 1. Primario cian neon #00f0ff + acento magenta #ff2bd6, tipografia
                    pixelada y resplandores. Leia "maquina recreativa".
                 2. Se paso todo a morado. No alcanzo: cambiaba el color y dejaba
                    intacta la gramatica (scanlines CRT, sombra dura de boton
                    fisico, MAYUSCULA trackeada en todo el texto funcional).
                 3. Se saco la gramatica arcade.
                 4. Este paso: el objetivo dejo de ser "serio" y paso a ser
                    "todo publico". NexoPass vende entradas para circo, cueca y
                    teatro, no solo para fiestas — el violeta neon y el logo
                    pixelado filtraban familias, adultos mayores y publico de
                    eventos culturales. Violeta desaturado, fondo carbon violaceo
                    en vez de casi negro, y Outfit en lugar de Press Start 2P.

               CONTRASTES, calculados sobre los fondos reales (no estimados):
                 #EDE9F2 sobre #141019 = 15.69:1   sobre #1C1725 = 14.63:1
                 #B3AAC4 sobre #141019 =  8.47:1   sobre #1C1725 =  7.90:1
                 #8F86A3 sobre #141019 =  5.46:1
                 #A78BFA sobre #141019 =  6.90:1   sobre #1C1725 =  6.44:1
                 #4ADE80 sobre #141019 = 10.78:1   sobre #1C1725 = 10.05:1
                 blanco  sobre #6D5FD3 =  4.97:1   sobre #5D50BF =  6.24:1
                 #6A6288 sobre #141019 =  3.32:1   sobre #1C1725 =  3.10:1  (1.4.11)

               EL FONDO NO ES NEGRO PURO A PROPOSITO: #141019 tiene la misma
               luminancia que el #121212 de Material (0.0059 vs 0.0060), asi que
               hereda su confort de lectura, pero conserva la temperatura de marca.
               El negro puro produce smearing al hacer scroll en OLED y elimina la
               posibilidad de jerarquia por elevacion. */
            --nx-primary:       #6D5FD3;   /* fondo de boton / CTA */
            --nx-primary-hover: #5D50BF;   /* hover y active del CTA */
            --nx-accent:        #A78BFA;   /* links, foco, texto destacado */
            /* La misma tripleta en decimal, para los rgba() con alpha. Existe
               porque el reemplazo global de colores busca tokens hexadecimales y
               NO ve `rgba(180,108,255,.08)`: en la migracion a esta paleta
               sobrevivieron 14 usos del morado anterior por eso, incluido el
               gradiente de fondo del <body> — o sea, en todas las paginas.
               Usar siempre rgba(var(--nx-accent-rgb), .08) en vez del literal. */
            --nx-accent-rgb:    167,139,250;

            /* ── ELEVACION: un solo modelo ─────────────────────────────────────
               Antes convivian DOS metaforas fisicas incompatibles:
                 0 4px 0 rgba(0,0,0,.4)        sombra dura, sin difuminar: es el
                                               boton fisico de una maquina arcade
                 0 0 20px rgba(167,139,250,..) resplandor de neon difuso
               y ademas anillos de foco mezclados en la misma propiedad.

               Un producto serio tiene UNA forma de decir "esto esta por encima de
               aquello": borde de 1px + una sombra suave. Los anillos de foco son
               otra cosa (indican estado, no elevacion) y se dejan como estaban. */
            --nx-shadow-sm: 0 1px 2px rgba(0,0,0,.30), 0 1px 1px rgba(0,0,0,.20);
            --nx-shadow-md: 0 4px 12px rgba(0,0,0,.35);

            /* Alias de compatibilidad. Hay ~112 usos de var(--arc-cyan) y
               var(--arc-magenta) repartidos por el tema y por bloques <style> de
               plantillas. Reapuntarlos aca cambia el sitio entero de una vez y sin
               riesgo de olvidar ninguno; renombrar los call-sites es limpieza
               posterior, no un requisito para que esto se vea bien.
               NO agregar usos NUEVOS de estos dos nombres: ya no son ni cian ni
               magenta, y el nombre miente a proposito durante la transicion. */
            --arc-cyan:       var(--nx-accent);
            --arc-magenta:    var(--nx-accent);
            /* Estados desaturados (2026-09). Los anteriores —#ffd400, #36ff8b,
               #ff3b6b— eran colores de "score" de videojuego: verde fluor, rojo
               chicle, amarillo de maquina. El contraste era altisimo pero el
               registro equivocado; en un dashboard, un badge de estado en verde
               fluor no lee "todo en orden", lee "arcade".
               Los nuevos siguen pasando AA con holgura sobre el fondo (9.01:1,
               5.45:1 y 9.56:1) y son los tonos que usa el resto de la industria
               para lo mismo, asi que se leen sin tener que aprenderlos. */
            --arc-yellow:     #f59e0b;   /* warning */
            --arc-green:      #4ADE80;   /* success */
            --arc-red:        #ef4444;   /* error */
            --arc-purple:     #A78BFA;   /* alias historico del acento */

            --arc-text:       #EDE9F2;
            --arc-text-dim:   #B3AAC4;
            /* #6b5d8a daba 3.48:1 sobre --arc-bg-0 y 3.41:1 sobre --arc-panel:
               por debajo del 4.5:1 de WCAG AA para texto normal, y se usa en
               .form-text/.help-block/placeholders/footer (texto chico). #8577a8
               sube a 5.08 / 4.98 — pasa AA en ambos fondos manteniendo el tono
               "muted" morado del tema. */
            --arc-text-muted: #8F86A3;

            /* Reapuntada a Inter en 2026-09. Antes era "Press Start 2P" y, al
               estar aplicada a h1-h3, .btn, .badge, label y .table thead th,
               ponia tipografia de maquina recreativa en CADA boton y CADA
               etiqueta de formulario del sitio — incluido el checkout. Ya se
               habia tenido que subir el tamaño dos veces por ilegibilidad.
               El nombre se conserva para no tocar los ~44 call-sites; el
               efecto ahora es "titulo en Inter con tracking", que es el patron
               de etiqueta de producto serio. El logo la nombra literal aparte. */
            /* Nombre historico: hoy alimenta titulos y etiquetas, no una pixelada.
               Outfit es geometrica y calida — moderna sin leerse tecnica. */
            --arc-font-pixel: "Outfit", "Inter", system-ui, -apple-system, sans-serif;
            /* VT323 fuera: era la fuente de terminal retro. Los codigos de ticket
               siguen necesitando monospace (para que los caracteres no se
               confundan al dictarlos), pero con la del sistema, no una retro. */
            --arc-font-mono:  ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
            --arc-font-body:  "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;

            /* Resplandores APAGADOS (2026-09). El halo de neon sobre el texto es la
               señal mas fuerte de "letrero de arcade" que tenia el sitio, y ademas
               reduce la nitidez de lectura sobre fondo oscuro.
               Se apagan aqui, en las cuatro variables, y no en los ~10 selectores
               que las consumen: `text-shadow: var(--arc-glow-cyan)` pasa a resolver
               a `text-shadow: none` sin tocar ni una regla. Para recuperarlos algun
               dia basta con devolverle el valor a estas cuatro lineas. */
            --arc-glow-cyan:    none;
            --arc-glow-magenta: none;
            --arc-glow-yellow:  none;
            --arc-glow-green:   none;
        }

        /* Body con fondo en capas:
             - Gradiente base
             - Grid sutil
             - Scanlines horizontales
           El scanline es ~3px de alto, casi imperceptible pero da el feel CRT.
        */
        body {
            background-color: var(--arc-bg-0);
            background-image:
                radial-gradient(ellipse at top, rgba(167,139,250,.10), transparent 55%),
                radial-gradient(ellipse at bottom, rgba(167,139,250,.08),  transparent 55%),
                linear-gradient(180deg, var(--arc-bg-0) 0%, var(--arc-bg-1) 100%);
            color: var(--arc-text);
            min-height: 100vh;
            font-family: var(--arc-font-body);
            font-size: 16px;
            line-height: 1.5;
            margin: 0;
            overflow-x: hidden;
            position: relative;
        }

        /* ── Overlays CRT retirados (2026-09) ─────────────────────────────────
           Aqui vivian dos capas fijas sobre TODO el sitio:
             body::before  scanlines de tubo de rayos catodicos
             body::after   grilla de puntos morados cada 32px

           Eran la señal mas literal de "maquina recreativa" que tenia el
           producto, y se aplicaban por igual al panel del organizador, a las
           tablas de compradores y al checkout. Una plataforma de gestion no
           simula el monitor de una arcade de los ochenta.

           Sobrevivieron al recoloreado a morado porque ese cambio toco los
           colores y no la gramatica visual — por eso el sitio seguia sin
           sentirse serio pese al cambio de paleta.

           Se retiran del todo en vez de comentarlas: si algun dia se quiere
           una textura de fondo, va a ser otra, no esta. */

        /* ═════════════════════════════════════════════════════════════
           Tipografia
        ═════════════════════════════════════════════════════════════ */

        /* Titulos en Outfit. Antes decia "Press Start 2P solo para encabezados
           cortos" — la pixelada ya no se usa en ningun lado salvo el historial. */
        h1, h2, h3, .h1, .h2, .h3 {
            font-family: var(--arc-font-pixel);
            font-weight: 400;
            letter-spacing: normal;
            text-transform: none;
            line-height: 1.4;
            color: var(--arc-text);
        }
        h1, .h1 { font-size: clamp(1.25rem, 3.2vw, 1.85rem); }
        h2, .h2 { font-size: clamp(1.05rem, 2.4vw, 1.4rem); }
        h3, .h3 { font-size: clamp(.92rem, 2vw, 1.1rem); }

        /* Subtitulos y h4+: sans-serif para legibilidad de copy mas largo. */
        h4, h5, h6, .h4, .h5, .h6 {
            font-family: var(--arc-font-body);
            font-weight: 700;
            letter-spacing: .02em;
        }

        /* Numeros grandes y montos. Antes usaban VT323, una tipografia de terminal
           retro — sobre el numero que alguien esta a punto de pagar era la peor
           combinacion posible para transmitir seriedad.
           Inter con tabular-nums: las cifras quedan alineadas en columna (util en
           tablas de montos) y el peso 700 les devuelve la presencia que daba el
           tamano de VT323. Ya esta cargada, no cuesta una fuente mas. */
        .arcade-score, .display-1, .display-2, .display-3, .display-4, .display-5, .display-6 {
            font-family: var(--arc-font-body);
            font-weight: 700;
            font-variant-numeric: tabular-nums;
            letter-spacing: -.01em;
            line-height: 1.1;
        }
        .arcade-score { font-size: clamp(1.8rem, 4vw, 2.6rem); color: var(--arc-text); }
        .arcade-score--cyan    { color: var(--arc-cyan);    text-shadow: var(--arc-glow-cyan); }
        .arcade-score--magenta { color: var(--arc-magenta); text-shadow: var(--arc-glow-magenta); }
        .arcade-score--yellow  { color: var(--arc-yellow);  text-shadow: var(--arc-glow-yellow); }
        .arcade-score--green   { color: var(--arc-green);   text-shadow: var(--arc-glow-green); }
        .arcade-score--red     { color: var(--arc-red); }

        /* Etiquetas pequenas en pixel font — para badges y stat labels.
           Press Start 2P a < 0.7rem es practicamente ilegible (~10px) y
           rompe legibilidad WCAG 1.4.4. Subido a 0.75rem como minimo
           razonable (~12px) sin perder el aire arcade. */
        .arcade-label {
            font-family: var(--arc-font-pixel);
            font-size: .75rem;
            letter-spacing: .1em;
            text-transform: uppercase;
            color: var(--arc-text-dim);
            line-height: 1.4;
        }

        /* Texto monospace de soporte (codigos, IDs, fechas formateadas). */
        .arcade-mono {
            font-family: var(--arc-font-mono);
            font-size: 1.05em;
            letter-spacing: .02em;
            color: var(--arc-text);
        }

        /* ═════════════════════════════════════════════════════════════
           Componentes
        ═════════════════════════════════════════════════════════════ */

        /* Tarjeta: borde pixel + glow sutil al hover. */
        .arcade-card, .card {
            background: linear-gradient(180deg, var(--arc-panel) 0%, var(--arc-bg-1) 100%) !important;
            border: 2px solid var(--arc-line) !important;
            border-radius: 4px !important;
            box-shadow: var(--nx-shadow-sm);
            color: var(--arc-text);
            transition: transform .15s ease, box-shadow .15s ease, border-color .15s ease;
        }
        .arcade-card:hover, .card:hover {
            transform: translateY(-2px);
            border-color: var(--arc-cyan) !important;
            box-shadow: var(--nx-shadow-md);
        }

        /* Boton: borde y elevacion sobrios. Antes tenia "chunky border + sombra
           dura para feel de boton fisico" — literalmente el boton de una maquina
           recreativa. Ahora usa el modelo de elevacion unico. */
        .arcade-btn, .btn {
            font-family: var(--arc-font-pixel);
            font-size: .9rem;
            letter-spacing: .01em;
            text-transform: none;
            padding: .65rem 1.1rem;
            border-radius: 3px;
            border: 2px solid currentColor;
            background: transparent;
            color: var(--arc-cyan);
            box-shadow: var(--nx-shadow-sm);
            transition: transform .08s ease, box-shadow .08s ease, background .12s ease, color .12s ease;
            cursor: pointer;
        }
        .arcade-btn:hover, .btn:hover {
            background: var(--arc-cyan);
            color: var(--arc-bg-0);
            text-shadow: none;
        }
        /* Efecto "pulsar fisico" al hacer click */
        .arcade-btn:active, .btn:active {
            transform: translateY(2px);
            box-shadow: none;
        }

        /* Variantes de boton — sobrescriben colores Bootstrap. */
        /* CTA SOLIDO, no outline. El boton outline (fondo transparente, relleno
           al hover) es un patron de interfaz de videojuego; un boton primario
           solido es la convencion en herramientas de gestion y lee como algo
           en lo que se puede confiar. blanco sobre #5a52e5 = 5.57:1 (AA). */
        .btn-primary, .arcade-btn--primary {
            color: #fff;
            background: var(--nx-primary) !important;
            border-color: var(--nx-primary);
        }
        .btn-primary:hover, .arcade-btn--primary:hover {
            background: var(--nx-primary-hover) !important;
            color: #fff !important;
            border-color: var(--nx-primary-hover) !important;
        }
        .btn-success, .arcade-btn--success {
            color: var(--arc-green);    border-color: var(--arc-green);
            background: transparent !important;
        }
        .btn-success:hover, .arcade-btn--success:hover {
            background: var(--arc-green) !important;
            color: var(--arc-bg-0) !important;
        }
        .btn-warning, .arcade-btn--warning {
            color: var(--arc-yellow);   border-color: var(--arc-yellow);
            background: transparent !important;
        }
        .btn-warning:hover, .arcade-btn--warning:hover {
            background: var(--arc-yellow) !important;
            color: var(--arc-bg-0) !important;
        }
        .btn-danger, .arcade-btn--danger {
            color: var(--arc-red);      border-color: var(--arc-red);
            background: transparent !important;
        }
        .btn-danger:hover, .arcade-btn--danger:hover {
            background: var(--arc-red) !important;
            color: var(--arc-bg-0) !important;
        }
        .btn-info {
            color: var(--arc-magenta); border-color: var(--arc-magenta);
        }
        .btn-info:hover {
            background: var(--arc-magenta) !important; color: var(--arc-bg-0) !important;
        }
        .btn-outline-light {
            color: var(--arc-text);     border-color: var(--arc-text);
        }
        .btn-outline-light:hover {
            background: var(--arc-text) !important; color: var(--arc-bg-0) !important;
        }

        /* CTA destacado — el boton verde fluo de "Crear Evento". */
        .btn-crear-evento {
            background: var(--arc-green) !important;
            color: var(--arc-bg-0) !important;
            border: 2px solid var(--arc-green) !important;
            font-family: var(--arc-font-pixel);
            font-size: .9rem;
            letter-spacing: .01em;
            text-transform: none;
            box-shadow: var(--nx-shadow-sm);
        }
        .btn-crear-evento:hover {
            background: var(--arc-yellow) !important;
            border-color: var(--arc-yellow) !important;
            box-shadow: var(--nx-shadow-sm);
        }

        /* Toggle de sonidos arcade — minimalista, no compite con CTAs.
           Tap target 44x44 (WCAG 2.5.5). */
        .btn-arcade-sfx {
            background: transparent !important;
            border: 1px solid var(--arc-line) !important;
            color: var(--arc-cyan) !important;
            border-radius: 50%;
            width: 44px; height: 44px;
            display: inline-flex; align-items: center; justify-content: center;
            transition: background .15s, color .15s, box-shadow .15s;
        }
        .btn-arcade-sfx:hover {
            background: rgba(167,139,250,.08) !important;
            color: var(--arc-cyan) !important;
            box-shadow: none;
        }
        .btn-arcade-sfx[aria-pressed="false"] {
            color: var(--arc-text-muted) !important;
            border-color: var(--arc-text-muted) !important;
        }

        /* Badges — pixel + bordes definidos. .7rem (~11px) es el minimo legible
           con Press Start 2P; antes a .55rem (~8.8px) los badges informativos
           (estado de ticket, tipo de movimiento) eran ilegibles sin zoom. */
        .badge {
            font-family: var(--arc-font-pixel);
            font-size: .7rem;
            letter-spacing: .08em;
            border-radius: 2px;
            padding: .35rem .6rem;
            border: 1px solid currentColor;
        }
        .bg-success { background: var(--arc-green) !important; color: var(--arc-bg-0) !important; }
        .bg-info    { background: var(--arc-cyan)  !important; color: var(--arc-bg-0) !important; }
        .bg-warning { background: var(--arc-yellow)!important; color: var(--arc-bg-0) !important; }
        .bg-danger  { background: var(--arc-red)   !important; color: var(--arc-bg-0) !important; }
        .bg-primary { background: var(--arc-magenta)!important; color: var(--arc-bg-0) !important; }
        .bg-secondary { background: var(--arc-purple) !important; color: var(--arc-bg-0) !important; }
        .text-success { color: var(--arc-green) !important; }
        .text-warning { color: var(--arc-yellow) !important; }
        .text-danger  { color: var(--arc-red) !important; }
        .text-info    { color: var(--arc-cyan) !important; }
        .text-primary { color: var(--arc-magenta) !important; }
        /* Helper genérico ya usado en varias plantillas (estaba acompañado de
           un style="color:..." inline, bloqueado por la CSP). */
        .text-dim    { color: var(--arc-text-dim) !important; }

        /* Links: cyan con underline animado. */
        a {
            color: var(--arc-cyan);
            text-decoration: none;
            transition: color .15s ease, text-shadow .15s ease;
        }
        a:hover {
            color: var(--arc-magenta);
            text-shadow: var(--arc-glow-magenta);
        }

        /* ─────────────────────────────────────────────────────────────
           Formularios y calendarios — borde pixel, foco neon, pickers CRT
        ───────────────────────────────────────────────────────────────── */

        /* color-scheme: dark hace que el navegador renderice los popups
           NATIVOS en modo oscuro — el calendario de datetime-local, el
           reloj de time, los spinners de number y el menu de select. Sin
           esto el calendario aparece en blanco puro y rompe el tema. */
        :root { color-scheme: dark; }

        /* Campos de texto: borde pixel + foco neon. */
        .form-control, .form-select, input, textarea, select {
            background: var(--arc-panel) !important;
            border: 2px solid var(--arc-line) !important;
            border-radius: 3px !important;
            color: var(--arc-text) !important;
            font-family: var(--arc-font-body);
            padding: .55rem .75rem;
            transition: border-color .15s ease, box-shadow .15s ease, background .15s ease;
        }
        textarea { resize: vertical; }
        .form-control:hover, .form-select:hover,
        input:hover, textarea:hover, select:hover {
            border-color: var(--arc-purple) !important;
        }
        .form-control:focus, .form-select:focus,
        input:focus, textarea:focus, select:focus {
            border-color: var(--arc-cyan) !important;
            background: var(--arc-bg-1) !important;
            box-shadow:
                0 0 0 .15rem rgba(167,139,250,.18),
                inset 0 0 12px rgba(167,139,250,.10) !important;
            /* outline: 0 solo cuando el foco viene de mouse (no :focus-visible).
               Para teclado mantenemos el outline nativo del navegador para
               garantizar visibilidad de foco WCAG 2.4.7. */
        }
        .form-control:focus:not(:focus-visible), .form-select:focus:not(:focus-visible),
        input:focus:not(:focus-visible), textarea:focus:not(:focus-visible),
        select:focus:not(:focus-visible) {
            outline: 0;
        }
        .form-control:focus-visible, .form-select:focus-visible,
        input:focus-visible, textarea:focus-visible, select:focus-visible {
            outline: 2px solid var(--arc-cyan);
            outline-offset: 2px;
        }
        .form-control::placeholder, input::placeholder, textarea::placeholder {
            color: var(--arc-text-muted) !important;
            font-style: italic;
        }
        .form-label, label {
            font-family: var(--arc-font-pixel);
            font-size: .85rem;
            letter-spacing: normal;
            text-transform: none;
            color: var(--arc-text-dim);
            margin-bottom: .4rem;
        }
        /* El label se enciende cuando algun input del grupo tiene foco. */
        .mb-3:focus-within > .form-label,
        .form-group:focus-within > .form-label,
        .form-group:focus-within > label {
            color: var(--arc-cyan);
            text-shadow: var(--arc-glow-cyan);
        }

        /* ── Calendarios / horas: glifo cyan propio ──
           El indicador nativo es un glifo del navegador; con color-scheme
           dark sale blanco. Lo sustituimos por un SVG cyan inline para que
           combine con el tema. Calendario para date/month/week, reloj para
           time. Caja de hover con tinte cyan para feedback. */
        input[type=date]::-webkit-calendar-picker-indicator,
        input[type=datetime-local]::-webkit-calendar-picker-indicator,
        input[type=time]::-webkit-calendar-picker-indicator,
        input[type=month]::-webkit-calendar-picker-indicator,
        input[type=week]::-webkit-calendar-picker-indicator {
            cursor: pointer;
            width: 1.5rem;
            height: 1.5rem;
            padding: 3px;
            border-radius: 3px;
            background-repeat: no-repeat;
            background-position: center;
            background-size: 1rem;
            transition: background-color .15s ease, transform .08s ease;
        }
        input[type=date]::-webkit-calendar-picker-indicator,
        input[type=datetime-local]::-webkit-calendar-picker-indicator,
        input[type=month]::-webkit-calendar-picker-indicator,
        input[type=week]::-webkit-calendar-picker-indicator {
            background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23A78BFA' stroke-width='1.4' stroke-linecap='round'%3E%3Crect x='1.5' y='2.6' width='13' height='11.9' rx='1.6'/%3E%3Cpath d='M1.5 6.2h13M5 1v3M11 1v3'/%3E%3C/svg%3E");
        }
        input[type=time]::-webkit-calendar-picker-indicator {
            background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23A78BFA' stroke-width='1.4' stroke-linecap='round'%3E%3Ccircle cx='8' cy='8' r='6.4'/%3E%3Cpath d='M8 4.4V8l2.6 2'/%3E%3C/svg%3E");
        }
        input[type=date]::-webkit-calendar-picker-indicator:hover,
        input[type=datetime-local]::-webkit-calendar-picker-indicator:hover,
        input[type=time]::-webkit-calendar-picker-indicator:hover,
        input[type=month]::-webkit-calendar-picker-indicator:hover,
        input[type=week]::-webkit-calendar-picker-indicator:hover {
            background-color: rgba(167,139,250,.18);
        }
        input[type=date]::-webkit-calendar-picker-indicator:active,
        input[type=datetime-local]::-webkit-calendar-picker-indicator:active,
        input[type=time]::-webkit-calendar-picker-indicator:active,
        input[type=month]::-webkit-calendar-picker-indicator:active,
        input[type=week]::-webkit-calendar-picker-indicator:active {
            transform: scale(.88);
        }
        /* Los segmentos editables (dd / mm / aaaa, hh:mm) en fuente mono. */
        input[type=date]::-webkit-datetime-edit,
        input[type=datetime-local]::-webkit-datetime-edit,
        input[type=time]::-webkit-datetime-edit {
            font-family: var(--arc-font-mono);
            font-size: 1.05rem;
            letter-spacing: .03em;
        }
        ::-webkit-datetime-edit-text { color: var(--arc-text-muted); padding: 0 .12em; }
        ::-webkit-datetime-edit-day-field:focus,
        ::-webkit-datetime-edit-month-field:focus,
        ::-webkit-datetime-edit-year-field:focus,
        ::-webkit-datetime-edit-hour-field:focus,
        ::-webkit-datetime-edit-minute-field:focus,
        ::-webkit-datetime-edit-ampm-field:focus {
            background: var(--arc-cyan);
            color: var(--arc-bg-0);
            border-radius: 2px;
            outline: none;
        }

        /* Spinners de los number — color-scheme:dark ya los pinta claros;
           solo nos aseguramos de que sean visibles y clicables. */
        input[type=number]::-webkit-inner-spin-button,
        input[type=number]::-webkit-outer-spin-button {
            opacity: 1;
            cursor: pointer;
        }

        /* ── Select: flecha SVG propia en cyan (la nativa es ilegible) ── */
        .form-select, select {
            -webkit-appearance: none;
            appearance: none;
            background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 16 16'%3E%3Cpath fill='%23A78BFA' d='M8 11L2 5h12z'/%3E%3C/svg%3E") !important;
            background-repeat: no-repeat !important;
            background-position: right .75rem center !important;
            padding-right: 2.2rem !important;
        }
        .form-select option, select option {
            background: var(--arc-panel);
            color: var(--arc-text);
        }

        /* ── Input de color (badge de TipoTicket) — sin chrome blanco ── */
        input[type=color] {
            -webkit-appearance: none;
            appearance: none;
            width: 52px !important;
            height: 40px !important;
            padding: 3px !important;
            cursor: pointer;
        }
        input[type=color]::-webkit-color-swatch { border: none; border-radius: 2px; }
        input[type=color]::-webkit-color-swatch-wrapper { padding: 0; }

        /* ── Input de archivo — boton arcade integrado ── */
        input[type=file] {
            border-style: dashed !important;
            color: var(--arc-text-dim) !important;
            padding: .5rem !important;
            cursor: pointer;
        }
        input[type=file]:hover { border-color: var(--arc-cyan) !important; }
        input[type=file]::file-selector-button,
        input[type=file]::-webkit-file-upload-button {
            font-family: var(--arc-font-pixel);
            font-size: .85rem;
            letter-spacing: .01em;
            text-transform: none;
            background: transparent;
            color: var(--arc-cyan);
            border: 2px solid var(--arc-cyan);
            border-radius: 3px;
            padding: .4rem .8rem;
            margin-right: .8rem;
            cursor: pointer;
            transition: background .15s, color .15s;
        }
        input[type=file]::file-selector-button:hover,
        input[type=file]::-webkit-file-upload-button:hover {
            background: var(--arc-cyan);
            color: var(--arc-bg-0);
        }

        /* ── Checkbox / radio / range — accent arcade ──
           accent-color + color-scheme:dark dejan el control nativo oscuro
           con el tilde en cyan; reseteamos el borde/padding que la regla
           generica de inputs les habia aplicado de mas. */
        input[type=checkbox], input[type=radio] {
            accent-color: var(--arc-cyan);
            width: 1.15rem !important;
            height: 1.15rem !important;
            padding: 0 !important;
            border: 0 !important;
            background: transparent !important;
            box-shadow: none !important;
            vertical-align: -.15rem;
            cursor: pointer;
        }
        input[type=range] {
            accent-color: var(--arc-cyan);
            border: 0 !important;
            background: transparent !important;
            padding: 0 !important;
        }
        /* Bootstrap .form-check-input — recolor sin perder el tilde SVG. */
        .form-check-input:checked {
            background-color: var(--arc-cyan) !important;
            border-color: var(--arc-cyan) !important;
            box-shadow: none;
        }
        .form-check-label {
            font-family: var(--arc-font-body);
            text-transform: none;
            letter-spacing: 0;
            color: var(--arc-text);
        }

        /* ── Mensajes de ayuda y validacion ── */
        .form-text, .help-block, small.text-muted, .text-white-50 small {
            color: var(--arc-text-muted) !important;
            font-size: .85rem;
        }
        .invalid-feedback, .error-msg, .errorlist, ul.errorlist li {
            color: var(--arc-red) !important;
            font-family: var(--arc-font-mono);
            font-size: .98rem;
            list-style: none;
            padding-left: 0;
            margin-top: .25rem;
        }
        .form-control.is-invalid, input.is-invalid,
        select.is-invalid, .is-invalid {
            border-color: var(--arc-red) !important;
        }

        /* Progress bars con estilo retro. */
        .progress {
            background: rgba(167,139,250,.10) !important;
            border: 1px solid var(--arc-line);
            border-radius: 2px !important;
            overflow: hidden;
            height: 12px;
        }
        .progress-bar {
            background: linear-gradient(90deg, var(--arc-cyan), var(--arc-magenta)) !important;
            box-shadow: none;
            transition: width .4s ease;
        }
        .progress-bar.bg-success { background: var(--arc-green) !important; box-shadow: 0 0 8px rgba(54,255,139,.4); }
        .progress-bar.bg-warning { background: var(--arc-yellow) !important; box-shadow: 0 0 8px rgba(255,212,0,.4); }
        .progress-bar.bg-danger  { background: var(--arc-red) !important; }
        .progress-bar.bg-info    { background: var(--arc-cyan) !important; }

        /* Tablas. */
        table, .table {
            color: var(--arc-text) !important;
            border-color: var(--arc-line) !important;
        }
        .table > :not(caption) > * > * {
            background: transparent !important;
            color: var(--arc-text) !important;
            border-color: var(--arc-line) !important;
        }
        .table thead th {
            font-family: var(--arc-font-pixel);
            /* Subido de .58rem a .7rem por legibilidad: en tablas de gestion
               (tipos_ticket, wallet, dashboard) los headers son funcionales,
               no decorativos. */
            font-size: .72rem;
            letter-spacing: .05em;
            text-transform: uppercase;
            color: var(--arc-magenta) !important;
        }

        /* ═════════════════════════════════════════════════════════════
           Layout: header, footer, breadcrumbs
        ═════════════════════════════════════════════════════════════ */

        /* Skip-link accesible — visible al recibir foco con teclado. */
        .skip-link {
            position: absolute;
            left: -9999px;
            top: auto;
            width: 1px; height: 1px;
            overflow: hidden;
            background: var(--arc-magenta);
            color: var(--arc-bg-0);
            padding: 8px 16px;
            z-index: 9999;
            font-family: var(--arc-font-pixel);
            font-size: .65rem;
        }
        .skip-link:focus { left: 0; top: 0; width: auto; height: auto; }

        /* Contenedor principal — sobre las capas de fondo (scanlines/grid).
           Antes era un style="" inline en base.html, bloqueado por la CSP. */
        #main-content { position: relative; z-index: 1; }

        /* Helper de altura mínima usado por las pantallas de auth (login,
           registro, recuperar, 2FA) — antes iba en style="min-height:80vh"
           inline y la CSP lo bloqueaba. */
        .min-vh-80 { min-height: 80vh; }

        /* Containers angostos para flujos centrados (encuestas, etc.). */
        .container-narrow    { max-width: 600px; }
        .container-narrow-md { max-width: 720px; }

        /* Emoji grande para hero/estados (antes style="font-size:3rem"). */
        .emoji-lg { font-size: 3rem; }

        /* Tamaños de iconos reutilizables (antes <i style="font-size:Xrem">). */
        .icon-md { font-size: 1.25rem; }
        .icon-lg { font-size: 1.5rem; }
        .icon-xl { font-size: 2rem; }

        /* Header arcade. */
        header .navbar {
            background: linear-gradient(180deg, rgba(10,0,20,.95) 0%, rgba(17,0,40,.95) 100%) !important;
            backdrop-filter: blur(8px);
            border-bottom: 2px solid var(--arc-magenta);
            box-shadow: inset 0 -1px 0 var(--arc-cyan);
        }
        /* El logo es el UNICO lugar donde sobrevive la tipografia pixelada, y por
           eso la nombra literal en vez de usar --arc-font-pixel: esa variable se
           reapunta a Inter mas abajo para apagar la pixelada en el resto del
           sitio (h1-h3, .btn, .badge, labels, cabeceras de tabla...). Si el logo
           usara la variable, se la llevaria por delante y no quedaria ni el
           guiño de marca. */
        .navbar-brand {
            font-family: "Outfit", system-ui, sans-serif;
            /* 800: el impacto del logo viene de la MASA tipografica, no de
               efectos. Es lo que permite que se vea contundente sin halo. */
            font-weight: 800;
            font-size: 1.35rem !important;
            /* Tracking bajo, no alto: en extra-bold el aire entre letras resta
               peso visual, que es justo lo que aca queremos conservar. */
            letter-spacing: -.01em;
            text-transform: none;
            transition: opacity .15s ease;
        }
        /* Bicolor: el quiebre en la silaba divide la palabra en dos ideas y la
           hace mas memorable. "PASS" lleva el violeta porque es la mitad que
           dice a que se dedica la marca. Contrastes sobre #141019:
             #EDE9F2 = 15.69:1     #9D5CFF = 4.84:1  (logo es texto grande) */
        .navbar-brand .brand-nexo { color: var(--arc-text); }
        .navbar-brand .brand-pass { color: #9D5CFF; }
        .navbar-brand:hover { opacity: .85; }
        .navbar-brand:hover .brand-nexo,
        .navbar-brand:hover .brand-pass { color: inherit; }
        /* La regla :hover anterior pintaba el logo entero de un color y le ponia
           text-shadow. Con el logo bicolor eso aplanaba las dos silabas en un
           solo tono y perdia justamente el efecto. El hover ahora es la bajada
           de opacidad de mas arriba, que respeta los dos colores. */

        /* Navegacion principal. Historia: .58rem -> .7rem -> 1rem.
           El paso a .7rem (~11px) ya reconocia que son texto funcional, pero se
           quedo corto: la navegacion terminaba siendo el texto MAS CHICO del
           header —11.2px— contra 14.4px de los botones y 17.6px del logo. Al reves
           de lo que la jerarquia pide, y directamente incomodo a partir de los 45.
        
           1rem + peso 500: gana presencia sin acercarse al 600 del logo, asi que
           la jerarquia se sostiene por tamaño Y peso, no por hacer chico el menu.
        
           letter-spacing a 0: el tracking ayuda en mayusculas grandes y estorba en
           texto de interfaz — separa las letras y rompe la forma de la palabra,
           que es justo de lo que depende la lectura rapida.
        
           El padding es lo menos visible y lo mas grave: con 7px y texto de 11.2px
           cada item medía ~25px de alto, al borde de los 24px que exige WCAG 2.2
           (2.5.8) y sin margen. Con .5rem pasa a ~40px. */
        .nav-pill {
            font-family: var(--arc-font-pixel);
            font-size: 1rem;
            font-weight: 500;
            letter-spacing: 0;
            color: var(--arc-text-dim) !important;
            border-radius: 6px;
            padding: .5rem .85rem;
            transition: background .15s, color .15s;
        }
        
        /* Con mas padding interno alcanza poco gap externo: los items se separan
           solos y no se pega uno con otro al crecer. */
        .navbar-nav {
            gap: .25rem;
        }
        .nav-pill:hover, .nav-pill.active {
            background: rgba(167,139,250,.12);
            color: var(--arc-cyan) !important;
            text-shadow: var(--arc-glow-cyan);
        }

        /* Dropdown menu: panel arcade. */
        .dropdown-menu {
            background: var(--arc-panel) !important;
            backdrop-filter: blur(10px);
            border: 2px solid var(--arc-line) !important;
            border-radius: 3px !important;
            box-shadow: var(--nx-shadow-md);
        }
        .dropdown-item {
            color: var(--arc-text) !important;
            font-family: var(--arc-font-body);
            font-size: .9rem;
            padding: .55rem 1rem;
        }
        .dropdown-item:hover {
            background: rgba(167,139,250,.12) !important;
            color: var(--arc-cyan) !important;
        }
        .dropdown-divider { border-color: var(--arc-line) !important; }

        /* Breadcrumbs. */
        .breadcrumb-cosmic, .breadcrumb {
            background: transparent !important;
            padding: .25rem 0;
            margin: 0;
            font-family: var(--arc-font-mono);
            font-size: 1rem;
        }
        .breadcrumb-item a, .breadcrumb-cosmic .breadcrumb-item a {
            color: var(--arc-text-muted);
            text-decoration: none;
        }
        .breadcrumb-item a:hover, .breadcrumb-cosmic .breadcrumb-item a:hover {
            color: var(--arc-cyan);
        }
        .breadcrumb-item.active, .breadcrumb-cosmic .breadcrumb-item.active {
            color: var(--arc-text-dim);
        }
        .breadcrumb-item + .breadcrumb-item::before,
        .breadcrumb-cosmic .breadcrumb-item + .breadcrumb-item::before {
            color: var(--arc-magenta) !important;
            content: ">";
        }
        .breadcrumb-wrap {
            padding: .3rem 0 .6rem;
            border-bottom: 1px solid var(--arc-line);
            margin-bottom: 1.5rem;
        }

        /* Glass morphism (alertas, modales) — actualizado a arcade. */
        .glass-morphism {
            background: var(--arc-panel) !important;
            backdrop-filter: blur(10px);
            border: 2px solid var(--arc-line) !important;
            border-radius: 3px !important;
            box-shadow: var(--nx-shadow-sm);
        }

        /* Alert messages.
           El magenta es el default (.alert sin variante de tipo). Las variantes
           semanticas se re-diferencian abajo: esta regla usa !important y, al
           aplicarse por igual a -success/-danger/-warning/-info, aplanaba los
           cuatro al mismo color. Un error se veia identico a una confirmacion,
           dejando el tipo de mensaje sin ninguna senal visual. */
        .alert {
            border-radius: 3px !important;
            border: 2px solid var(--arc-magenta) !important;
            background: rgba(167,139,250,.08) !important;
            color: var(--arc-text) !important;
            box-shadow: var(--nx-shadow-sm);
            font-family: var(--arc-font-body);
        }
        .alert .btn-close {
            filter: invert(1) brightness(1.5);
        }

        /* Variantes semanticas — necesitan !important para ganarle al bloque de
           arriba (misma especificidad: gana el ultimo declarado, pero ambos
           llevan !important, asi que el orden en el archivo es lo que decide).
           El borde izquierdo grueso agrega una segunda senal ademas del color:
           no depender solo del matiz es lo que pide WCAG 1.4.1 (Use of Color),
           y ayuda con daltonismo rojo-verde, el caso mas comun. */
        .alert-success {
            border-color: var(--arc-green) !important;       /* #36ff8b */
            background: rgba(54,255,139,.08) !important;
            border-left-width: 6px !important;
        }
        /* .alert-error: Django emite message.tags="error", no "danger". Sin este
           selector, los messages.error() quedaban con el estilo magenta base. */
        .alert-danger, .alert-error {
            border-color: var(--arc-red) !important;          /* #ff3b6b */
            background: rgba(255,59,107,.10) !important;
            border-left-width: 6px !important;
        }
        .alert-warning {
            border-color: var(--arc-yellow) !important;       /* #ffd400 */
            background: rgba(255,212,0,.10) !important;
            border-left-width: 6px !important;
        }
        .alert-info {
            border-color: var(--arc-cyan) !important;
            background: rgba(167,139,250,.08) !important;
            border-left-width: 6px !important;
        }

        /* Footer. */
        footer {
            font-family: var(--arc-font-pixel);
            font-size: .6rem;
            letter-spacing: .12em;
            color: var(--arc-text-muted);
            border-top: 1px solid var(--arc-line);
            padding-top: 1.5rem;
            margin-top: 4rem;
        }

        /* Animacion de parpadeo para indicadores "live". */
        @keyframes arcade-blink {
            0%, 49%   { opacity: 1; }
            50%, 100% { opacity: .3; }
        }
        .arcade-blink { animation: arcade-blink 1.2s steps(2) infinite; }

        @keyframes arcade-pulse {
            0%, 100% { transform: scale(1);    opacity: 1; }
            50%      { transform: scale(1.05); opacity: .85; }
        }
        .animate-pulse { animation: arcade-pulse 1.8s ease-in-out infinite; }

        /* Responsive: en moviles los headings pixel se vuelven muy intensos.
           Reducimos peso visual sin perder identidad. */
        @media (max-width: 576px) {
            h1, .h1 { font-size: 1.1rem; letter-spacing: .02em; }
            h2, .h2 { font-size: .95rem; }
            /* 1.1rem, no .9rem: el valor viejo estaba calibrado para un logo de
               1.1rem en desktop; con 1.35rem, bajar a .9 lo dejaba desproporcionado
               y perdia el impacto que es el punto de esta variante. */
            .navbar-brand { font-size: 1.1rem !important; }
            .arcade-score { font-size: 1.75rem; }
        }

        /* Respeto a prefers-reduced-motion (accesibilidad). */
        @media (prefers-reduced-motion: reduce) {
            *, *::before, *::after {
                animation-duration: .001ms !important;
                animation-iteration-count: 1 !important;
                transition-duration: .001ms !important;
            }
        }

        /* ═════════════════════════════════════════════════════════════
           Aliases del sistema "cosmic" → arcade (decision de producto).
           Mantienen el markup existente (.cosmic-*, .form-control-cosmic,
           etc.) pero fuerzan el look arcade. Patron ya establecido por
           .glass-morphism arriba. Asi se evita reescribir ~30 templates.
        ═════════════════════════════════════════════════════════════ */

        /* Inputs: ya existe .galactic-input — replicamos su look. */
        .cosmic-input,
        .form-control-cosmic {
            background: var(--arc-bg-1) !important;
            border: 2px solid var(--arc-line) !important;
            border-radius: 3px !important;
            color: var(--arc-text) !important;
            font-family: var(--arc-font-body);
            padding: .55rem .85rem;
        }
        .cosmic-input::placeholder,
        .form-control-cosmic::placeholder {
            color: var(--arc-text-muted) !important;
        }
        .cosmic-input:focus,
        .form-control-cosmic:focus {
            border-color: var(--arc-cyan) !important;
            box-shadow: 0 0 0 3px rgba(167,139,250, .15) !important;
            background: var(--arc-panel) !important;
        }
        /* :focus-visible para teclado (WCAG 2.4.7) — outline alto contraste */
        .cosmic-input:focus:not(:focus-visible),
        .form-control-cosmic:focus:not(:focus-visible) { outline: none; }
        .cosmic-input:focus-visible,
        .form-control-cosmic:focus-visible {
            outline: 2px solid var(--arc-cyan);
            outline-offset: 2px;
        }

        /* Labels: pixel font, uppercase, alineado con .arcade-label. */
        .form-label-cosmic {
            font-family: var(--arc-font-pixel) !important;
            font-size: .85rem !important;
            letter-spacing: normal !important;
            text-transform: none;
            color: var(--arc-text-dim) !important;
            margin-bottom: .4rem !important;
        }

        /* Botones cosmic → btn-arcade-primary equivalente. */
        .btn-cosmic,
        .mk-btn-cosmic {
            background: var(--arc-cyan) !important;
            color: var(--arc-bg-0) !important;
            border: 2px solid var(--arc-cyan) !important;
            border-radius: 3px !important;
            font-family: var(--arc-font-pixel);
            font-size: .9rem;
            letter-spacing: .01em;
            text-transform: none;
            box-shadow: var(--nx-shadow-sm);
            transition: background .15s, box-shadow .15s, transform .05s;
        }
        .btn-cosmic:hover,
        .mk-btn-cosmic:hover {
            background: #4dffff !important;
            color: var(--arc-bg-0) !important;
            box-shadow: var(--nx-shadow-md);
        }
        .btn-cosmic:active,
        .mk-btn-cosmic:active {
            transform: translateY(2px);
            box-shadow: none;
        }
        .btn-cosmic:focus-visible,
        .mk-btn-cosmic:focus-visible {
            outline: 2px solid var(--arc-magenta);
            outline-offset: 2px;
        }

        /* Field de solo-lectura (perfil): caja con borde arcade. */
        .cosmic-data-field {
            background: var(--arc-bg-1) !important;
            border: 1px solid var(--arc-line) !important;
            border-radius: 3px !important;
            color: var(--arc-text) !important;
            font-family: var(--arc-font-body);
        }
        .cosmic-data-field:hover {
            border-color: var(--arc-cyan) !important;
        }

        /* Color "iris" del sistema cosmic → cyan arcade (links accent). */
        .text-iris { color: var(--arc-cyan) !important; }

        /* Card de acceso (login/registro) — adopta look arcade-card. */
        .access-card {
            background: linear-gradient(180deg, var(--arc-panel) 0%, var(--arc-bg-1) 100%) !important;
            border: 2px solid var(--arc-line) !important;
            border-radius: 4px !important;
            box-shadow:
                inset 0 0 0 1px rgba(167,139,250, .10),
                0 4px 0 rgba(0, 0, 0, .4);
        }

        /* Boton "ignicion" (registro_organizador) — primario arcade. */
        .btn-ignicion {
            background: var(--arc-cyan) !important;
            color: var(--arc-bg-0) !important;
            border: 2px solid var(--arc-cyan) !important;
            font-family: var(--arc-font-pixel);
            letter-spacing: .01em;
            text-transform: none;
        }

/* ── <summary> interactivo ────────────────────────────────────────────────────
   Regla global en vez de style="cursor:pointer" inline en cada template: la CSP
   declara style-src [self, nonce] sin 'unsafe-inline', y los nonces NO aplican
   a atributos style="" — un inline queda bloqueado en produccion (en dev no se
   nota porque la CSP va en report-only). Un <summary> siempre es clickeable,
   asi que corresponde que sea global. */
summary {
    cursor: pointer;
}

/* ── .game-over-icon (estado vacío) ───────────────────────────────────────────
   Icono grande para estados "sin resultados" (antes style="font-size:...;
   color:..." inline, bloqueado por la CSP: style-src-attr hereda de style-src
   y un atributo style="" no puede llevar nonce). Base 4rem, igual que la copia
   local que tenía home/index.html en su <style nonce>. El modificador --sm es
   para landings de categoría, donde el icono va más chico dentro de una
   tarjeta angosta. */
.game-over-icon {
    font-size: 4rem;
    color: var(--arc-magenta);
    text-shadow: var(--arc-glow-magenta);
}
.game-over-icon--sm { font-size: 3.2rem; }

/* Tarjeta de estado vacío en landings de categoría (antes style="max-width:560px" inline). */
.cat-empty-card { max-width: 560px; }

/* ── .hero-cta-* (botones de llamada a la accion) ─────────────────────────────
   MISMO caso que .game-over-icon mas arriba: estas clases vivian solo en el
   <style nonce> local de home/templates/home/index.html, y categoria_landing.html
   las reusaba sin tenerlas definidas — los 4 botones de las 8 landings de
   categoria se renderizaban como enlaces de texto pelado en produccion (el
   <style> de una plantilla no se comparte con otra aunque extiendan base.html).
   Promovidas aca para que haya una sola fuente. Si otra plantilla necesita un
   CTA, usa estas clases y no vuelve a copiarlas localmente. */
.hero-cta-group {
    display: flex;
    flex-wrap: wrap;
    gap: 1rem;
    justify-content: center;
    margin-bottom: 1.5rem;
}
.hero-cta-primary,
.hero-cta-secondary {
    font-family: var(--arc-font-pixel);
    font-size: .75rem;
    letter-spacing: .12em;
    text-transform: uppercase;
    padding: .85rem 1.6rem;
    border-radius: 3px;
    text-decoration: none;
    transition: transform .05s, box-shadow .15s, background .15s;
    display: inline-flex;
    align-items: center;
    gap: .5rem;
}
.hero-cta-primary {
    background: var(--arc-cyan);
    color: var(--arc-bg-0);
    border: 2px solid var(--arc-cyan);
    box-shadow: 0 4px 0 rgba(167,139,250, .35);
}
/* El hover era un literal #4dffff (cyan) heredado del tema viejo: sobre el
   violeta actual destellaba de otro color. Ahora es un paso mas claro del
   mismo acento. */
.hero-cta-primary:hover {
    background: #C4B5FD;
    color: var(--arc-bg-0);
    box-shadow: 0 6px 0 rgba(167,139,250, .5);
}
.hero-cta-primary:active {
    transform: translateY(2px);
    box-shadow: 0 2px 0 rgba(167,139,250, .35);
}
.hero-cta-secondary {
    background: transparent;
    color: var(--arc-magenta);
    border: 2px solid var(--arc-magenta);
    box-shadow: 0 4px 0 rgba(167,139,250, .25);
}
.hero-cta-secondary:hover {
    background: rgba(167,139,250, .12);
    color: var(--arc-magenta);
    box-shadow: 0 6px 0 rgba(167,139,250, .4);
}
.hero-cta-primary:focus-visible,
.hero-cta-secondary:focus-visible {
    outline: 2px solid var(--arc-yellow);
    outline-offset: 3px;
}

/* ── .faq-list (acordeon de preguntas frecuentes) ─────────────────────────────
   Estaba copiado en CUATRO plantillas con cuatro nombres distintos
   (.home-faq, .cat-faq, .tk-faq, .faq-item) y ya habia divergido: una tenia
   min-height, otra no; productor.html usaba literales #6D5FD3 en vez de
   tokens, sobrevivientes del tema viejo. Mismo desenlace que con
   .game-over-icon y .hero-cta-*: la copia local termina divergiendo.
   Marcado esperado:
     <div class="faq-list">
       <details><summary><span>Pregunta</span>
         <i class="bi bi-chevron-down chev" aria-hidden="true"></i></summary>
         <div class="faq-a">Respuesta</div></details>
     </div> */
.faq-list details {
    background: rgba(255,255,255,0.04);
    border: 1px solid var(--arc-line);
    border-radius: 10px;
    margin-bottom: .7rem;
    overflow: hidden;
}
.faq-list summary {
    cursor: pointer;
    list-style: none;
    padding: .9rem 1.1rem;
    /* 48px garantiza el target tactil aunque la pregunta sea muy corta. */
    min-height: 48px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .75rem;
    font-family: var(--arc-font-body);
    font-weight: 700;
    color: var(--arc-text);
}
.faq-list summary::-webkit-details-marker { display: none; }
.faq-list summary:hover { background: rgba(167,139,250,.08); }
.faq-list summary:focus-visible {
    outline: 2px solid var(--arc-yellow);
    outline-offset: -2px;
}
.faq-list details[open] summary { color: var(--arc-cyan); }
.faq-list summary .chev {
    color: var(--arc-cyan);
    flex-shrink: 0;
    transition: transform .2s;
}
.faq-list details[open] summary .chev { transform: rotate(180deg); }
.faq-list .faq-a {
    padding: 0 1.1rem 1rem;
    font-family: var(--arc-font-body);
    color: var(--arc-text-dim);
    line-height: 1.55;
    font-size: .95rem;
}
@media (prefers-reduced-motion: reduce) {
    .faq-list summary .chev { transition: none; }
}

/* =============================================================================
   Banner de consentimiento de cookies (Ley 21.719)
   =============================================================================
   Fijo abajo, no modal: no bloquea la navegacion ni atrapa el foco. La ley
   exige una decision inequivoca, no secuestrar el sitio hasta obtenerla.

   Los dos botones comparten exactamente la misma clase (btn-outline-light) a
   proposito: darle mas peso visual a "Aceptar" que a "Rechazar" es un dark
   pattern que la ley descarta de forma explicita. Si algun dia alguien quiere
   "destacar" uno de los dos, esto es lo que hay que releer antes.
   ========================================================================== */
.nx-cookie-banner {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1080;                      /* sobre el contenido, bajo los modales de Bootstrap (1055+ es backdrop) */
    background: var(--arc-panel, #0e0024);
    border-top: 2px solid var(--arc-line, #2a0050);
    box-shadow: 0 -4px 24px rgba(0, 0, 0, .5);
    padding: .9rem 1rem;
}

.nx-cookie-inner {
    max-width: 1100px;
    margin: 0 auto;
    display: flex;
    align-items: center;
    gap: 1rem;
    flex-wrap: wrap;
}

.nx-cookie-texto {
    /* --arc-text (no --arc-text-dim ni .text-white-50): es un texto que pide una
       decision legal, tiene que leerse sin esfuerzo. */
    color: var(--arc-text, #f1e8ff);
    flex: 1 1 22rem;
    font-size: .875rem;
    line-height: 1.45;
}

.nx-cookie-link {
    color: var(--arc-text, #f1e8ff);
    text-decoration: underline;
}

.nx-cookie-acciones {
    display: flex;
    gap: .5rem;
    flex: 0 0 auto;
}

/* En pantallas chicas los botones ocupan el ancho y quedan lado a lado, con el
   mismo tamano: sigue sin haber jerarquia visual entre aceptar y rechazar. */
@media (max-width: 575.98px) {
    .nx-cookie-acciones { width: 100%; }
    .nx-cookie-acciones .btn { flex: 1 1 0; }
}
