feat($animate): use requestAnimationFrame instead of a timeout to issue a reflow