Default card
Results first, then the role.
This is the system the whole site is built from. Everything here renders live from the same tokens and components the pages use, so this page can't quietly drift out of date.
There's one dark theme: near-black green neutrals, a glowing mint accent that doubles as the light on the stage, and a marigold I use sparingly. Every pairing gets checked against the surface it sits on.
--color-bg#070d0b--color-surface#0f1714--color-raised#16211d--color-sunken#040807--color-ink#edf3f0--color-muted#9db0a7--color-line#24332d--color-accent#6fcf97--color-on-accent#05110b--color-accent-soft#11251a--color-pop#f2bc5c--color-on-pop#0e1513--color-pop-text#f2bc5c--color-focus#f2bc5c--color-device#1a2320Every pairing below meets WCAG 2.2 AA.
| Used for | Pair | Result |
|---|---|---|
| Body text on the page | ink on bg | 17.43:1Pass |
| Body text on cards | ink on surface | 16.20:1Pass |
| Text on raised panels | ink on raised | 14.72:1Pass |
| Secondary text on panels | muted on raised | 7.25:1Pass |
| Secondary text | muted on bg | 8.59:1Pass |
| Captions on cards | muted on surface | 7.98:1Pass |
| Links | accent on bg | 10.31:1Pass |
| Links on cards | accent on surface | 9.58:1Pass |
| Accent text on tinted panels | accent on accent-soft | 8.48:1Pass |
| Text on tinted panels | ink on accent-soft | 14.33:1Pass |
| Active chapter | on-accent on accent | 10.12:1Pass |
| Primary button | on-accent on accent | 10.12:1Pass |
| Pop button | on-pop on pop | 10.68:1Pass |
| Pop-colored text | pop-text on bg | 11.31:1Pass |
| Focus ring (non-text, 3:1) | focus on bg | 11.31:1Pass |
| Focus ring on cards | focus on surface | 10.51:1Pass |
Headings use Bricolage Grotesque, which is chunky and a little quirky but still serious. Body text uses Atkinson Hyperlegible Next, designed by the Braille Institute so similar letters like I, l and 1 never get mixed up. Both are self-hosted and subset.
step 6Ship the thingclamp(2.6rem, 1.6rem + 4.8vw, 6.4rem)step 5Ship the thingclamp(2.25rem, 1.55rem + 3.2vw, 4.6rem)step 4Ship the thingclamp(1.9rem, 1.5rem + 1.8vw, 3.2rem)step 3Ship the thingclamp(1.8rem, 1.58rem + 1vw, 2.45rem)step 2Ship the thingclamp(1.5rem, 1.38rem + 0.55vw, 1.875rem)step 1Ship the thingclamp(1.25rem, 1.19rem + 0.3vw, 1.45rem)step 0Short sentences. Verbs about shipping.clamp(1.0625rem, 1.03rem + 0.15vw, 1.125rem)step -1Short sentences. Verbs about shipping.clamp(0.84rem, 0.82rem + 0.1vw, 0.9rem)Spacing runs on a 4px base. Corners get rounder as things get bigger, and shadows are tinted with the ink color so the layers read like real objects.
1 0.25rem2 0.5rem3 0.75rem4 1rem5 1.5rem6 2rem7 3rem8 4.5rem9 7remradius sm6pxradius md12pxradius lg24pxradius pill999pxshadow 1shadow 2shadow 3Motion is slow and smooth. Devices turn and settle as you scroll, driven by CSS scroll timelines instead of script. All of it switches off when your device asks for reduced motion: durations drop to zero, devices sit still, and the site works exactly the same.
pressfastslowpageease outease in-outPill buttons that glow on hover and press in a little. Tab to one to see the focus ring.
The whole card is one link. It lifts under your mouse and presses in when you click it.
Results first, then the role.
Lifted, with an accent edge.
Scaled down a hair, shadow tucked in.
Tinted with the soft accent.
This is the site's signature: a laptop and a phone set in CSS 3D over a pool of light. They lean toward your mouse, settle into place as they scroll in, and hold still under reduced motion. This one shows the brand-free email mock I use for NDA work.
Frames are drawn in CSS, so they cost zero image bytes and never shift the layout.
Every color, size and duration on this site comes from one file of tokens, and components never hard-code values. Change the accent and every button, link, glow and panel follows along, and this page re-checks the contrast on the next build.
--color-accent: #6fcf97;New components get added here first, in every state, before they show up on a page.