Quick answer: Browser fullscreen drops cursor customizations (style, pointer lock). Re-apply them on the “On fullscreen change” trigger, not just on start of layout.

A custom cursor sprite hides the OS cursor at start of layout. Entering fullscreen restores the OS cursor; exiting fullscreen leaves it hidden — reset logic only ran at start.

Use the Fullscreen Change Trigger

On fullscreen changed:
    Browser → Set mouse cursor style to None
    Mouse → Set custom cursor sprite_cursor

This trigger fires whenever the user enters or exits fullscreen — via your button or the Esc key. Re-apply whatever cursor state you want.

Pointer Lock Too

If you used pointer lock for FPS-style aim, fullscreen exits release it. Re-request on focus/resume:

On any click (while playing):
    Browser → Request pointer lock

The browser only grants pointer lock on a user gesture, so don’t request it cold — tie to a click.

Reset on Visibility Change

Tab focus loss can also reset cursor state. Subscribe to “On resumed” / visibility change and re-apply if your game pauses-and-resumes seamlessly.

Verifying

Toggle fullscreen with F11 or your in-game button. The custom cursor and pointer lock state persist across the transition. ESC out of fullscreen still shows your cursor correctly.

“Fullscreen and focus changes reset cursor state. Re-apply on every transition trigger.”

Browsers tighten autoplay/pointer-lock rules constantly — rely on triggers, not start-of-layout, for anything user-gesture-gated.