web: AuthGate consolidates three "not authenticated" cards Create AuthGate component as the single source of truth for the unauthenticated UI. Cold renders show a manual sign-in button (IV7); mid-session expiry auto-redirects via useEffect (IV7); auth_error shows the distinct error card with a "Try again" button and never auto-retries (IV6). Swap the inline AuthError cards at index, projects, and SavedSearchesSection call sites.
web: sectioned /settings with saved-searches CRUD Add four TanStack Query hooks (useSavedSearches, useCreateSavedSearch, useUpdateSavedSearch, useDeleteSavedSearch) backed by IF3 contract. Introduce apiFetchVoid in client.ts for the 204 No Content DELETE path. Replace the placeholder /settings route with a two-column sectioned shell (SectionRail + SavedSearchesSection); Display section is disabled pending #8.