Foundations · Depth & motion
How surfaces lift and how they move. Elevation is a three-step, skin-specific scale — in this dark skin a resting card is flat (--fx-elev-card is none) and lifts via surface tone + border, while overlays and modals add a 1px ring plus a deep layered shadow; the accent surface also carries the inset --fx-inner-glow bevel. Motion is five --dur-* durations paired with the brand easing curve.
Dark: none — lifts via surface tone + hairline border, no drop shadow.
Light: a soft two-layer ambient shadow.
Dark: 1px border ring + deep layered shadow — reads against near-black.
Light: a medium drop shadow.
Dark: 1px ring + the heaviest layered shadow — the top surface.
Light: a large, soft drop shadow.
The dark-only --fx-inner-glow — an inset top highlight + bottom "seat into the void" bevel. The primary Button carries it via box-shadow; it is none in the light skin. The button is pinned :hover — tab to it for the focus ring.
A live --dur-base × --ease-brand transition — background, color, lift and shadow all settle on the brand curve. Motion respects prefers-reduced-motion: the global rule snaps every duration to ~0 when the user opts out.
--dur-*; the default UI transition.none (lift via surface tone + border); light = a soft two-layer ambient shadow.0 0 0 1px border-strong + a deep layered shadow so the surface reads against near-black.--radius-xl.rgba(255,255,255,.06)) + bottom seat (rgba(0,0,0,.30)); none in light. Applied via box-shadow to accent surfaces / primary buttons.--dur-fast is the default transition.--ease-brand is the signature; --ease-in-out for moves, --ease-out-soft for drawers/sheets, --ease-emphasis (overshoot) for toasts/success only.@media rule snaps every transition / animation duration to ~0 when requested — never rely on motion to convey meaning.shadow-[var(--fx-elev-*)] / box-shadow and transition … var(--dur-*) var(--ease-brand). Don't hand-roll shadows or timings — reach for the tokens.Source · src/app/design-system/tokens/page.tsx (Elevation + Motion sections) · tokens from @phauna/ds tokens/semantic.css (depth FX) & tokens/motion.css (durations + easings).