BEFORE Visual-only spinner
Problem: the spinner has no text status; focus can move while content is still loading; no progress semantics.
Results will appear here.
AFTER Status + progress
Improvements: aria-busy on the results region, a role="status" message, and a determinate role="progressbar".
Spinner motion respects prefers-reduced-motion.
Results will appear here.
Tip: For dynamic UI, combine an aria-busy region + a short status message + visible text (“Loading…”) so everyone gets the same signal.