The setup flow needed to feel active rather than like a wait. Built in Rive with data binding, so the animation responds to real values coming from the app - number verifying, email found, network detected - instead of playing a fixed timeline and hoping it syncs.