Claves teóricas
Patrones de formulario que funcionan en producto real, no solo en demos.
Etiqueta siempre visible
No dependas de placeholder como sustituto de label.
Ayuda previa
Indica formato o restricciones antes del error, con `aria-describedby`.
Error accionable
Explica exactamente qué está mal y cómo resolverlo.
Estado inválido
Sincroniza mensaje y control usando `aria-invalid`.
Orden de foco
Al enviar, mueve foco al primer error o al resumen de errores.
Éxito claro
Confirma guardado/envío con mensaje visible y anunciado.