@iscor/design v0.2.0

The Estuary theme

An off-white, an ink, one lime.

The colours, type and shapes shared by Myna, list, remora and iscor.me. Written once as tokens, delivered as CSS variables, typed constants, a Swift package, and themes for VS Code and Xcode.

Source on GitHub
Colours
29
Schemes
2
Minimum contrast
4.5:1

Tokens

Colour

Every colour has a light and a dark value under the same name. The swatch follows the theme you are looking at; the two values below it are what each scheme gives. Click a swatch to copy its variable.

Rules

Contrast

Every text colour reads at 4.5:1 on every surface, in both schemes. npm run check fails the build otherwise. These are the ratios for the light scheme, computed from the tokens.

Contrast ratio of each text colour on each surface
Lime on light

Lime is a fill, never text on a light surface

On light, use --accent-text. On dark, the lime itself reads.

Accent text

Every text colour, every surface

ink, muted, accent-text and the status colours, on all five surfaces.

On dark

The dark bands have their own text

on-dark and on-dark-muted stay the same in both schemes.

Tokens

Type

One family, Outfit (SIL OFL), at every weight. Each app ships the font: @fontsource-variable/outfit on the web.

--mono const accent = light.accent // '#b9ff66'

Tokens

Shape

Round corners, in four sizes. An app may change its own corners; the colours stay the system's.

In use

Patterns

How the apps put the tokens together. These are recipes rather than shipped components. Turn on Inspect and point at anything to see which tokens it uses.

Science History Long reads
.btn-primary {
  background: var(--accent);
  color: var(--on-accent);
  border-radius: var(--r-pill);
}
.btn-primary:active { background: var(--accent-deep); }
:focus-visible { outline: 2px solid var(--focus); }

In your editor

Editors

Estuary Light and Estuary Dark for VS Code and Xcode, generated from the same tokens. The code reads in the system's greys: strings take the accent text colour, numbers ok, attributes info, comments muted.

Estuary Light
1// The player's progress, in the system's colours.
2import IscorDesign
3
4@MainActor
5struct EpisodeRow: View {
6    let title = "Where the river meets the sea"
7    var progress = 0.42
8
9    var body: some View {
10        ProgressView(value: progress)
11            .tint(Estuary.progress.color)
12    }
13}

Get it

Install

One source, tokens/ in the W3C design tokens format. Everything below is generated from it.

@import '@iscor/design/tokens.css';

body {
  background: var(--backdrop);
  color: var(--ink);
  font-family: var(--font);
}

/* A site switched by a .dark class (VitePress): */
@import '@iscor/design/tokens-class.css';