/* Tokens de tema compartidos por dashboard.ejs y login.ejs — GC-THEME-SPEC.md:
   "Architecture: one shared stylesheet, not per-page copies". No dupliques estos
   bloques :root inline en una vista; si falta un token nuevo, añádelo aquí.
   Cada vista sigue trayendo su propio <style> con reglas que no son tokens
   (layout, tipografía de componentes, etc.), todas consumiendo var(--token).

   Contraste de botones (texto blanco sobre fondo sólido): --danger-fill,
   --success, --warning y --neutral son fondos de botón con texto blanco fijo
   (button { color: #fff }), así que sus valores están elegidos para dar
   ≥4.5:1 contra blanco en TODOS los casos, sin variar por modo — el contraste
   texto-blanco-sobre-fondo no depende del fondo de la página. --success y
   --warning además no varían por marca: son colores de estado, no derivados
   del acento de marca (ver "Contrast rules" en GC-THEME-SPEC.md, regla 3).
   --danger sigue siendo el token de TEXTO (usado por .error, bordes de flash,
   etc.) — ese sí varía por modo, para leerse bien sobre --card-bg/--bg, no
   sobre blanco — por eso es un token aparte de --danger-fill, no el mismo.
   Mismo motivo para --warning-text (usado por .stat.warn .value): --warning
   está tuneado para texto blanco encima, no para leerse solo sobre --stat-bg,
   así que necesita su propio valor por modo en vez de reusar --warning/-hover. */

/* --- Paleta clara (por defecto) --- marca "classic" (paleta azul original) ---
   El brand GameCoder queda opt-in, no forzado a todo visitante; ver el bloque
   [data-brand="gamecoder"] más abajo para la paleta GameCoder Studios. */
:root {
    --bg: #f4f4f4;
    --card-bg: #ffffff;
    --text: #333333;
    --heading: #2c3e50;
    --muted: #7f8c8d;
    --border: #dddddd;
    --border-soft: #e1e4e8;
    --th-bg: #ecf0f1;
    --row-alt: #f9f9f9;
    --form-bg: #fafafa;
    --input-bg: #ffffff;
    --input-border: #cccccc;
    --shadow: rgba(0, 0, 0, 0.1);
    --link: #3498db;

    --primary: #1f618d; --primary-hover: #154360;
    --danger: #c0392b;
    --neutral: #707070; --neutral-hover: #595959;

    /* Botón sólido con texto blanco, brand-agnóstico (ver nota de contraste arriba). */
    --danger-fill: #c0392b; --danger-fill-hover: #a93226;
    --success: #1e7e42; --success-hover: #186634;
    --warning: #a15c00; --warning-hover: #8a4f00;
    --warning-text: #a15c00;

    --flash-success-bg: #d5f4e6; --flash-success-text: #145a32; --flash-success-border: #27ae60;
    --flash-error-bg: #fdecea; --flash-error-text: #922b21; --flash-error-border: #e74c3c;
    --flash-info-bg: #eaf2fb; --flash-info-text: #1b4f72; --flash-info-border: #3498db;

    --stat-bg: #f8f9fa;
    --badge-idle-bg: #ecf0f1; --badge-idle-text: #7f8c8d;
    --badge-running-bg: #fdebd0; --badge-running-text: #b9770e;
    --badge-success-bg: #d5f4e6; --badge-success-text: #145a32;
    --badge-error-bg: #fdecea; --badge-error-text: #922b21;

    --toggle-bg: #e4e7ea; --toggle-bg-hover: #d5d9dd; --toggle-border: #c9ced3;
}

