138436558f
LeaderboardResource was a tuple struct of Option<Vec<Entry>>: None for pre-fetch and empty Vec for both "actually empty" and "fetch failed" — the user couldn't tell a network error from a legitimately quiet leaderboard. The resource is now a four-state enum (Idle / Error / Loaded), with Loaded covering both populated and empty rows. A transient error no longer wipes a previously populated list, and the panel renders "Couldn't reach the leaderboard. Try again later." when the most recent fetch failed. The Opt In / Opt Out buttons used to render unconditionally and silently no-op under LocalOnlyProvider. The panel now reads the SyncProviderResource backend name and, when no remote is configured, replaces the buttons with a single line directing the player to configure cloud sync in Settings. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>