v1.0.0 WCAG 2.2 AA
Contexto y Objetivos
Sistema de Diseño Premium — Estética Vela

Vela es una plataforma SaaS B2B de gestión financiera para pymes. Su sistema de diseño transmite precisión, confianza y modernidad mediante un lenguaje visual minimalista inspirado en Apple. Todas las reglas se definen en tokens reutilizables; ningún componente debe usar valores en bruto.

Tokens de Diseño · Paleta de Color
Color Tokens

Cada color tiene una versión base, hover, subtle y border. Usar exclusivamente estos tokens en implementación.

Primary
#3B82F6
Secondary
#8B5CF6
Success
#16A34A
Warning
#D97706
Danger
#DC2626
Surface
#F9FAFB
Text
#111827
Token CSSValorColorUso
--color-primary#3B82F6Botón CTA, links, foco
--color-primary-hover#2563EBEstado hover del primary
--color-primary-subtle#EFF6FFBadges, backgrounds informativos
--color-success#16A34AEstados positivos, pagado
--color-warning#D97706Alertas, pendiente
--color-danger#DC2626Errores, acciones destructivas, vencido
--color-surface-2#F9FAFBFondo de página, áreas secundarias
--color-text-secondary#6B7280Labels, descripciones de apoyo
Tokens de Diseño · Tipografía
Typography Scale

Fuente principal Inter para toda la UI. JetBrains Mono para cantidades, tokens y código. Nunca mezclar con otras familias.

Display / 36pxfont-size: var(--text-3xl)
weight: 700
tracking: -0.03em
Gestión financiera inteligente
H1 / 30pxfont-size: var(--text-2xl)
weight: 700
tracking: -0.02em
Facturación y Tesorería
H2 / 24pxfont-size: var(--text-xl)
weight: 600
tracking: -0.02em
Transacciones recientes
H3 / 18pxfont-size: var(--text-lg)
weight: 600
Resumen del periodo
Body / 16pxfont-size: var(--text-base)
weight: 400
line-height: 1.6
Vela conecta tu contabilidad con tus movimientos bancarios y genera asientos automáticamente. Ahorra horas de trabajo cada mes.
Body SM / 14pxfont-size: var(--text-sm)
weight: 400
Último acceso: hoy a las 09:42 · Sesión activa desde Madrid
Label Caps / 12pxfont-family: JetBrains Mono
weight: 600
tracking: +0.08em
IMPORTE TOTAL · EUR
Mono / 14pxfont-family: JetBrains Mono
weight: 500
€ 24.890,00
Tokens de Diseño · Espaciado
Spacing Scale

Escala base de 4px. Todo el espaciado intra-componente y entre secciones debe ser múltiplo de este valor.

--space-1
4px — micro gaps, icon padding interno
--space-2
8px — gap entre icono y label, badge padding
--space-3
12px — padding interior inputs, separadores
--space-4
16px — padding interno de cards, celdas tabla
--space-6
24px — padding KPI card, gap entre elementos
--space-8
32px — padding sección principal, márgenes de página
Componentes · Botones
Button

El botón debe comunicar claramente su intención. La variante primary debe existir una sola vez por vista como acción principal. El anillo de foco visible es obligatorio.

Variantes
Tamaños
Estados
✓ DO — Reglas obligatorias
  • → Mínimo 44×44px de área táctil (WCAG 2.5.5)
  • focus-visible ring de 2px + 4px offset
  • → Ratio de contraste ≥ 4.5:1 texto/fondo
  • → Atributo type="button" en todos los <button>
  • → Texto descriptivo: "Guardar cambios", no "OK"
✗ DON'T — Prohibido
  • → Varios botones primary en la misma vista
  • → Ocultar el estado focus con outline:none
  • → Texto de botón en mayúsculas sin letter-spacing
  • → Usar <div> o <a> para acciones de formulario
  • → Colores de marca custom en variantes de sistema
Componentes · Formularios
Form — Emisión de Facturas

