sample · sparkline
acid · area
substrate. motion. density. locale. four cross-cutting brand contracts that every primitive in @zero/ui reads from. before this pack the contracts lived as CSS conventions; now they live as React Context, with a display: contentswrapper that adds zero layout cost. consumers compose the cascade once at the app root; descendant primitives inherit the tier without any further wiring.
acid · area
bids vs asks
acid · area
bids vs asks
oklch(0.752 0.122 81.2)→oklch(0.78 0.135 75)oklch(0.861 0.0349 84.58)→oklch(0.8507 0.0668 73.42)oklch(0.0706 0.0145 82.32)→oklch(0.0422 0.0173 29.23)oklch(0.78 0.135 75)→oklch(0.78 0.135 38)| # | provider | context shape | wrapper attribute | default |
|---|---|---|---|---|
| 72 | ThemeProvider | { skin, substrate: 'dark' } | data-skin \u00b7 data-substrate | signature \u00b7 dark |
| 73 | MotionProvider | { tier, reducedMotion } | data-motion | full |
| 74 | DensityProvider | { density } | data-density | cozy |
| 75 | LocaleProvider | { locale, direction } | lang \u00b7 dir | en \u00b7 ltr |
<ThemeProvider skin="signature"> <MotionProvider tier="full"> <DensityProvider density="cozy"> <LocaleProvider locale="en" direction="ltr"> <App /> </LocaleProvider> </DensityProvider> </MotionProvider></ThemeProvider>'use client';import { useTheme, useMotion, useDensity, useLocale } from '@zero/ui';import { chapterMetadata } from '../../lib/meta'; function MyComponent() { const { skin } = useTheme(); const { reducedMotion } = useMotion(); const { density } = useDensity(); const { locale, direction } = useLocale(); return <span data-skin={skin}>{locale}</span>;}| time | asset | p/l |
|---|---|---|
| 14:22 | sol-perp | +82.30 |
| 14:24 | eth-perp | -14.10 |
| 14:39 | btc-perp | +41.40 |
| time | asset | p/l |
|---|---|---|
| 14:22 | sol-perp | +82.30 |
| 14:24 | eth-perp | -14.10 |
| 14:39 | btc-perp | +41.40 |
| time | asset | p/l |
|---|---|---|
| 14:22 | sol-perp | +82.30 |
| 14:24 | eth-perp | -14.10 |
| 14:39 | btc-perp | +41.40 |
| tier | --ease-step | --breath | --pulse | use case |
|---|---|---|---|---|
full | cubic-bezier(0.32, 0.72, 0, 1) | 1 | 1 | default \u00b7 the four-clock organism runs |
reduced | linear | 0 | 1 | respects prefers-reduced-motion |
off | linear | 0 | 0 | print substrate \u00b7 accessibility-first embeds |
tier='reduced'when the consumer has set prefers-reduced-motion; reach for tier='off' only for print, embeds, and accessibility-first surfaces where motion has been explicitly opted out.╭── TRADE RECEIPT ──────╮ │ asset · sol-perp │ side · long │ size · 12.000 │ price · $248.40 │ ts · 14:22:08Z │ hash · 0x7a4f ╰───────────────────────╯
╭── TRADE RECEIPT ──────╮ │ asset · sol-perp │ side · long │ size · 12.000 │ price · $248.40 │ ts · 14:22:08Z │ hash · 0x7a4f ╰───────────────────────╯
brand/voice/lexicon-*and grade with rewriteIn from @zero/brand-runtime. the LocaleProvider just exposes which locale to format numbers, dates, and day-of-week against. rendering the sameReceipt at en versus es changeslang and dir on the wrapper; downstream format helpers key off those attributes.