Skip to content

Foundations

Colour

Each colour is named for what it does. Click any block to copy its value, and read the rules beside each scale, because knowing the value is rarely the hard part.

Source of truth: varick-site/app/globals.css · varick-charts chart-spec.md · varick-docs/SKILL.md · varick-app

The one rule

Varick runs two palettes. Getting this wrong is the most common way something ends up looking off-brand.

Documents outlive the app. A memo from 2024 and an invoice from today have to read as one company, so the document palette is deliberately narrower and frozen. The web can move faster.

Do

  • Web and product UI: links, focus rings, active states, selected rows.
  • Charts, as the second series (--chart-2).
  • Marketing imagery and social templates, as a tint.

Don’t

  • Any document the company issues: memo, proposal, report, invoice, engagement letter.
  • Print of any kind.
  • Deck body pages. Navy carries the hierarchy there.

The scales

Four palettes, each with the rules that govern it.

Base colour / Brand

Core

Description and usage

Four values carry the brand. Navy is the leading colour everywhere: headings, the wordmark, table header fills, and the first chart series.

If you only remember these, you can still build something that reads as Varick.

Rules

Navy
The default for anything structural or emphatic. Never decorative.
Ink
Body text and values. Near-black, never pure black.
White
The canvas. Cards, tooltips, page ground.
Accent blue
Web and product only. Never in a document or in print.

Product colour / Web

Web and product

Description and usage

The supporting set for anything rendered in a browser. Accent blue and its wash are legal here and nowhere else.

Muted and page sit between white and the hairline, and exist so a card can separate from its ground without a border.

Rules

Accent wash
Tinted fills behind accent content, and the selection background.
Accent text
Accent-coloured text, because #3B7CF6 lands under 4.5:1.
Page
The ground behind cards. One step off white.

Product colour / State

Semantic

Description and usage

State colours read off the Varick OS app. They were not documented here before, which meant a live product surface carried four hues the design system did not know about.

Teal exists so an informational state does not have to borrow accent blue, which reads as interactive.

Rules

Success
Completed runs, healthy status, a positive delta.
Warning
Needs attention, degraded, approaching a limit.
Danger
Failed runs and destructive actions. Never for emphasis.
Teal
In progress and informational. Never for a clickable thing.

Data visualisation

Chart ramp

Description and usage

Five steps from navy through grey, plus the accent as the second series. Monochromatic plus one blue.

Read as one continuous ramp, which is how a stacked bar or a multi-series line actually presents it.

Rules

Chart 1
The first and most important series. Always navy.
Chart 2
The second series. The only place accent blue appears in a chart.
Past five
Interpolate between navy and grey. Never introduce a new hue.

Base colour / Print

Documents and print

Description and usage

Navy plus greys. That is the whole palette: no accent blue, no gradients, no second hue.

Hierarchy comes from navy, size and small caps, never from weight. The bold faces are not in the package.

Rules

Navy
Headings, title, labels, table header fill, bullets.
Navy mid
Indicative gantt bars. Nothing else, ever.
BAND
Band and callout fill, behind a 2px navy left bar.

Neutral

Fills and hairlines

Description and usage

The neutrals that sit between the canvas and the hairline. Also read off the app.

Hairline soft exists for a divider inside a container that already has a border, where the standard hairline reads as a double rule.

Rules

Fill
Inert surfaces inside a card.
Hairline soft
A divider inside an already-bordered container.

Where each one goes

The same question from the other direction: you have a surface, you need a colour.

SurfaceBackgroundTextBorder
Page#FFFFFF#111111n/a
Card#FFFFFF#111111#EBEBEB plus --shadow-card
Card on a ground#FBFBFB behind, #FFFFFF card#111111#EBEBEB
Inert surface in a card#F6F6F6#111111n/a
Callout / band#F3F6FB#3F3F3F#002870 left bar, 2px
Table header#002870#FFFFFFn/a
Primary button#002870#FFFFFFn/a
Secondary button#FFFFFF#111111#EBEBEB, #DEDEDE on hover
Selection#E8F1FE#002870n/a
Success statergba(62,124,74,0.10)#3E7C4An/a
Error#FDF6F5#D55F5A#D55F5A left bar

Accessibility

Body copy needs 4.5:1. Text at 24px or larger, and UI borders, need 3:1.

Three tokens fail as body copy on white and are restricted accordingly. The greys that pass on white do not all pass on a tinted ground, so a caption inside a band or a wash needs checking rather than assuming.

TokenDo not use it forUse instead
--fg-low #B1B1B1Any text at all. It is 2.1:1 on white and no longer used for content anywhere on this site.--muted-foreground #757575 at 4.6:1.
--border #EBEBEBText of any size, and any border that must be perceivable on its own.--hairline-hover #DEDEDE for emphasis.
--brand #3B7CF6Small text on white. It lands just under 4.5:1.--accent-foreground #2F6BE0.
--muted-foreground on a tintIt passes on white at 4.6:1 but drops to 3.7 to 4.4:1 on wash, band, muted and page.--ink-soft #3F3F3F on any tinted ground.