When the browser blocks audio.play() with NotAllowedError (no user gesture), the player was surfacing an error badge and the user had no hint it was ready. Now onCanPlay catches NotAllowedError specifically and calls setPaused() so the audio element keeps its src and the user just needs to tap play once.