perf: disk-cache profile favorites and use a real loaded sentinel
Prime `favoriteGalleries` synchronously from `FeedCache` on own-profile load
so the favorites tab shows instantly on re-open, then kick off a background
`loadFavorites` at the tail of `load()` so fresh data is ready before the
user swipes over.
Split the favorites state into two flags:
- `favoritesLoaded` is now set only *after* the network call completes,
not speculatively before it. Views can trust it as "we've actually
talked to the server."
- `isLoadingFavorites` handles the concurrent-fetch guard that the old
`favoritesLoaded = true` line was doing.
`favoritesGrid` uses the new flag to show a spinner until confirmed empty,
so "No favorites yet" only appears after a real round-trip. The cache
writes the first 30 items to the shared `FeedCache` under a
`favorites_<did>` key via a detached utility task; this is independent of
the Settings "Clear Image Cache" button, which only touches Nuke.
authored by