Async tabs
Tabs over sibling routes, where each tab is a page with its own URL (the orders room, my listings, favorites). The active tab resolves from the pathname; picking another lights it at once, optimistically, and marks it pending until its page lands. The caller keeps no pending state: the tabs own the transition and stamp data-pending for anything around them to dim. These tabs are real: each one opens another page of the async family.
For tabs that switch content on the same page, use Tabs.
Examples
With counts
AsyncTabsLabel holds the words and AsyncTabsCount the badge, so the pending shimmer never reaches the number.
Loading
The Suspense fallback is the same tree with loading: the triggers are inert, defaultValue (else the first tab) is lit, the counts pulse, and the pathname is not read, so it is safe inside a prerendered shell.