Design brief · Mode

Warm graphite, one green.

Slate is a second material, not an inversion of paper. The neutrals stay warm, the accent stays one green, and paper remains the default.

7:1

Accent minimum

10

Mode × theme

4

Accent cap, %

Stone

Warm graphite, not blue-gray

Every neutral keeps R > G > B. A cool slate reads as generic dark UI; natural slate is warm-gray. Text is chalk, never pure white.

Accent

The same green, lifted

Lightness is solved per mode until the accent clears 7:1 on the canvas and on a card. The hue does not change; only its weight moves.

Derived per theme. Every value clears 7:1 on both stone and sheet.
ThemeAccentOn bgOn surface
Emerald#A0C5B99.36:18.27:1
Garnet#D1A3AD8.00:17.07:1
Amethyst#BCA8CA8.03:17.10:1
Peacock#97C8CE9.60:18.48:1
Topaz#CEB6979.01:17.96:1

What flips

Rules that invert with the light

The stance is the same; the direction is not. Hover and elevation are the two places a paper habit reads as a bug on slate.

RulePaperSlate
HoverDarkensLightens
Primary buttonDark fill, ivory labelLight fill, dark label
Dark bandDeeper than the pageRaised sheet above it
ElevationFloating shadowSurface step plus hairline
Body textNear blackChalk, never pure white
PrintPaperFalls back to paper

Mode is not theme

Five accents and two modes are orthogonal: ten gated combinations. Set both on <html>; never mix accents on one page.

Type

The same type, on stone

Nothing about the type changes in slate. Serif display at weight 500, sans body at 17, and the same spacing. Only the ink and the surface move.

Display · Source Serif 4 · 48 · 500 · 1.10

Warm graphite, one green.

H1 · Source Serif 4 · 32 · 500 · 1.20

A typeset page on stone.

H2 · Source Serif 4 · 22 · 500 · 1.25

A section title without decoration.

H3 · Source Serif 4 · 18 · 500 · 1.30

A named part of a section.

Body · Source Sans 3 · 17 · 400 · 1.60

Body text is a sans at screen size. On slate it sits in chalk, not in pure white, because white blooms against a dark field.

Caption · Source Sans 3 · 14 · 400 · 1.45

Captions drop to warm olive; meta drops to warm stone.

Label · Source Sans 3 · 12 · 500 · 1.35 · tracking 0.06em

Section label

Components

Flat on stone too

One primary button in a real view; the extra primary below is disabled so its state is visible. Floating layers keep the shadow and take the hairline.

Buttons

Read the rules

A light fill with a dark label. A dark fill on stone does not read as primary.

Link

The rules sit in DESIGN.md. Links take the lifted green; the underline stays 3px off the text.

Tags

Quiet Default

Field

The label is chalk; the hint stays olive.

Error

Enter a face.

Code

<html lang="en" data-mode="slate">
--bg:     #1A1916;
--accent: #A0C5B9;
--ink:    #EDEAE1;

Card

What moved

  • Neutrals are warm graphite, not an inversion of paper.
  • The accent is the same hue, solved to 7:1.
  • Hover lightens. The primary label goes dark.
  • Shadows only on floating layers; hairlines carry the rest.

Image

The paper SaaS example: parchment page, serif headline, sans body
A light screenshot needs an edge on stone, so figure img takes the hairline.

Menu

Shadow plus hairline. A paper shadow alone is invisible here.

The well

A raised sheet, not a darker band

On slate a dark band cannot go darker, so .dark becomes a surface step. Links use the lifted green and the focus ring stays chalk.

Back to stone