47b34c4829
On mobile, closeModal() relies on the CSS animationend event to call _doClose(). When the animation does not fire (prefers-reduced-motion, tab switch, browser quirk), the modal stays stuck and the user cannot dismiss it. A 300ms fallback timer now guarantees cleanup runs. Reported in discussion #9