Fixed the reported issue: progress was not restored after a reload.
Root cause: bridge.storage.get() returns the saved value already parsed as an object, while the game expected a JSON string and parsed it again, which threw and silently discarded the save.
Changes:
– storage.get() now accepts both shapes (object and string).
– The save is loaded BEFORE gameplay is shown: a loading screen is displayed and input is ignored until storage.get() resolves, so a fresh default save can no longer overwrite real progress during startup.
– Saves carry a revision counter, so after “finish a level, then buy an upgrade” the newest copy always wins instead of an older one at the same level.
– Any pending write is flushed on page hide / unload, so the last action before a reload is never lost.
Verified in the QA tool: state written before Reload game is fully restored after it.