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