Anatomía de campo: label + input + hint/error. El hint es siempre visible; el mensaje de error reemplaza al hint y añade un aria-describedby al input.

Nombre fiscal del receptor
CIF de la empresa receptora
⚠ Introduce un importe válido
Aplicable a servicios digitales: 21%
Estado disabled
Asignado automáticamente por el sistema
Componentes · Estado
Badge — Estado de Transacciones

Los badges comunican estado semántico. Siempre deben ir acompañados de texto descriptivo; nunca depender del color como único indicador.

Pagado Pendiente Vencido En revisión Borrador
En contexto — tabla de transacciones
Nº Factura Cliente Fecha Importe Estado
VEL-2026-0041 TechStart Madrid S.L. 01 jun 2026 € 4.840,00 Pagado
VEL-2026-0040 Grupo Mediterráneo S.A. 22 may 2026 € 12.100,00 Pendiente
VEL-2026-0038 Construcciones Vera 10 may 2026 € 2.420,00 Vencido
VEL-2026-0037 Consultoría Andrade 05 may 2026 € 968,00 En revisión
Componentes · Notificaciones
Alert & Toast

Las alertas inline son persistentes y contextuales. Los toasts son transitorios (≤ 5s) y aparecen en la esquina inferior derecha. Ambos deben tener role="alert".

Componentes · Dashboard
KPI Cards + Navigation Sidebar

Los KPI cards muestran una métrica, su cambio respecto al periodo anterior y una etiqueta en uppercase mono. El sidebar en fondo oscuro (#111827) crea contraste con el contenido principal.

Accesibilidad · WCAG 2.2 AA
Criterios de Aceptación

Cada componente debe superar estas pruebas antes de mergearse. El contraste y el foco visible son los dos fallos más frecuentes en auditorías.

Contraste mínimo requerido
Texto blanco sobre primary — 3.1:1 ✓ (texto grande)
Texto blanco sobre primary-active — 5.9:1 ✓✓
Texto #111827 sobre surface-2 — 19.1:1 ✓✓✓
Texto secundario #6B7280 — 4.6:1 ✓
Interacción teclado
  • Tab navega todos los controles interactivos en orden DOM
  • Enter activa botones y envía formularios
  • Escape cierra modales, dropdowns y toasts
  • Flechas navegan dentro de grupos de radio, tabs y listas
  • Focus nunca se pierde al abrir/cerrar capas modales
  • aria-live="polite" en alertas y mensajes de error dinámicos
  • Inputs con error tienen aria-invalid="true" + aria-describedby
Anti-Patterns · Implementaciones Prohibidas
Qué no hacer nunca
✗ DON'T — Bajo contraste

Texto claro sobre fondo claro: ilegible e inaccesible.

Importe pendiente de pago

color:#D1D5DB sobre #F9FAFB — ratio 1.1:1 FAIL

✓ DO — Contraste correcto

Usar --color-text-secondary (#6B7280) mínimo.

Importe pendiente de pago

color:#6B7280 sobre #F9FAFB — ratio 4.6:1 PASS

✗ DON'T — Botón mal implementado

Fuente serif, color semántico incorrecto, border-radius inconsistente.

Serif + uppercase + verde = confusión semántica

✓ DO — Botón correcto

Inter, padding correcto, token primary, border-radius-md.

Inter 500 + primary token + --radius-md

✗ DON'T — Espaciado arbitrario

margin: 13px, padding: 7px, gap: 5px — rompen el ritmo visual y la rejilla.

Nunca: 3px, 5px, 7px, 9px, 11px, 13px

✓ DO — Espaciado con tokens

Todo el espaciado usa --space-*: múltiplos de 4px.

Siempre: 4, 8, 12, 16, 24, 32, 40, 48, 64px

QA Checklist · Code Review
Lista de verificación previo a merge

Ejecutar antes de aprobar cada PR que toque componentes UI. Las etiquetas indican la categoría de la verificación.

VELA DESIGN SYSTEM v1.0.0 · Generado con CULTIVA IA · Junio 2026