The badges are pushed, not polled. ApprovalCountsService opens one
Server-Sent Events stream (/approvals/counts/stream) through HttpClient so the
login and tenant headers apply; the server writes a `counts` event the moment
the numbers change.
- Total badge on the Approvals menu, count badge on 26 Approval Center tabs
(Reject Account and Terminated Account are lists, not requests: no badge).
- Last numbers are kept per login in localStorage, so a page refresh shows them
at once until the stream's first event makes them exact.
- Stream recycles every few minutes and reconnects at once; after a failure it
retries with a growing wait and reads /approvals/counts meanwhile.
- NO_PROGRESS_BAR token: the background stream does not run the top progress bar.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>