The colour, type, mark, imagery, space, voice and motion the storefront is built from. Every value on this page is read out of the live theme as you load it, so it cannot drift from what the site actually does.
Three constants and a set of roles derived from them. Components ask for a role, never for a hex.
Three colours carry the brand. Everything else is a role derived from them, and components may only ask for a role.
Reach for the role, not the constant. --body is what body copy is, and it stays right if the palette is ever retuned.
Computed in your browser from the same tokens the components use. Anything reading FAIL is a defect on this page, not a note to file.
Three families and one fluid size ladder. Every size below is measured from the running theme at your current window width.
| Role | Family | Used for |
|---|---|---|
| Display | Newsreader | Headings and product titles. Light weights only — 200 and 300. |
| UI | Archivo | Body copy, buttons, navigation, everything that is not a heading. |
| Mono | IBM Plex Mono | Eyebrows, prices, meta lines, counts. Always uppercase with letterspacing. |
Every size is fluid — it interpolates between a floor and a ceiling with the viewport. The pixel values are what your browser resolves right now, at this window width; make the window narrower and they move.
One dark lockup, a short list of grounds it is allowed on, and the things that are never done to it.
The mark is a single dark lockup. It is not a colour-aware SVG, so it needs a light ground — on anything dark it must be swapped for a light version rather than recoloured.
What the pictures are of, how they are graded, and how copy is kept legible over them.
Hero copy is kept legible by a gradient over the image, not by darkening the photograph itself. Two different gradients run on desktop and mobile because the copy sits in different places.
| Where | Treatment |
|---|---|
| Hero, desktop | Left-to-right, 62% ink at the left edge fading out by 72% across. |
| Hero, mobile | Bottom-up, 88% ink at the base fading out at the top. |
| Category tiles | Bottom-up to 94% ink behind the label. |
| Media frames | No overlay. Ground is bone, so transparent PNGs sit correctly. |
The rhythm between bands and the frame the page sits in. Both are fluid, so the figures move with the viewport.
Bands and grids use a small set of fluid steps rather than arbitrary numbers. Bar lengths below are proportional; the figures are resolved at your current window width.
How the brand sounds, and the short list of things that may never be written without evidence behind them.
One duration, one curve, and a contract with anyone who asks their system for less movement.
| Token | Value | Used for |
|---|---|---|
--dur | 0.22s | Every hover, border and colour change. |
--ease | cubic-bezier(.4, 0, .2, 1) | The single curve. Do not introduce a second. |
| Hero crossfade | 1s | Slide to slide. |
| Hero drift | 7s | Slow zoom on the active slide. |
| Card image | 0.6s | Scale on hover. |
When a visitor asks their system for reduced motion, the theme honours it globally: animations and transitions collapse to effectively zero, and the hero stops both its drift and its autoplay.
loading