Estado: base implementada
Fecha: 2026-05-05
El tema visual de OPS debe poder cambiarse por usuario sin duplicar pantallas ni reescribir componentes. La UI se apoya en tokens CSS y se activa con data-theme en el elemento html.
minimal: tema principal, sobrio y desaturado.classic: variante clara mas neutra y corporativa.contrast: variante clara con mayor contraste funcional.dark: variante oscura para uso prolongado.catalyst: variante clara tipo app shell SaaS, con mas separacion de superficies y acento de producto.catalyst-warm: variante clara derivada de catalyst, con base crema, sidebar arena y acento terracota.El valor antiguo light se normaliza a minimal.
La prioridad de resolucion queda preparada asi:
app_users.metadata.preferences.theme.localStorage.ops_theme para evitar parpadeos al arrancar.minimal.En fases posteriores se podra anadir preferencia por workspace sin cambiar el contrato de componentes.
Los componentes deben leer tokens en lugar de colores directos:
--c-bg--c-surface--c-surface-alt--c-surface-soft--c-text--c-text-muted--c-border--c-border-strong--c-accent--c-success--c-warning--c-danger--radius-sm--radius-md--radius-lg--button-radius--button-py--button-px--button-font-weight--button-min-height--card-radius--card-padding--table-header-size--table-header-tracking--table-cell-py--table-cell-px--shadow-1--shadow-2GET /api/me/preferences
Devuelve las preferencias normalizadas del usuario autenticado.
PUT /api/me/preferences
Actualiza preferencias permitidas. En esta fase solo acepta:
{ "theme": "minimal" }
Valores validos: minimal, classic, contrast, dark, catalyst, catalyst-warm.
El selector global vive en la barra superior y la pantalla Mi cuenta muestra el mismo control con texto de confirmacion.
Cuando el usuario cambia el tema:
document.documentElement.localStorage.app_users.metadata.preferences.theme.Un tema nuevo no se considera completo si solo cambia la paleta.
Cada variante debe revisar tambien:
--font-ui, --font-display, --font-mono)Ejemplo practico:
catalyst y sus variantes deben incluir ajustes de tipografia y no solo cambio de color, para que el tema tenga identidad visual real.