Pause and stop
Pause freezes game semantics, not the platform connection.
Freeze
On session.pause stop scoring, active game time, spawning and related sounds. Preserve remaining countdown. Resume must not count paused time as active play. Do not create another requestAnimationFrame loop on top of the existing one.
Keep alive
WebSocket, heartbeat and the pause-reason overlay stay active. Unity Time.timeScale does not stop every asynchronous task; a hidden browser tab may change timer frequency. Game logic must check its state explicitly.
Stop and connection loss
session.stop immediately blocks new input. Clear temporary lighting only while transport is available; never delay shutdown indefinitely. Connection loss also disables gameplay. Never fall back to mouse/mock or send your own resume command. A late resume after Completed/Stopping must not return gameplay to Running.