complete animation refactor