- useHashTab: pure-TS hook reading window.location.hash, falls back to defaultId, hashchange listener cleaned up on unmount - Tabs: <Tabs items activeId onChange> with tab-underline / tab-underline-active recipes and count-pill (rounded-pill exception per DESIGN.md) - index.css: tab-underline*, tab-count-pill*, alert-*, table-compact recipes Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>