Intención de diseño

NutriTrack v2.0 adopta un sistema de diseño minimalista ("Simple DS") para los módulos de dashboard de pacientes, historial de consultas, generador de planes alimentarios y panel de analíticas. El objetivo es transmitir confianza clínica y claridad sin sobrecargar visualmente al dietista durante sesiones de uso intensivo.

Principio rector: cada píxel debe ganarse su lugar. Si un elemento no aporta contexto o acción, se elimina.

🎨

Paleta de Color

Usa siempre el nombre del token, nunca el valor hexadecimal directo en el código. Los tokens permiten theming futuro sin refactor.

Colores Semánticos
--color-primary
#3B82F6
--color-secondary
#8B5CF6
--color-success
#16A34A
--color-warning
#D97706
--color-danger
#DC2626
--color-text
#111827
--color-text-secondary
#6B7280
--color-surface
#FFFFFF
--color-surface-raised
#F9FAFB
--color-border
#E5E7EB
/* tailwind.config.js — mapeo de tokens a clases personalizadas */ theme: { extend: { colors: { 'nt-primary': '#3B82F6', 'nt-success': '#16A34A', 'nt-warning': '#D97706', 'nt-danger': '#DC2626', 'nt-text': '#111827', } } }
Tt

Escala Tipográfica

Inter para UI e interfaz, JetBrains Mono para valores numéricos clínicos (IMC, kcal, macros). La escala sigue progresión 12/14/16/20/24/32.

text-2xl · h1
2rem · bold · −0.025em tracking
Plan Nutricional
text-xl · h2
1.5rem · bold · −0.02em tracking
Historial del Paciente
text-lg · h3
1.25rem · semibold
Macronutrientes diarios
text-md · body
1rem · regular · 1.5 leading
La ingesta calórica ha aumentado un 12% respecto a la semana anterior.
text-sm · label
0.875rem · medium
Nombre del paciente
text-xs · caption
0.75rem · regular · tertiary
Última consulta: 12 jun 2026
mono · numeric
JetBrains Mono · 0.875rem
2.340 kcal · 52g proteína · IMC 24.1
↔

Escala de Espaciado

Base 4px. Usa únicamente los valores de la escala. Nunca usar valores arbitrarios (5px, 7px, 13px) en componentes de producción.

--space-1
4px
--space-2
8px
--space-3
12px
--space-4
16px
--space-6
24px
--space-8
32px
--space-12
48px
◻

Botones

Los botones son la acción primaria del usuario. Usa btn-primary solo una vez por pantalla. Las acciones destructivas usan btn-danger con confirmación modal obligatoria.

Variantes
Tamaños
Reglas de uso
Variante Cuándo usarlo Límite por pantalla
PrimaryAcción principal única (guardar, crear, enviar)Max 1
SecondaryAcción secundaria o alternativaSin límite
GhostAcciones terciarias, navegación contextualSin límite
DangerAcciones destructivas con confirmación obligatoriaSolo en modales
●

Badges de Estado

Los badges comunican el estado de un paciente o consulta. Siempre incluyen texto legible (nunca solo color). El punto de estado refuerza visualmente pero no es el único indicador.

Estados disponibles
Activo En seguimiento Alerta nutricional Inactivo Nueva consulta
👤

Cards de Paciente

La card de paciente es la unidad visual central del dashboard. Anatomy: avatar iniciales + nombre + meta datos + badge de estado + acción primaria.

Estado: default + hover
MS
María Soriano López
Próx. consulta: 18 jun · Objetivo: pérdida de peso
En seguimiento
JR
Jorge Ramírez Vidal
Última visita: 10 jun · Objetivo: ganancia muscular
Activo
AK
Ana Kovalenko
Sin consulta en 45 días · Déficit calórico severo
Alerta nutricional
✏

Formularios

Los formularios deben guiar al dietista sin fricción. Label siempre visible (no usar placeholder como sustituto de label). Los errores se muestran bajo el campo, con ícono y texto (nunca solo rojo).

Campos: default, focus, error
Para envío de reportes de seguimiento
⚠ El peso debe ser un valor positivo
Separar por comas
▦

Tablas de Datos

Usar para datos tabulares con más de 3 columnas. Los valores numéricos (kcal, macros, IMC) deben usar la fuente mono para alineación correcta. La columna de acción siempre va última y alineada a la derecha.

