Build image / build-and-push (push) Successful in 19s
Gadfly findings on #98: - Logout failure (4 models): the catch called setOpen(false), closing the popover and hiding the only "Retry sign out" affordance — contradicting its own comment. Keep the popover open on failure so the retry button (driven by logout.isError) stays on screen. - Public garden (2 models): the bottom-bar suppression missed /g/$token, whose PublicGardenPage also renders a 100dvh-8rem canvas — a signed-in viewer of a shared link got the bar overlapping it. Suppress there too. - BottomNav base className carried text-muted, fighting the active text-accent-strong and violating the file's own "color only in state props" convention (3 models). Moved color entirely to the state props. - BottomNav sections prop type was a hand-written partial copy of the sections shape; derive `Section = (typeof sections)[number]` (2 models). - Popover open state now resets on route change, so navigating (bottom nav or browser back) can't strand an invisible full-screen backdrop. - Coupled the <main> bottom clearance to BottomNav's height (both 3.5rem / h-14, co-located with a note) and switched the template-string className to cn(). Verified live: route-change closes the popover with no lingering backdrop. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01H3zbym8Doka2d7D48maSgZ