improve sync reliability and matching, add retry support, optimize UI
- Shared aiohttp session for Steam store search to reduce rate-limiting
- Re-entrancy guard prevents concurrent Heroic syncs from inflating library
- Auto-retry unmatched games after full sync (3 passes Heroic, 1 pass Non-Steam)
- Unmatched game counts exposed in library status and sync results
- GamesListModal pagination (80 items/page) for large libraries
- React.memo on NonSteamGameItem and HeroicGameItem for performance
- Retry buttons in SettingsModal for unmatched Heroic and Non-Steam games
- Cancel pending auto-sync before full_sync to prevent race conditions