Paciente IMC Kcal/día Próx. consulta Estado Acción
María Soriano López 27.3 1.850 18 jun 2026 Seguimiento
Jorge Ramírez Vidal 23.8 2.900 22 jun 2026 Activo
Ana Kovalenko 18.1 1.200 — Alerta
Luis Bermejo Torres 24.5 2.200 30 jun 2026 Inactivo
♿

WCAG 2.2 AA

NutriTrack tiene usuarios con discapacidad visual. Toda interfaz debe pasar los criterios de contraste 4.5:1 para texto normal y 3:1 para texto grande y elementos UI.

Aa
15.8 : 1
text / surface-white
✓ Pasa AA + AAA
Aa
3.0 : 1
blanco / primary
✓ Pasa AA (texto grande)
Aa
4.6 : 1
blanco / success
✓ Pasa AA
Aa
4.6 : 1
blanco / text-secondary
✓ Pasa AA
Aa
2.9 : 1
blanco / warning
✗ No usar texto blanco en warning
Aa
5.7 : 1
text / warning
✓ Usar texto oscuro en warning
⚠
El color warning (#D97706) no pasa contraste con texto blanco. Siempre usar --color-text (#111827) sobre fondos warning. Los badges de warning ya implementan este patrón.
Criterios de teclado (keyboard-first)
  • Tab Navegación entre elementos interactivos en orden lógico del DOM
  • Enter / Space Activar botones, checkboxes y selects
  • Escape Cerrar modales, popovers y dropdowns
  • :focus-visible Obligatorio en todos los elementos interactivos. Outline 2px solid --color-border-focus, offset 2px
  • aria-label Obligatorio en botones icon-only y badges de estado en tablas
✕

Qué no hacer

✕ Incorrecto — color sin texto
Solo punto verde — no accesible para usuarios con daltonismo
Color como único indicador de estado = falla WCAG 1.4.1
✓ Correcto — color + texto
Activo
Badge con punto + etiqueta de texto = WCAG 1.4.1 cumplido
✕ Incorrecto — placeholder como label
Al escribir, el label desaparece — fail accesibilidad y UX
✓ Correcto — label persistente
Label siempre visible = contexto claro en todo momento
✕ Incorrecto — espaciado inconsistente
Item 1 — padding: 5px 11px
Item 2 — padding: 9px 13px
Valores arbitrarios crean ritmo visual roto
✓ Correcto — escala de tokens
Item 1 — space-2 / space-3
Item 2 — space-2 / space-3
Tokens consistentes = ritmo visual predecible
✓

QA Checklist — Code Review

Ejecuta esta lista en cada PR que modifique componentes UI. Un fallo es motivo de cambios solicitados (changes requested).

  • ✓
    Tokens — Todos los valores de color, espaciado y tipografía referencian variables CSS o clases Tailwind de la paleta NutriTrack. Ningún valor hardcoded.
  • ✓
    Contraste — Verificado con axe DevTools o Colour Contrast Analyser. Ratio ≥ 4.5:1 para texto normal, ≥ 3:1 para texto grande (≥18px bold).
  • ✓
    Focus visible — Tab por todos los elementos interactivos del componente. El estado focus-visible es claramente visible (outline 2px blue, offset 2px).
  • ✓
    Estados de botón — Default, hover, focus-visible, active y disabled funcionan correctamente. Botones disabled tienen cursor: not-allowed y opacity 0.6.
  • ✓
    Formularios — Cada input tiene label asociado con for/id. Los errores muestran mensaje + ícono, no solo borde rojo. Placeholders son ejemplos, no labels.
  • ✓
    Badges — Nunca solo color para indicar estado. Siempre texto descriptivo legible por screen readers.
  • ✓
    Tipografía mono — Valores numéricos clínicos (IMC, kcal, peso) usan JetBrains Mono para alineación correcta en tablas.
  • ✓
    Responsive — Componentes verificados a 375px (mobile), 768px (tablet) y 1280px (desktop). Sin overflow horizontal.
  • ✓
    Un solo Primary — Máximo un btn-primary visible por pantalla/sección. Si aparecen dos, escalar la duda a diseño.
  • ✓
    Espaciado de escala — Ningún margin/padding usa valores arbitrarios. Solo múltiplos de 4px de la escala definida.
  • ✓
    aria-label — Todos los botones icon-only tienen aria-label descriptivo. Badges en tablas tienen aria-label="Estado: Activo" equivalente.
  • ✓
    Sin CDN externos — Los componentes no cargan recursos de terceros en producción que puedan fallar offline.
NutriTrack Design System v2.0.0 · Generado con CULTIVA IA / sistema-diseno-simple skill · WCAG 2.2 AA
2026-06-15