/* --- Paleta oscura: por preferencia del sistema... --- */
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) { color-scheme: dark; }
    :root:not([data-theme="light"]) {
        --bg: #14181c;
        --card-bg: #1c2127;
        --text: #d8dee4;
        --heading: #eef2f6;
        --muted: #8a97a3;
        --border: #333c46;
        --border-soft: #2b323b;
        --th-bg: #232a32;
        --row-alt: #20262d;
        --form-bg: #1a1f25;
        --input-bg: #14181c;
        --input-border: #3a4450;
        --shadow: rgba(0, 0, 0, 0.4);
        --link: #5dade2;
        --danger: #f5a99f;
        --warning-text: #f0b95c;

        --flash-success-bg: #16342380; --flash-success-text: #7fd8a4; --flash-success-border: #27ae60;
        --flash-error-bg: #4a201c80; --flash-error-text: #f5a99f; --flash-error-border: #e74c3c;
        --flash-info-bg: #1b374f80; --flash-info-text: #8fc6f2; --flash-info-border: #3498db;

        --stat-bg: #1a1f25;
        --badge-idle-bg: #2b323b; --badge-idle-text: #a7b1bb;
        --badge-running-bg: #4a380f; --badge-running-text: #f0b95c;
        --badge-success-bg: #163423; --badge-success-text: #7fd8a4;
        --badge-error-bg: #4a201c; --badge-error-text: #f5a99f;

        --toggle-bg: #2b323b; --toggle-bg-hover: #384250; --toggle-border: #4a5560;
    }
}
/* --- ...o por el interruptor manual, que siempre gana --- */
:root[data-theme="dark"] {
    color-scheme: dark;
    --bg: #14181c; --card-bg: #1c2127; --text: #d8dee4; --heading: #eef2f6;
    --muted: #8a97a3; --border: #333c46; --border-soft: #2b323b; --th-bg: #232a32;
    --row-alt: #20262d; --form-bg: #1a1f25; --input-bg: #14181c; --input-border: #3a4450;
    --shadow: rgba(0, 0, 0, 0.4); --link: #5dade2;
    --danger: #f5a99f;
    --warning-text: #f0b95c;
    --flash-success-bg: #16342380; --flash-success-text: #7fd8a4; --flash-success-border: #27ae60;
    --flash-error-bg: #4a201c80; --flash-error-text: #f5a99f; --flash-error-border: #e74c3c;
    --flash-info-bg: #1b374f80; --flash-info-text: #8fc6f2; --flash-info-border: #3498db;
    --stat-bg: #1a1f25;
    --badge-idle-bg: #2b323b; --badge-idle-text: #a7b1bb;
    --badge-running-bg: #4a380f; --badge-running-text: #f0b95c;
    --badge-success-bg: #163423; --badge-success-text: #7fd8a4;
    --badge-error-bg: #4a201c; --badge-error-text: #f5a99f;
    --toggle-bg: #2b323b; --toggle-bg-hover: #384250; --toggle-border: #4a5560;
}
:root[data-theme="light"] { color-scheme: light; }

/* --- Marca "gamecoder" (brand GC Studios), opt-in vía el interruptor ---
   Tokens y valores per GC-THEME-SPEC.md. --primary/--primary-hover usan el
   --fill-strong de la spec (no el --accent #FF003E crudo): GC Red no tiene
   contraste suficiente como fondo sólido con texto blanco (~3.95:1, bajo el
   4.5:1 de AA) — ver "Why --accent and --fill-strong are separate" ahí.
   --success/--warning/--danger-fill NO se redeclaran aquí: son brand-agnósticos
   (ver nota de contraste arriba) y ya vienen del :root base. */
