When the most recent sync for an account fails, a MaterialBanner now
appears at the top of EmailListScreen showing the error message with
Retry and Dismiss actions. The banner disappears automatically once a
subsequent sync succeeds.
- SyncLogRepository.observeLastError() — new lightweight stream that
emits the last error message (or null on success / no history).
- syncLastErrorProvider — Riverpod StreamProvider.family wiring it up.
- EmailListScreen tracks dismissed errors per-session to avoid re-showing
the same message the user already acknowledged.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>