de59cf49d8
Reported sync gaps: the hub showed "Play" until you opened each game, and a game synced only if you'd reopened it on that device (so a desktop win that was never reopened never reached the server). Root cause: the /play hub read card status from localStorage only and never talked to the server — sync happened exclusively inside the game components on mount. Now the hub itself reconciles every game (word 5/6 + wordsearch small/med/large) with the server on load (signed-in): pushes this device's local state and writes the merged result back to localStorage, then refreshes the cards. So statuses appear cross-device WITHOUT opening each game, and local progress uploads even for games not reopened. Word Search card status derived from the (completion- gated) ms. 237 pytest + 11 vitest green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>