NovaSaaS Design System
Contemporary — Bento Grid + Dark Mode · v1.0.0

Un sistema que escala sin romper

NovaSaaS utiliza este sistema de diseño para entregar una experiencia coherente entre dashboard, mobile y email. El design token es la única fuente de verdad: nunca hard-codees un color, un espaciado o un radio de borde.

Paleta de color

Todos los valores deben referenciarse via token CSS. Nunca usar hex directamente en componentes.

primary--color-primary · #C800DF
secondary--color-secondary · #E60076
brand gradientprimary → secondary
success--color-success · #16A34A
warning--color-warning · #D97706
danger--color-danger · #DC2626
bg--color-bg · #0A0A0F
surface-1--color-surface-1 · #18181F

Escala tipográfica

Jost (principal + display) + Overpass Mono (labels de sistema, código). Desktop-first, expressive scale.

Display / H1
Jost 900 · 3rem
tracking −0.05em
Automatiza tu empresa
H2 Section
Jost 700 · 1.75rem
tracking −0.03em
Sistema de diseño v1.0
H3 Card Title
Jost 600 · 1.125rem
tracking −0.02em
Métricas de rendimiento
Body MD
Jost 400 · 1rem
lh 1.6
El texto de cuerpo debe mantenerse legible y limpio. Mínimo 4.5:1 de contraste sobre cualquier fondo. Nunca usar font-weight menor de 400 para texto largo.
Label Caps
Overpass Mono 500
0.65rem · tracking 0.12em
ESTADO ACTIVO · MÉTRICAS
Code / Mono
Overpass Mono 400
0.875rem
const revenue = 142_308; // EUR

Botones

Min-height 44px (touch target WCAG). Focus visible obligatorio. Gradient solo en primary; el resto usa color plano o borde.

Variantes
Tamaños

Badges de estado

Siempre usar fondo + borde del mismo color semántico. Overpass Mono garantiza lectura en dashboards densos.

Activo Pendiente Error Procesando Nuevo Archivado

Campos de formulario

Estado focus con outline de 3px a color-primary-focus (transparencia 20%). Error refuerza borde sin depender solo del color.

Nombre legal de tu empresa.
Para informes semanales automáticos.
⚠ Formato inválido. Usa B + 8 dígitos.
Puede modificarse desde Facturación.

Dashboard de NovaSaaS

Grid de 12 columnas. Hero 8 col × 2 row; sidebar 4 col × 2 row; métricas en celdas de 3 col.

Ingresos acumulados · Junio 2026
€ 142.308
+18,4% vs. mes anterior
En objetivo Record mensual
Actividad reciente
MG
María G. aprobó factura #4821
hace 3 min
JR
Agente IA procesó 47 contratos
hace 12 min
AL
Nuevo cliente: Iberdrola FS
hace 28 min
BI
Informe semanal generado
hace 1h
PQ
Alerta: latencia API +120ms
hace 2h
👥
+12%
Usuarios activos
2.847
↑ 318 este mes
Live
Procesos auto.
98.231
↑ 6.4k hoy
💰
+24%
Ahorro estimado
€84k
↑ vs. manual
📊
SLA OK
Uptime
99.97%
30 días
Cuota de módulos · Junio
Facturación automática8.420 / 10.000
Extracción de contratos IA3.100 / 5.000
Alertas y reportes241 / 500
Acciones rápidas

Criterios de accesibilidad

Cada componente debe superar estas comprobaciones antes de merge. Semántica HTML primero; ARIA solo cuando sea necesario.

Contraste texto normal ≥ 4.5:1 (WCAG 1.4.3)
Contraste texto grande ≥ 3:1 (WCAG 1.4.3)
Focus-visible en todos los interactivos (WCAG 2.4.7)
Touch target mínimo 44×44 px (WCAG 2.5.5)
No depender solo de color para transmitir info (WCAG 1.4.1)
Labels descriptivos en todos los inputs (WCAG 1.3.1)
Navegación completa por teclado (WCAG 2.1.1)
Respeto de prefers-reduced-motion (WCAG 2.3.3)
Mensajes de error con texto, no solo icono (WCAG 3.3.1)
Soporte high-contrast mode del SO (WCAG 1.4.6)

Lo que nunca debes hacer

Estas implementaciones serán bloqueadas en code review.

✗ NO hacer
color: #C800DF;
Hard-codear valores hex sin token. Si cambia la paleta, hay que buscar en todo el codebase.
✓ SÍ hacer
color: var(--color-primary);
Siempre token CSS. Un solo cambio en :root lo actualiza en toda la app.
✗ NO hacer
outline: none;
Eliminar el outline de foco hace la app inutilizable para usuarios de teclado y lectores de pantalla.
✓ SÍ hacer
:focus-visible { outline: 2px solid var(--color-primary); }
Focus solo visible al navegar por teclado; no interfiere con el uso con ratón.
✗ NO hacer
Padding menor de 10px en botones o inputs. Los touch targets quedarán por debajo de 44px.
✓ SÍ hacer
Usar min-height: 44px + padding proporcional. Siempre supera el umbral WCAG 2.5.5.

Referencia de tokens

Copia este bloque en el :root de tu hoja de estilos global. Agrega el bloque [data-theme="light"] para el toggle.

/* ── NovaSaaS Design Tokens v1.0 ─────────────────── */ :root { /* brand */ --color-primary: #C800DF; --color-secondary: #E60076; /* semantic */ --color-success: #16A34A; --color-warning: #D97706; --color-danger: #DC2626; /* surfaces (dark default) */ --color-bg: #0A0A0F; --color-surface-1: #18181F; --color-surface-2: #1E1E28; --color-border: #2E2E3A; /* text */ --color-text-primary: #F0F0FA; --color-text-secondary: #9898B2; --color-text-muted: #5C5C74; /* spacing */ --space-2: 8px; --space-4: 16px; --space-6: 24px; --space-8: 32px; /* radii */ --radius-sm: 4px; --radius-md: 8px; --radius-xl: 16px; /* fonts */ --font-primary: 'Jost', system-ui, sans-serif; --font-mono: 'Overpass Mono', monospace; } /* light mode override */ [data-theme="light"] { --color-bg: #F8F8FC; --color-surface-1: #FFFFFF; --color-border: #D8D8E8; --color-text-primary: #111827; --color-text-secondary: #4B4B6B; }