added "puff" effect
use requestAnimationFrame for animations