Sistema de Diseño
Codex
Minimalista
Interfaz blank-canvas radical. Negro como único color estructural; tipografía Open Sans como protagonista visual. Sin sombras, sin gradientes de UI, sin ilustraciones decorativas.
Tokens de Diseño
La paleta es binaria por principio. El negro es estructura; el blanco es espacio; el color semántico aparece solo en estados funcionales (éxito, aviso, error).
Tokens de Color
Tipografía
Open Sans es el único vehículo visual de jerarquía. El peso y el tamaño sustituyen al color. JetBrains Mono se reserva para código, etiquetas mono y datos técnicos.
Botones
Todos los botones usan geometría pill (border-radius: 9999px). La jerarquía la establece el fondo: negro para acción principal, borde para secundaria, transparente para ghost. Los estados deben ser explícitos y distintos.
Variantes
Tamaños
Estados
Inputs de Formulario
Los campos de texto deben comunicar su estado a través del borde, nunca solo por color. El estado de error incluye siempre un mensaje de texto visible debajo.
Badges de Estado
Usa fuente mono para destacar que el badge es un dato técnico/estado, no texto editorial. El punto de color refuerza el significado sin depender solo del color (daltonismo).
Contexto real: tabla de campañas
Cards de Métricas
Las cards negras se reservan para la métrica más importante de la vista. Las cards blancas con borde son el patrón estándar. Sin sombras; el contraste de borde define el plano.
Solo una por vista. Fondo --color-primary, texto en blanco. Sin sombra; el contraste crea jerarquía.
Borde --color-border (1px), radius 6px. Hover: fondo --color-neutral. Sin transición de sombra.
Accesibilidad — WCAG 2.2 AA
Cada criterio es testeable en code review. No aprobar un criterio debe bloquear el merge.
Anti-patrones Prohibidos
0 2px 8px rgba(0,0,0,0.08)).outline: none solo es válido si se añade un reemplazo visual explícito en :focus-visible con al menos 2px de contraste visible.Checklist de QA — Code Review
Ejecutar en cada PR que toque UI. Un NO en cualquier punto bloquea el merge.
-
Tokens semánticos únicamente. No hay valores de color en hex/rgb crudos en el componente. Todos los colores referencian una variable CSS.
-
Escala de espaciado respetada. Ningún padding/margin fuera de 4/8/12/16/24/32px. Verificar en DevTools → Computed.
-
Focus visible en todos los interactivos. Tab completo por la vista sin perder el ring de foco en ningún momento.
-
Contraste WCAG AA. axe DevTools pasa con 0 violaciones de contraste en modo claro.
-
Estados de componente completos. Botones e inputs tienen hover, focus-visible, active y disabled implementados visualmente.
-
Errores de formulario con texto. Los campos inválidos tienen mensaje de error en texto, no solo borde rojo. aria-describedby apunta al mensaje.
-
Sin sombras en cards de contenido. Revisar que no hay
box-shadowen cards de datos o métricas. -
Fuentes correctas. Open Sans para UI, JetBrains Mono para mono. Sin fallback a serif.
-
Labels de botón descriptivos. Ningún botón usa "OK", "Enviar", "Click aquí" o equivalentes vagos.
-
Responsive edge cases verificados. Labels largos en botones no rompen el layout. Inputs en móvil (375px) siguen usables y sin desbordamiento.