> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Dashboard fallback guards

> What the dashboard's defensive fallbacks mean when you land in one — widget placeholders on Home, the sign-in bounce, pager labels, and stale brand colors — plus how to tell a platform defect from a workspace misconfiguration.

# Dashboard fallback guards

The dashboard ships a set of defensive fallbacks — designed degraded states that keep a page usable when one part cannot render its full content. Each fallback is covered by an automated spot-check that fails the build if the guard is ever removed. This page explains what each fallback looks like when you hit it, what it means, and how to decide whether you are seeing a platform defect or something in your own workspace.

## 1. Where the fallbacks surface

Four areas of the dashboard carry guarded degraded states:

1. **The Home page (`/home`)** — the banner widgets below the greeting (balance, trial-number promotion, KYC reminder, getting-started checklist, fraud alerts) each render a height-matched placeholder the moment the page first paints, so the widget swaps into its reserved space without moving anything on screen. If the whole page fails to load, a full error panel replaces it with a **Try again** control and an error ID.
2. **Hub pages** — Messages, Campaigns, Contacts, and Reports all render their header and their empty/zero states through the same shared components, so a hub with no traffic shows the same guided empty state rather than a blank panel.
3. **List footers** — every cursor-paged list across the dashboard renders the same **Load more** button label in exactly one casing, so the pager reads identically on every surface.
4. **The session layer** — a session check that cannot complete degrades to a clean redirect to your sign-in page instead of an unhandled error.

## 2. What each guard protects

### Home widget placeholders (`/home`)

The banner row on Home is the most-visited page in the product, so its layout was tuned to paint fast and hold still. The guard locks in two properties: the banner widgets load as separate, deferred chunks (they are never bundled back into the initial page load, which used to add \~118 KB), and each one carries a rendering placeholder that occupies the widget's eventual footprint, so first paint and final paint have identical geometry. If you see the page jump as widgets arrive, or the page take noticeably longer to first paint, the guard has regressed — report it (section 4).

### Shared header and empty-state primitives (hub pages)

The Messages, Campaigns, Contacts, and Reports hubs route their page header and their zero-traffic state through shared components. The guard keeps those hubs from drifting back to bespoke one-off headers or hand-rolled empty banners. Operationally this means: when a hub shows you an empty state, the guidance it offers (what the hub is for, and the first action to take) is a designed part of the product — not a broken render.

### Pager label normalization (list footers)

All cursor-paged lists draw their **Load more** label through one shared translation key. Previously a handful of surfaces rendered "Load More" while the rest rendered "Load more" — the same button reading differently depending on the page. The guard locks the normalized casing in place. If the pager label looks inconsistent between two consoles, treat it as a regression (section 4).

### Phantom color fallbacks (theme safety)

A color fallback is a hard-coded color value painted when a named theme token does not exist. The dashboard had a class of these that silently painted off-brand colors that never adapted to dark mode. Every known instance now routes through real theme tokens, and a guard rejects any new fallback of that shape at build time. A correctly themed dashboard has no color that ignores your light/dark setting.

### Session-check guard (login bounce instead of a 500)

When the dashboard's session check runs into an authentication misconfiguration, throwing an error would leave you on a dead page. The guard catches that specific error and redirects you to the sign-in page for your locale — a loop-free target — while every other error still propagates to the normal error boundary so genuine faults are not swallowed.

## 3. Diagnose: the session guard vs a color fallback

Two of the guarded classes produce visibly distinct symptoms. Match your symptom before you act:

1. **You are bounced to the sign-in page with no error message while navigating the dashboard.** That is the session-check guard deliberately degrading an authentication fault. Sign in once more; if every session redirects like this, it is a platform defect — open a ticket (section 4).
2. **A heading or element shows an odd, hard-tinted color that the rest of the theme does not share, or colors stop tracking your light/dark setting.** That is the color-fallback class. First check your workspace's [branding and white-label settings](/guides/branding-console-white-label) — a custom theme override on your organization is the common cause, and it is yours to fix. If the default theme is affected, open a ticket (section 4).

Everything else on this list (widget placeholders, hub empty states, pager labels) renders by design and needs no diagnosis — the guards exist so those states stay predictable.

## 4. Bug or workspace misconfiguration

Use this before you file:

* **Workspace-owned (fix it in your settings):** custom theme overrides under white-label branding; a sign-in flow you configured yourself (custom SSO) that you can reproduce on demand; empty states that resolve as soon as the surface has data.
* **Platform-owned (open a support ticket):** Home page layout shifts as its banner widgets arrive; a hub header or empty state that renders nothing at all; a pager label that differs across two consoles; a session redirect loop that recurs after one re-login; an off-theme color in the default theme. Quote the error ID printed next to any error panel — the ID routes the ticket to the right cluster.

## See also

* [Navigate the dashboard Home page](/guides/dashboard-home-overview) — orientation for the widget band the placeholder guard protects
* [Read the dashboard Home page](/guides/dashboard-home) — widget-by-widget walkthrough with the API endpoint behind each tile
* [Branding and white-label console](/guides/branding-console-white-label) — the workspace-owned theme overrides to check before filing a color report
