Design System — Enterprise

DataFlow Pro
Component Guidelines

Guía de implementación para el sistema de diseño de la plataforma de automatización de datos. Componentes listos para ingeniería con tokens, estados y criterios WCAG 2.2 AA.

Versión
1.0.0 — Junio 2026
Stack
React + Tailwind CSS
Accesibilidad
WCAG 2.2 AA
Fuentes
Oswald / Ubuntu / Ubuntu Mono

01 Contexto y objetivos

DataFlow Pro es una plataforma SaaS B2B orientada a equipos de operaciones y analítica. El sistema de diseño resuelve tres problemas estructurales del producto actual: inconsistencia de variantes de botón, contraste insuficiente en formularios, y ausencia de estados de error accesibles.

Intención del sistema
Proveer al equipo de ingeniería una referencia única y authoritative para construir interfaces de automatización de datos: rápidas de escanear, accesibles por teclado y consistentes entre módulos.
Migración desde sistema actual
Los componentes existentes que usen clases .btn-old-* deben migrarse en dos fases. Fase 1: adoptar tokens de color. Fase 2: reemplazar HTML por componentes del DS. No combinar los dos sistemas.
desktop-first drag-and-drop data-heavy 1280px+ min Chrome / Firefox / Safari React Tailwind CSS

02 Tokens de color

Los tokens son la única fuente de verdad para colores. Los valores hexadecimales directos en componentes están prohibidos. Todos los tokens se definen como CSS Custom Properties en :root.

