whilehired while (!hired) { interview(); }
Menu

Style guide

The system, rendered rather than described.

Every value on this page comes from packages/design/src/tokens.css. If a component needs something that is not here, a token is added first — not a hex value.

This page is noindex. It exists for review, not for search.

Colour

Two surfaces, one language. The marketing site is warm paper; the product is dark and quiet. There is no light theme in the app and no dark theme on the site.

Marketing

Cue · app surface

Type

Geist for everything, Geist Mono for identifiers and numbers. Display weight is 450 — confidence is quiet.

display

Keep interviewing.

Hero, once per page

h2

Keep interviewing.

Section headings

h3

Keep interviewing.

Card headings

lead

Keep interviewing.

Intro paragraph

body

Keep interviewing.

Body copy

sm

Keep interviewing.

Secondary copy, UI labels

meta

Keep interviewing.

Captions, uppercase labels

Body measure

Body copy stops at 65 characters. A paragraph that runs the width of a 1200 px container is a paragraph nobody finishes. Measure is a token, not a preference.

Numbers

01:14:32 · 42% · 1.4s

Timers, latency and counts use tabular numerals so they do not jitter.

Space and shape

A 4 px base scale. Radii are 8 / 12 / 16 px on the site and 10 / 14 / 18 px in the Cue.

s-1
s-2
s-3
s-4
s-6
s-8
s-12
s-16
s-24
s-32
radius-sm
radius-md
radius-lg
pill

Components

Every interactive component is keyboard reachable and shows a visible focus ring. Tab through this page to check it.

Buttons

One accent per screen. If two things are vermillion, neither is important.

Tags

neutral accent live warn danger

Colour is never the only signal. Every state carries a word or a shape beside it.

Field

We only use this to reach you about the beta.

Table

StateMeaning
ListeningCapture is live
PausedNothing is captured

FAQ disclosure

Does this count as a component state?

Yes — expanded and collapsed are both states, and both are tested.

Motion

Motion explains a change; it never decorates one. With prefers-reduced-motion, every duration collapses to zero — the token file handles it, so components must not hard-code transitions.

--wh-dur-120

Hover, press

--wh-dur-180

Fade, small reveal

--wh-dur-240

Panel transition

--wh-dur-340

Suggestion arrival

Copy

How the product speaks.

Write this

"Microphone permission was denied. Enable it in Windows Settings, then press Resume."

Not this

"Oops! Something went wrong 😅 Please try again."