···160160 transition: background-color 0.2s ease, color 0.2s ease;
161161}
162162163163+/* Reduced motion, everywhere — the app-wide guard, not a per-component opt-in.
164164+ Collapsing durations rather than setting `animation: none` is deliberate: the chart's
165165+ `animate-spin` spinner is the only signal that a cold backfill is running, so it has to
166166+ stay on screen. A one-shot 0.01ms spin lands it back at 0deg, static but still present.
167167+ `!important` beats Tailwind's utilities, which the cascade would otherwise let win. */
163168@media (prefers-reduced-motion: reduce) {
164164- body {
165165- transition: none;
169169+ *,
170170+ ::before,
171171+ ::after {
172172+ animation-duration: 0.01ms !important;
173173+ animation-iteration-count: 1 !important;
174174+ transition-duration: 0.01ms !important;
166175 }
167176}
168177