BridgeHandbookDraft
For agents
Menu
Stable

Elevation

Glass on the page, a lift under the pointer, and five shadows and seven layers for what floats above.

Things sit at three heights. Cards are glass on the page. A clickable card lifts a little under the pointer. Menus, drawers and dialogs float above, each with its shadow and its layer, so what opened last is always on top.

On the page: glass

Cards, panels and empty states are frosted glass over a soft background, never flat white boxes. Glass carries its own soft shadow, a rim of light along the top and a blur of whatever is behind it.

Recent intros

A glass card over the page background.

  • Use Card. It is glass (liquid-glass, a 24px blur), and so are page banners and empty states.
  • The top bar is glass too, drawn by the app's shell with glass-chrome, so it blurs the page scrolling under it.
  • Glass clips what's inside it. Menus, tips and hover cards open outside it (the package puts them at the end of the page), so they're never cut off.

The page background

Three layers, drawn once by the app's shell: a dot grid (bg-dot-grid), a light grain (bg-noise) and soft color glows (bg-glow-patches). The glows stay absolute, never fixed: a fixed layer makes Safari drop the top bar's blur.

Shadows

Five shadows, each a token with a light and a dark value (dark ones are stronger, so they still show on a dark page). Components set them; a screen never writes one.

Tip0 4px 20px, 12%--shadow-dropdownTips and hover cards: small things next to what you pointed at
Lift0 6px 20px, 15%--shadow-cardA clickable card rising under the pointer
Menu0 12px 32px, 16%--shadow-menuMenus, filter popovers, toasts
Drawer-8px 0 32px, 12%--shadow-drawerSide drawers; cast to the left, away from the screen's edge
Dialog0 24px 64px, 22%--shadow-dialogDialogs, confirmations and the bottom sheet, over a dimmed page

Layers

What floats above what. Each kind of thing has one layer, so a menu opened from a drawer sits over it, and a toast shows over a dialog.

LayerWhat sits thereSet by
0–10The page: cards, sticky table headers inside their cardz-10 at most
30Bars that stick inside the page, like a page bannerPageBanner
50The top bar and the bottom tabsthe app's shell
60Drawers, opened from the pageDrawer
80Menus, tips, hover cards, bottom sheets: they open from anything, drawers includedActionMenu, FilterPill, InfoHint, HoverCard, BottomSheet
90Dialogs and confirmations: they block everything under themDialog, ConfirmDialog
100Toasts: a result must show over whatever caused itToast

Using elevation

Glass on the page, never glass in glass

Meetings

Leah Okonkwo, 10:00 AM

Priya Natarajan, 2:30 PM

Do. Inside a card, group things with lines between them.

Meetings

Leah Okonkwo, 10:00 AM
Priya Natarajan, 2:30 PM
Don’t. Glass inside glass. The blurs stack and the inner boxes look smudged.
  • Never a plain white card (bg-white, bg-[var(--surface-primary)]): it looks flat against the background.
  • Never a raw shadow (shadow-lg, shadow-[0_8px_24px…]). Floating components bring theirs; a card's lift comes from Card's href.
  • Never a raw layer (z-50, z-[999]). Components bring theirs; inside a page, nothing goes above z-10.
  • A clickable card lifts 2px with a soft shadow; buttons don't lift, they press (scale to 98%).
  • Only one thing blocks the page at a time: a dialog dims everything under it. Drawers dim the page but leave the top bar.

Rules

Glass, once

Cards, panels, empty states and the navigation are frosted glass over the page background, never flat white boxes. A glass card never sits inside another glass card: inside a card, group things with dividers or a light bordered box.