Idle-poll audit caught a regression I introduced in the prior commit: the topbar badge poll iterated chatApi.listMessages per thread on each 60s tick, firing N requests per refresh. Landing scene showed 9 reqs in a 30s idle window (failed the <=5 budget). Now the topbar badge just shows the THREAD COUNT (not per-thread unread), which is a single chatApi.listThreads call. Per-thread unread math stays in the Chat scene where it belongs (already wired: chat-thread-row.unread + .chat-unread-summary).