gpui: Add synced repeating animations and phase-lock spinners (#62332)

Spinners rendered near each other (like a sidebar full of running
threads) each start rotating from the moment their element first
renders, so they spin out of phase and the group looks jittery.

This adds `Animation::repeat_synced()`, which derives the phase from a
clock shared by the whole app instead of the element's mount time, and
switches `with_rotate_animation` over to it, so every spinner with the
same period now renders the same frame at the same time. The epoch is
read off the scheduler clock at app creation, so the phase stays
deterministic under the test scheduler.

Release Notes:

- Improved loading spinners to rotate in phase with one another
4ed3738c40Agus Zubiaga committed on 8/7/2026, 9:14:36 PM· committed by GitHubparent417d033
3 files changedLine totals unavailable