Primary
--color-primary · #072C2C
Cabeceras, nav, CTA principal
Secondary
--color-secondary · #FF5F03
Botones primarios, acentos activos
Success
--color-success · #16A34A
Badges activo, confirmaciones
Warning
--color-warning · #D97706
Alertas, estado pausado
Danger
--color-danger · #DC2626
Errores, acciones destructivas
Surface
--color-surface · #EDEADE
Fondos de secciones, contenedores
Text
--color-text · #111827
Body text, labels
Text Muted
--color-text-muted · #6B7280
Hints, metadatos secundarios
css tokens :root { /* Brand */ --color-primary: #072C2C; --color-secondary: #FF5F03; /* Semantic */ --color-success: #16A34A; --color-warning: #D97706; --color-danger: #DC2626; /* Surface + Text */ --color-surface: #EDEADE; --color-text: #111827; --color-text-muted: #6B7280; }
Prohibido
No usar valores hexadecimales directos en componentes: color: #072C2C → usar siempre color: var(--color-primary). Esto garantiza theming futuro sin refactor masivo.

03 Escala tipográfica

Desktop-first. Tres familias con rol semántico claro. No mezclar roles de fuente entre sí.

H1 · Display
Oswald 700 · 3rem · LS -0.01em
Pipeline Editor
H2 · Section
Oswald 600 · 2rem · LS 0
Workflow Automation
H3 · Card title
Ubuntu 700 · 1.25rem
CRM Sync Pipeline
Body · Base
Ubuntu 400 · 1rem · LH 1.6
Conecta tus fuentes de datos y automatiza flujos sin escribir código. Arrastra nodos, configura triggers y lanza en producción en minutos.
Caption · Meta
Ubuntu 400 · 0.875rem · muted
Última ejecución: hace 2 minutos · 1.247 registros procesados
Label · Mono
Ubuntu Mono 700 · 0.75rem · CAPS
Estado · Activo
Regla de mezcla de fuentes
Oswald solo para headings (H1–H2). Ubuntu para todo el body, labels de form y botones. Ubuntu Mono exclusivamente para etiquetas en mayúsculas, código y valores técnicos (IDs, fechas, hashes).

04 Espaciado

Escala de 4px base, modo comfortable density. Usar siempre múltiplos de 4px. No inventar valores intermedios.

--space-1
4px
--space-2
8px
--space-3
12px
--space-4
16px
--space-5
20px
--space-6
24px
--space-8
32px
--space-10
40px
--space-12
48px
--space-16
64px

05 Botones

Intención: Los botones comunican la acción principal del contexto inmediato. Cada vista debe tener un único botón Primary visible; el resto son Secondary, Ghost o Danger.

Variantes y estados

Primary
Secondary
Danger
Ghost
Tamaños
Regla Nivel Descripción
Hit area mínima must Altura mínima 36px (44px recomendado en touch). Nunca menos.
Un solo Primary por vista must Máximo 1 botón Primary visible simultáneamente. Usar Secondary para acciones secundarias.
Focus ring visible must outline: 3px solid var(--color-focus-ring) con outline-offset: 2px en :focus-visible. Nunca outline: none.
Label explícito must Los botones de icono deben incluir aria-label descriptivo.
Estado loading should Mostrar spinner + texto "Ejecutando…" durante operaciones async. Deshabilitar el botón durante loading.

06 Inputs y formularios

Intención: Los formularios de DataFlow Pro configuran pipelines complejos. Los inputs deben ser precisos, con feedback de validación inmediato y sin ambigüedad en los labels.

Usa un nombre descriptivo que identifique fuente y destino.

Endpoint de entrada del pipeline activo.

✕ Clave API inválida. Verifica en Ajustes → Integraciones.

✓ Email verificado correctamente.

Generado automáticamente. Solo lectura.

ReglaNivelDescripción
Label siempre visible must No usar solo placeholder como label. Los placeholders desaparecen al escribir.
Contraste de error must Los mensajes de error deben usar --color-danger con ratio ≥ 4.5:1 sobre fondo blanco.
Campo requerido must Marcar con asterisco (*) rojo + aria-required="true". Explicar la convención al inicio del formulario.
Focus ring en inputs must box-shadow: 0 0 0 3px rgba(255,95,3,0.15) + border-color: var(--color-secondary) en :focus.

07 Badges de estado

Intención: Los badges comunican el estado de ejecución de pipelines de un vistazo. No usar solo color: siempre incluir texto + punto de color para accesibilidad.

Estados
Activo Pausado Error Completado Borrador
EstadoTokenCuándo usar
Activo--color-successPipeline ejecutándose correctamente en producción.
Pausado--color-warningDetenido manualmente; sin error activo.
Error--color-dangerÚltima ejecución fallida. Requiere atención.
Completado--color-primaryPipeline de una sola ejecución finalizado con éxito.
Borrador--color-text-mutedConfiguración guardada pero no publicada.

08 Pipeline Cards

Intención: Las tarjetas son la unidad visual principal del listado de workflows. Deben comunicar nombre, estado, descripción breve y pasos de un vistazo.

CRM → Google Sheets
Activo
Sincroniza leads de HubSpot con el sheet de reporte semanal. Frecuencia: cada 6 horas.
4
Hace 12 min · 3.421 filas v2.3
Stripe → Data Warehouse
Error
Ingesta de transacciones Stripe al warehouse BigQuery. Fallo en credenciales de destino.
3
4
Falló hace 3h · Auth error v1.8
Email Campaign Sync
Pausado
Exporta segmentos de usuarios a Mailchimp para campañas semanales. Pendiente revisión de GDPR.
3
4
Pausado hace 2 días v1.1

09 Tabla de datos

Intención: Las tablas son el componente de mayor densidad informativa. Deben soportar sorting, selección múltiple y acciones por fila sin saturar visualmente.

Pipeline Estado Inicio Duración Registros Acciones
CRM → Sheets Completado 2026-06-16 09:02 1m 34s 3.421
Stripe → BQ Error 2026-06-16 06:00 0m 08s 0
CRM → Sheets Completado 2026-06-16 03:02 1m 29s 3.401
Email Campaign Sync Pausado 2026-06-14 10:15
Sheets → Slack Alert Activo 2026-06-16 09:30 0m 04s 12
Mostrando 5 de 128 ejecuciones · 1 seleccionada
Accesibilidad de tablas
La tabla debe incluir role="table", aria-label descriptivo, y los checkboxes deben tener aria-label individuales. Las columnas ordenables deben anunciar el estado con aria-sort="ascending|descending|none".

10 Accesibilidad WCAG 2.2 AA

Todos los componentes deben superar los criterios WCAG 2.2 AA. La accesibilidad no es opcional ni una fase posterior: es un criterio de aceptación en cada PR.

Criterio WCAGNivelImplementación requeridaTest
1.4.3 Contraste de texto must Ratio mínimo 4.5:1 para texto normal; 3:1 para texto grande (≥18px bold). axe DevTools / Colour Contrast Analyser
1.4.11 Contraste no-texto must Bordes de inputs, iconos funcionales y estados de componente ≥ 3:1. Manual + axe
2.1.1 Teclado must Toda funcionalidad accesible con Tab/Shift+Tab/Enter/Space/Escape. Sin trampas de teclado. Manual (solo teclado)
2.4.7 Focus visible must Focus ring visible en todos los elementos interactivos. Nunca outline:none sin reemplazo. Tab por la página, visual
2.4.11 Focus Not Obscured (AA) must El focus visible no debe quedar completamente oculto por elementos sticky (headers, tooltips). Manual scroll + tab
3.3.1 Error identification must Los errores de formulario se identifican en texto, no solo por color. Incluir aria-describedby al mensaje de error. Screen reader (NVDA/VoiceOver)
4.1.3 Status Messages should Los mensajes de éxito/error deben anunciarse con role="status" o aria-live="polite". Screen reader

11 Antipatrones y migraciones

Los patrones incorrectos del sistema actual que deben eliminarse en la migración.

✕ Incorrecto
Múltiples botones Primary en la misma vista:

✓ Correcto
Un solo Primary; el secundario como Secondary:

✕ Incorrecto — Solo color para error
Clave API
✓ Correcto — Color + texto explícito
Clave API
✕ Clave API inválida. Verifica en Ajustes.
✕ Incorrecto — Sin focus ring
.btn:focus {
  outline: none; /* PROHIBIDO */
}
✓ Correcto — Focus ring accesible
.btn:focus-visible {
  outline: 3px solid var(--color-focus-ring);
  outline-offset: 2px;
}
✕ Incorrecto — Valores raw en componentes
background-color: #072C2C;
color: #FF5F03;
border: 1px solid #D1D5DB;
✓ Correcto — Tokens semánticos
background: var(--color-primary);
color: var(--color-secondary);
border: 1px solid var(--color-border);
Guía de migración
Para componentes heredados: (1) Reemplazar valores hex por tokens en CSS. (2) Añadir estados de focus. (3) Verificar contraste con axe. (4) Añadir aria attributes mínimos. No mezclar clases del sistema antiguo con el nuevo.

12 QA Checklist — Code Review

Ejecutar en cada PR que modifique o añada componentes UI. Toda casilla marcada como must bloquea el merge si falla.

  • Solo se usan tokens CSS (var(--color-*)) para colores. Sin valores hex directos.
    Tokens · must
  • Espaciados son múltiplos de 4px usando tokens --space-*.
    Tokens · must
  • Contraste de texto ≥ 4.5:1 verificado con axe DevTools en todos los estados del componente.
    Accesibilidad · must
  • Focus ring visible en :focus-visible en todos los elementos interactivos. Nunca outline:none sin reemplazo.
    Accesibilidad · must
  • !
    Navegación completa por teclado (Tab, Shift+Tab, Enter, Space, Escape) probada manualmente en el flujo afectado.
    Accesibilidad · must
  • Los mensajes de error en formularios incluyen texto descriptivo + aria-describedby. No solo color.
    Accesibilidad · must
  • Botones de icono tienen aria-label descriptivo. Tablas tienen role="table" y aria-label.
    Accesibilidad · must
  • Existe un único botón Primary visible por vista/modal. El resto son Secondary, Ghost o Danger.
    Jerarquía visual · must
  • Los badges de estado incluyen texto + punto de color (no solo color como indicador único).
    Accesibilidad · must
  • !
    Componentes nuevos documentados en Storybook con todas las variantes y estados requeridos.
    Documentación · should
  • Probado en Chrome, Firefox y Safari. Resolución mínima 1280px de ancho.
    Cross-browser · must
  • No se mezclan clases del sistema antiguo (.btn-old-*) con las del nuevo DS.
    Migración · must
Superado
!
Advertencia / pendiente
Pendiente verificar
Fallo — bloquea merge