:root {
  --codex-font-body: 'Segoe UI', system-ui, -apple-system, sans-serif;
  --codex-font-display: 'Cinzel', Georgia, serif;
  --codex-control-min: 44px;
  --codex-bg-deep: #0e0c18;
  --codex-bg-panel: rgba(12, 11, 19, 0.9);
  --codex-bg-field: rgba(10, 10, 17, 0.88);
  --codex-text: #f6eee2;
  --codex-text-muted: rgba(246, 238, 226, 0.76);
  --codex-gold: #f2c66d;
  --codex-gold-strong: #d59a32;
  --codex-violet: #7f45d6;
  --codex-success: #a4ebad;
  --codex-danger: #ffabab;
  --codex-border: rgba(242, 198, 109, 0.34);
  --codex-focus: rgba(242, 198, 109, 0.95);
  --codex-radius-sm: 0.65rem;
  --codex-radius-md: 1rem;
  --codex-space-1: 0.35rem;
  --codex-space-2: 0.65rem;
  --codex-space-3: 1rem;
  --codex-space-4: 1.5rem;
  --codex-shadow-panel: 0 16px 34px rgba(0, 0, 0, 0.32);

  /* ====================================================================
     DARK FANTASY REALISTA — LA PALETA, NO UN AÑADIDO
     ====================================================================

     QUE CAMBIO Y POR QUE. Cuando este bloque se escribió el 20/10 decía
     «añadido, no sustituto: lo de arriba sigue mandando donde ya se usa».
     Esa decisión dejó el producto hablando dos idiomas: la mochila y el
     panel de inicio en hierro y ascua, y el resto en el morado y el oro de
     antes. Medido el 25/10: 2.652 colores escritos a mano en 49 ficheros de
     cliente, 422 de ellos morados que no pertenecen a ninguna paleta, en 24
     ficheros. El propietario lo vio y lo dijo. Así que esto pasa a ser la
     autoridad, y lo de arriba queda como compatibilidad mientras se migra.

     DOS MATERIALES, DECISION DEL PROPIETARIO (25/10). No es un mundo todo
     oscuro: son dos materiales deliberados.

       · EL MUNDO es oscuro. HUD, mapa, mochila, ficha, paneles, botones,
         diálogos, formularios. Hierro frío, cuero gastado, una brasa.
       · EL DOCUMENTO es claro. Grimorio, tarjetas de curso, páginas
         legales: lo que se LEE va en vitela iluminada, con marco oscuro.
         Un libro encendido dentro de un mundo apagado es el contraste del
         género, y un texto largo se lee mejor sobre claro.

     La regla para no equivocarse: ¿esto es una COSA del mundo, o es algo
     ESCRITO que alguien lee? Un botón es una cosa. Una lección es un
     escrito. El marco de un libro es una cosa; su página es un escrito.

     ADMINISTRACION QUEDA FUERA, Y A PROPOSITO. Palabras del propietario:
     «así se distingue cuando estoy en admin y cuando estoy en la web
     normal». `admin-panel.html`, `admin-panel.js`, `admin-student-preview`
     y las extensiones de admin CONSERVAN su lenguaje anterior. No es deuda
     pendiente: es señal. No lo «arregles».

     Cada valor de abajo lleva medido su contraste contra la superficie en
     la que se usa. Lo que es solo superficie va marcado como tal.

     Esos números NO se escriben a ojo: los comprueba
     `npm run check:paleta-unica`, que los recalcula desde este mismo fichero
     y falla si alguno no cuadra. La primera versión de este bloque llevaba
     cinco cifras inventadas --todas hacia el lado seguro, pero inventadas--
     y por eso existe la comprobación. */

  /* ---- El mundo: superficies ---- */
  --codex-ink: #0a0910;              /* superficie: fondo más profundo */
  --codex-iron: #2a2a31;             /* superficie: metal frío */
  --codex-iron-light: #3d3d46;       /* superficie: filo iluminado */
  --codex-leather: #2b2119;          /* superficie: cuero gastado */
  --codex-leather-edge: #4a3826;     /* superficie: canto del cuero */
  --codex-socket: rgba(0, 0, 0, 0.55);        /* hueco vacío */
  --codex-socket-edge: rgba(232, 220, 195, 0.14);

  /* ---- El mundo: tinta y acentos ---- */
  --codex-parchment: #e8dcc3;        /* texto sobre oscuro · 14.59:1 sobre ink */
  --codex-parchment-dim: rgba(232, 220, 195, 0.72);
  --codex-ember: #c9742f;            /* acento cálido · 5.68:1 sobre ink */
  /*
   * Ascua apagada para SUPERFICIES primarias con texto encima: el botón de
   * acceso y la pestaña activa. El ascua normal es demasiado clara para
   * sostener texto --medido el 27/10: el degradado del acceso daba 2,88:1 en
   * su extremo cálido-- y oscurecerla era la única forma de conservar el
   * mismo tono. No es un acento: es el suelo sobre el que se lee.
   */
  --codex-ember-deep: #936015;       /* superficie primaria · 4.65:1 sobre text */
  /* El mismo ascua en canales, para bordes y velos translúcidos: un
     `rgba(var(--codex-ember-rgb), .3)` sigue siendo paleta; un
     `rgba(201, 116, 47, .3)` escrito a mano, no. El respaldo va dentro del
     `var()` para que un fallo de carga no borre el borde entero. */
  --codex-ember-rgb: 201, 116, 47;
  --codex-ember-soft: rgba(201, 116, 47, 0.26);
  --codex-ember-plate: #d98a3f;      /* superficie: placa caliente, cara */
  --codex-ember-plate-deep: #b9631f; /* superficie: placa caliente, canto */
  --codex-blood: #8c2f2f;            /* superficie: peligro contenido */

  /* ---- El documento: vitela ----
     Tomados del grimorio y de las tarjetas de curso que ya existían, no
     inventados: así la migración no mueve lo que ya se veía bien. */
  --codex-vitela: #f5f3e8;           /* superficie: página nueva */
  --codex-vitela-usada: #e8e4d0;     /* superficie: página gastada */
  --codex-vitela-canto: #a98558;     /* superficie: canto y costura */
  --codex-tinta: #2c1810;            /* texto sobre vitela · 15.15:1 */
  --codex-tinta-suave: #5a4432;      /* texto secundario sobre vitela · 8.18:1 */
  --codex-tinta-titulo: #4a2511;     /* títulos sobre vitela · 12.06:1 */

  /* ---- Estados, en el registro del mundo ----
     El verde menta y el rosa de antes eran de otra aplicación. */
  --codex-exito: #7fa86b;            /* acierto · 7.28:1 sobre ink */
  --codex-aviso: #c9a227;            /* atención · 8.19:1 sobre ink */
  --codex-error: #d1604f;            /* error · 5.19:1 sobre ink */

  /* Rarezas: las mismas que ya usa la ficha, aquí nombradas para que las dos
     pantallas no se separen nunca más. */
  --codex-rareza-comun: rgba(232, 220, 195, 0.3);
  --codex-rareza-rara: rgba(96, 165, 250, 0.75);
  --codex-rareza-epica: rgba(192, 132, 252, 0.8);
  --codex-rareza-legendaria: rgba(245, 197, 66, 0.85);
}
