# Guía de Desarrollo - Sistema de Temas ## Introducción Esta guía está dirigida a desarrolladores que trabajan en Analítica Núcleo y necesitan entender cómo funciona el sistema de temas y cómo mantener la consistencia visual en toda la aplicación. ## Principios Fundamentales ### 1. Siempre Usa Variables CSS **✅ CORRECTO:** ```vue
Contenido
``` **❌ INCORRECTO:** ```vue
Contenido
``` **❌ INCORRECTO:** ```vue
Contenido
``` ### 2. Usa las Clases Utilitarias de Marca Para elementos comunes, usa las clases predefinidas en lugar de duplicar estilos: ```vue

Título

Título

``` ## Variables de Tema Disponibles | Variable CSS | Uso | Ejemplo | |--------------|-----|---------| | `--brand-bg` | Fondo principal de la aplicación | `bg-[var(--brand-bg)]` | | `--brand-surface` | Fondos de elementos elevados (cards, modales) | `bg-[var(--brand-surface)]` | | `--brand-border` | Bordes de elementos | `border-[var(--brand-border)]` | | `--brand-primary` | Color principal (enlaces, botones) | `text-[var(--brand-primary)]` | | `--brand-primary-strong` | Variante más intensa del primario | `bg-[var(--brand-primary-strong)]` | | `--brand-accent` | Color de acento para highlights | `text-[var(--brand-accent)]` | | `--brand-text` | Texto principal | `text-[var(--brand-text)]` | | `--brand-text-muted` | Texto secundario/menos prominente | `text-[var(--brand-text-muted)]` | ## Clases Utilitarias de Marca ### `.brand-shell` Contenedor principal para layouts con gradiente radial. ```vue
``` ### `.brand-card` Tarjetas con estilos consistentes. ```vue

Título de la Card

Contenido

``` ### `.brand-divider` Divisor horizontal decorativo. ```vue
``` ### `.brand-chip` y `.brand-pill` Para pequeños tags o badges. ```vue Estado Badge ``` ### `.brand-table` Estilos para tablas. ```vue
``` ## Patrones de Uso Común ### Cards con Bordes y Sombras ```vue

Descripción del contenido

``` ### Botones con Hover Personalizado ```vue ``` ### Inputs y Formularios ```vue ``` ### Links con Hover ```vue Ver perfil → ``` ### Personalización de Componentes Nuxt UI Muchos componentes de Nuxt UI aceptan la prop `:ui` para personalización: ```vue Botón Personalizado ``` ## Composable `useTheme()` Para manipular el tema programáticamente, usa el composable `useTheme()`: ```vue ``` ## Checklist Pre-Commit Antes de hacer commit de tu código, verifica: - [ ] **No hay colores hardcoded** (`#ffffff`, `#000000`, etc.) - [ ] **No hay clases gray-scale genéricas** (`bg-gray-900`, `text-gray-500`, etc.) - [ ] **Todos los fondos usan** `--brand-bg` o `--brand-surface` - [ ] **Todos los bordes usan** `--brand-border` - [ ] **Todo el texto usa** `--brand-text` o `--brand-text-muted` - [ ] **Los elementos interactivos usan** `--brand-primary` o `--brand-accent` - [ ] **Los hover states usan transparencias** (ej: `hover:bg-[var(--brand-primary)]/10`) - [ ] **Se usan clases utilitarias** cuando sea posible (`.brand-card`, `.brand-shell`, etc.) ## Casos Especiales ### Colores Semánticos (Success, Error, Warning) Para colores que NO son parte del tema (éxito, error, advertencia), puedes usar colores de Tailwind: ```vue
Éxito
Error
Advertencia
Info
Operación exitosa
``` ### Iconos Los iconos deben usar colores del tema: ```vue ``` ### Imágenes y Avatares con Bordes ```vue ``` ### Hover y Focus States Siempre usa transparencias para hover states para que funcionen con cualquier tema: ```vue ``` ## Ejemplos de Migración ### Antes (Incorrecto) ```vue ``` ### Después (Correcto) ```vue ``` ## Errores Comunes y Soluciones ### Error 1: Mezclar Variables con Hardcoded Colors **❌ No hagas esto:** ```vue
Contenido
``` **✅ Haz esto:** ```vue
Contenido
``` ### Error 2: No Considerar el Contraste Asegúrate de que el texto tenga suficiente contraste sobre su fondo: **❌ Mal contraste:** ```vue
Texto importante
``` **✅ Buen contraste:** ```vue
Texto importante
``` ### Error 3: Duplicar Estilos en Lugar de Usar Clases **❌ Duplicación:** ```vue
Card 1
Card 2
``` **✅ Reutilización:** ```vue
Card 1
Card 2
``` ## Testing del Tema Para probar que tu componente respeta el tema: 1. Ve a `/settings` 2. Cambia el tema a "Azul Corporativo" o "Verde Natural" 3. Navega a tu componente 4. Verifica que todos los colores cambien correctamente 5. Verifica que no haya elementos con colores hardcoded que no cambiaron ## Recursos Adicionales - **Documentación del usuario:** `THEME_CUSTOMIZATION.md` - **Composable de temas:** `app/composables/useTheme.ts` - **Variables CSS:** `app/assets/css/main.css` - **Configuración de Nuxt UI:** `app.config.ts` ## Preguntas Frecuentes ### ¿Puedo usar colores de Tailwind como `bg-blue-500`? Solo para estados semánticos (éxito, error, advertencia) que NO forman parte del tema. Para todo lo demás, usa las variables de tema. ### ¿Cómo personalizo un componente de Nuxt UI? Usa la prop `:ui` con las variables de tema: ```vue Contenido ``` ### ¿Qué hago si necesito un color que no está en el tema? Primero pregunta: ¿realmente necesito un color nuevo, o puedo usar uno existente? Si es absolutamente necesario, propón agregar una nueva variable al sistema de temas en lugar de hardcodear el color. ### ¿Cómo manejo dark mode? No necesitas manejarlo manualmente. Las variables CSS ya están optimizadas para dark mode. Solo usa las variables y funcionará automáticamente. --- **Última actualización:** 2025-10-30 **Mantenedor:** Claude Code para Núcleo Río Frío **Versión:** 1.0.0