:root[data-brand="gamecoder"] {
    --bg: #f4f4f4; --card-bg: #ffffff; --text: #333333; --heading: #000000; --muted: #707070;
    --border: #dddddd; --border-soft: #e1e4e8; --th-bg: #ececec; --row-alt: #f9f9f9; --form-bg: #fafafa;
    --input-bg: #ffffff; --input-border: #cccccc; --shadow: rgba(0, 0, 0, 0.1); --link: #ff003e;
    --primary: #c4002f; --primary-hover: #a3001f;
    --danger: #c0392b;
    --neutral: #707070; --neutral-hover: #595959;
    --flash-success-bg: #d5f4e6; --flash-success-text: #145a32; --flash-success-border: #27ae60;
    --flash-error-bg: #fdecea; --flash-error-text: #922b21; --flash-error-border: #c0392b;
    --flash-info-bg: #eaf2fb; --flash-info-text: #1b4f72; --flash-info-border: #3498db;
    --stat-bg: #f8f8f8;
    --badge-idle-bg: #ececec; --badge-idle-text: #707070;
    --badge-running-bg: #fdebd0; --badge-running-text: #b9770e;
    --badge-success-bg: #d5f4e6; --badge-success-text: #145a32;
    --badge-error-bg: #fdecea; --badge-error-text: #922b21;
    --toggle-bg: #e4e7ea; --toggle-bg-hover: #d5d9dd; --toggle-border: #c9ced3;
}
@media (prefers-color-scheme: dark) {
    :root[data-brand="gamecoder"]:not([data-theme="light"]) {
        --bg: #1a1a19; --card-bg: #2d2d2b; --text: #e0e0e0; --heading: #ffffff; --muted: #a5a5a5;
        --border: #444442; --border-soft: #3a3a38; --th-bg: #353533; --row-alt: #262624; --form-bg: #232321;
        --input-bg: #1a1a19; --input-border: #4a4a48; --shadow: rgba(0, 0, 0, 0.4); --link: #ff4d73;
        /* --primary NO se redeclara: #c4002f/#a3001f ya son seguros como fondo con
           texto blanco en cualquier modo (ver nota arriba); redeclararlos aquí con
           un rojo "claro para texto" fue el bug que hacía fallar Eliminar en oscuro. */
        --danger: #e2717a;
        --flash-success-bg: #16342380; --flash-success-text: #7fd8a4; --flash-success-border: #27ae60;
        --flash-error-bg: #4a201c80; --flash-error-text: #f5a99f; --flash-error-border: #c0392b;
        --flash-info-bg: #1b374f80; --flash-info-text: #8fc6f2; --flash-info-border: #3498db;
        --stat-bg: #232321;
        --badge-idle-bg: #3a3a38; --badge-idle-text: #a5a5a5;
        --badge-running-bg: #4a380f; --badge-running-text: #f0b95c;
        --badge-success-bg: #163423; --badge-success-text: #7fd8a4;
        --badge-error-bg: #4a201c; --badge-error-text: #f5a99f;
        --toggle-bg: #3a3a38; --toggle-bg-hover: #454543; --toggle-border: #545452;
    }
}
:root[data-brand="gamecoder"][data-theme="dark"] {
    --bg: #1a1a19; --card-bg: #2d2d2b; --text: #e0e0e0; --heading: #ffffff; --muted: #a5a5a5;
    --border: #444442; --border-soft: #3a3a38; --th-bg: #353533; --row-alt: #262624; --form-bg: #232321;
    --input-bg: #1a1a19; --input-border: #4a4a48; --shadow: rgba(0, 0, 0, 0.4); --link: #ff4d73;
    --danger: #e2717a;
    --flash-success-bg: #16342380; --flash-success-text: #7fd8a4; --flash-success-border: #27ae60;
    --flash-error-bg: #4a201c80; --flash-error-text: #f5a99f; --flash-error-border: #c0392b;
    --flash-info-bg: #1b374f80; --flash-info-text: #8fc6f2; --flash-info-border: #3498db;
    --stat-bg: #232321;
    --badge-idle-bg: #3a3a38; --badge-idle-text: #a5a5a5;
    --badge-running-bg: #4a380f; --badge-running-text: #f0b95c;
    --badge-success-bg: #163423; --badge-success-text: #7fd8a4;
    --badge-error-bg: #4a201c; --badge-error-text: #f5a99f;
    --toggle-bg: #3a3a38; --toggle-bg-hover: #454543; --toggle-border: #545452;
}

/* Bajo el brand GameCoder, encabezados en Russo One; bajo "classic", el stack
   de sistema que ya traía cada vista (declarado en su propio <style>). */
:root[data-brand="gamecoder"] h1, :root[data-brand="gamecoder"] h2 {
    font-family: 'Russo One', 'Inter', sans-serif;
    letter-spacing: .02em;
}
