# Global states - **Route:** `any route` - **API:** - **Visual reference:** `source/RenewCMS Screens Back-office.dc.html`, group "Global" (open it in a browser; each state is drawn at desktop and mobile, with a light/dark toggle). A 401 on any back-office call redirects to /login?redirect=&reason=expired (see "Session expired" on the auth board). A 403 from an unverified account redirects to /register/pending. A 429 appears only on log in and password reset. Toasts sit bottom right on desktop and bottom center on mobile, at most 3 at once. Success and info last 5 s; errors stay until dismissed. ## States ### 404 inside the shell **Trigger:** An unknown route while logged in. Logged out, the same content appears inside AuthShell. - Breadcrumbs: Not found (mobile title "Not found") - err: {"code":"404","title":"Page not found","text":"The link may be mistyped, or the page may have moved.","primary":"Go to Home","secondary":"All articles"} ### Generic error **Trigger:** An unexpected error while rendering a route. - Breadcrumbs: Home (mobile title "Home") - err: {"code":"Error","title":"Something went wrong","text":"This page couldn't load. Your saved work is safe. Try again, and if it keeps happening, restart the RenewCMS server.","primary":"Try again","secondary":"Go to Home"} ### Offline banner **Trigger:** navigator.onLine is false. The banner is shown on every back-office page. - Breadcrumbs: Articles (mobile title "Articles") - offline: true ### Toast stack **Trigger:** Three at most, newest at the bottom. A fourth pushes out the oldest non-error toast. - Breadcrumbs: Articles (mobile title "Articles") - Toast (success, circle-check): **Article published** ""Winter checklist for timber windows" is now online." - Toast (info, info): **That article no longer exists** "It was deleted somewhere else, so we removed it from the list." - Toast (error, circle-x): **Couldn't unpublish** "The server didn't respond. Nothing changed." with action "Retry"