works but has some race conditions when the rubiks-cube animated transition is interupted with user input on the canvas