Sistema de
Diseño Mono
Guía de implementación para el equipo de producto. Tokens, componentes y normas de accesibilidad WCAG 2.2 AA. Built for engineers, by engineers.
Tokens & Fundamentos
El sistema DATAFORGE prioriza la lectura técnica densa: pipelines, métricas, logs. Los tokens garantizan consistencia visual sin sacrificar legibilidad ni accesibilidad.
CSS Custom Properties
/* ─── DATAFORGE DESIGN TOKENS v1.0 ─── */ :root { /* Color — semantic tokens */ --color-primary: #37F712; /* Matrix green — CTAs, links activos */ --color-secondary: #00A6F4; /* Cyan — métricas, datos */ --color-success: #00A63D; /* Pipeline OK */ --color-warning: #FE9900; /* Latencia alta, retries */ --color-danger: #FF2157; /* Pipeline FAILED, errores críticos */ /* Surface */ --bg-base: #0A0A0A; --bg-panel: #111111; --bg-card: #181818; --border: #2A2A2A; /* Text */ --text-hi: #F0EDE8; /* Headings, datos primarios */ --text-mid: #A09890; /* Body, descripción */ --text-lo: #5A534E; /* Placeholders, metadatos */ /* Spacing — compact density */ --sp-1: 4px; --sp-2: 8px; --sp-3: 12px; --sp-4: 16px; --sp-6: 24px; --sp-8: 32px; /* Radius */ --r-sm: 4px; --r-md: 8px; --r-pill: 9999px; /* Typography */ --font-ui: 'Space Mono', monospace; --font-code: 'JetBrains Mono', monospace; }
Paleta de Color
Paleta de alto contraste. El verde primario (#37F712) actúa como señal de acción. El rojo (#FF2157) es exclusivo para errores críticos — nunca decorativo.
Tokens semánticos
Danger (#FF2157) debe reservarse exclusivamente para estados de error, destructivos o críticos. No usar como color decorativo ni de acento. Warning (#FE9900) para advertencias y latencias. La combinación decorativa principal es Primary + BG Base.
Tipografía
Dos fuentes monoespacio: Space Mono para UI general y JetBrains Mono para código, logs, y etiquetas técnicas.
Espaciado
Escala de densidad compacta (4px base). Usar siempre tokens, nunca valores arbitrarios.
Badges & Status
Los badges comunican estado de pipeline, job o sistema. Solo semánticos — nunca decorativos.
Form Inputs
Inputs de alta densidad. Label siempre visible (no placeholder como sustituto). Hint y error messages explícitos.
0 6 * * 1-5
Alerts & Notifications
Cuatro niveles semánticos. Los alerts deben incluir siempre título + mensaje. No usar solo color para transmitir estado.
Data Tables
Tablas compactas para visualización de pipelines, runs y métricas. Siempre headers descriptivos + acceso de teclado.
Accesibilidad WCAG 2.2 AA
Criterios de aceptación testables
| Criterio | Requisito | Test |
|---|---|---|
| 1.4.3 Contraste texto | Mínimo 4.5:1 para texto normal, 3:1 para grande | axe-core / Lighthouse |
| 1.4.11 Contraste UI | Mínimo 3:1 para bordes de input, iconos funcionales | Colour Contrast Analyser |
| 2.1.1 Teclado | Todos los elementos interactivos accesibles con Tab/Enter | Test manual + puppeteer |
| 2.4.7 Focus visible | Focus ring: 2px offset + 2px solid --color-primary | :focus-visible inspect |
| 3.3.1 Error identif. | Errores descritos con texto + ícono, nunca solo color | Screen reader test |
| 4.1.2 Nombre/rol/valor | aria-label en iconos, roles implícitos HTML semántico | NVDA + Chrome |
Focus ring estándar
/* Focus ring — WCAG 2.4.7 compliant */ :focus-visible { outline: none; box-shadow: 0 0 0 2px var(--bg-base), 0 0 0 4px var(--color-primary); }
No usar outline: none sin reemplazar con focus-visible alternativo. El fondo negro del offset garantiza visibilidad en todos los fondos oscuros.
Anti-patrones y Migración
Usar solo el color rojo para indicar error en tabla. Debe acompañarse siempre de texto ("Failed"), ícono y/o patrón diferenciador.
Usar --text-lo (#5A534E) para texto de cuerpo principal. Reservado exclusivamente para placeholders, metadatos y etiquetas desactivadas. Body text mínimo --text-mid.
Usar valores px sin token (ej: padding: 13px). Migrar a la escala de tokens. Si 12px es insuficiente y 16px excesivo, revisar el componente — no crear tokens ad-hoc.
Usar una sans-serif del sistema (Arial, Helvetica) junto a Space Mono. Resultado: ruptura visual del aesthetic mono. Solo Space Mono + JetBrains Mono.
Dos btn-primary en la misma fila de acciones. El usuario no puede distinguir la acción principal. Usar btn-primary + btn-ghost o btn-subtle para acciones secundarias.
Checklist de Code Review
Ejecutar en cada PR que modifique UI. Bloquea merge si algún item falla.
Tokens & Foundation
- Todos los colores son tokens CSS (--color-*, --bg-*, --text-*), sin valores hex hardcoded
- Todo el espaciado usa tokens --sp-* de la escala, sin px arbitrarios
- Solo font-family: var(--font-ui) o var(--font-code) — sin otras fuentes
- Sin z-index > 100 sin justificación en comentario
Componentes
- Botones tienen estado :focus-visible con box-shadow estándar
- Botones disabled tienen pointer-events: none y opacity ≤ 0.4
- Inputs tienen label visible (no solo placeholder) y hint/error text
- Badges/estados no usan solo color — incluyen texto o ícono
- Tables tienen th con scope="col" o scope="row"
- Iconos funcionales tienen aria-label o título
Accesibilidad
- axe-core 0 errores en Lighthouse CI (se ejecuta automáticamente en PR)
- Contraste de texto verificado: mínimo 4.5:1 para cuerpo, 3:1 para elementos grandes
- Navegación completa por teclado (Tab, Enter, Escape) verificada manualmente
- Sin motion que no respete prefers-reduced-motion
- Áreas de click/tap mínimo 44×44px en controles interactivos
Responsive & Edge cases
- Probado con texto 2× largo (nombres de pipeline con 60+ chars)
- Estado vacío (empty state) definido para listas y tablas
- Estado de carga (skeleton o spinner) para datos asíncronos
- Estado de error para fetch fallido
- Breakpoint revisado a 1280px (mínimo soporte desktop)