Button → spinner → success, looping with eased morphs