Design system · v1.4 · 18 Oct 2026

Meridian UI

01Principles

Meridian is the interface language of a fictional scheduling product. Three rules decide most things: one accent, used only for the action that matters on the screen; text contrast first, decoration last; and every component below is the real component, not a picture of it. If it looks wrong here, it is wrong in the product.

Comment on any section with Reply. Each version of this page keeps the same link; the previous ones stay in the history.

02Color

Tokens are CSS custom properties. The dark theme redefines the same names, so components never reference a raw hex.

Primary--m-primary
Accent--m-accent
Ink--m-ink
Ink 2--m-ink-2
Ink 3--m-ink-3
Surface--m-surface
Line--m-line-2
OK--m-ok
Warn--m-warn
Error--m-err

03Type

Manrope for everything readable, JetBrains Mono for tokens, ids and numbers in tables. Four sizes carry 90% of the product.

display · 34/1.05Your week, settled
title · 22/1.2Shared with Priya and two others
body · 15/1.55Each week starts on the day you choose, and anything unfinished moves on Sunday night.
caption · 12/1.4Updated 4 minutes ago · 3 devices

04Spacing

A 4 px base. Components use 2, 3 and 4; layout uses 6 and 8. Nothing in between.

1 · 4
2 · 8
3 · 12
4 · 16
6 · 24
8 · 32

05Buttons

One primary per screen. Secondary for the way back, ghost for the quiet action, danger only when something is deleted for good.

Click "Saving" to see the loading state resolve. The states are CSS classes: .secondary .ghost .danger .sm .loading and :disabled.

06Fields

Labels above, help text below, errors in the error color with the message, never only the border.

Changes next week, not this one.
They get read and write access to this week.
Only one recurrence per task.

07Cards

A card is a surface with one border, one radius and one padding. Status is a dot and a word, never a colored background.

Week 42

Launch prep

14 tasks, 9 done. Priya added 3 yesterday.

On trackOct 13 to 19
Week 43

Content batch

6 tasks, 1 done. Two carried over twice.

SlippingOct 20 to 26
Shared

Household

Shared with Tomás. Groceries on Saturday.

2 overdueEvery week

08Tables

Numbers right-aligned in the mono face. Row borders only; no zebra stripes.

PlanSeatsPriceStatus
Free1$0Active
Plus5$4.00Trial ends in 3 days
Team25$29.00Payment failed

09Usage

Copy the tokens block into a stylesheet and the components follow. The dark theme is one attribute on the root element.

:root { --m-bg: #f7f7f5; --m-ink: #1d1f2a; --m-accent: #ef8354; /* … */ }
[data-theme="dark"] { --m-bg: #14151c; --m-ink: #eef0f6; /* … */ }

<button class="btn">Save week</button>
<button class="btn secondary">Cancel</button>

document.documentElement.dataset.theme = "dark";
Published with Hostus — create yours →