01 / Color choices A quieter
A quieter
color range.
Cyan and blue are deliberately absent. Softened violet, rose, green, and earth tones leave a clear gap in the hue circle, keeping the palette restrained during long reading sessions.
- Less competition
- Fewer hue families compete for attention. Color separates meaningful details instead of filling every part of the view.
- Accents and neutrals
- Six chromatic accents carry structure. Static and Moonveil provide the quiet neutral range around them.
Cyan / Blue omitted
02 / Surfaces Pure grayscale
Pure grayscale
surfaces.
Equal red, green, and blue values keep the interface neutral. Depth comes from brightness and spacing, while the surrounding field leaves the color of your content alone.
- No color cast
- Neither warm nor cool. Every accent sits on the same unbiased field, without a tinted surface shifting its appearance.
- Depth through brightness
- Small changes in lightness distinguish the background, working surface, and raised planes. The RGB channels remain equal at every level.
Background #161616
- R
- 22
- G
- 22
- B
- 22
Equal channels.
No color cast.
03 / In use Structure
Structure
at a glance.
Punctuation stays muted and variables use the normal foreground. Color marks the role of a word, keeping the same visual hierarchy across four languages.
- Punctuation
- Muted
- Variables
- Foreground
- Keywords
- Afterglow
- Functions
- Halo
- Strings
- Unripe
- Constants
- Life
- Types / numbers
- Regolith
reading.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
type Reading = {
label: string
value: number
}
const LIMIT = 100
/* Preserve the label while keeping
the measurement within range. */
export function measure(input: Reading): Reading {
const value = Math.min(input.value, LIMIT)
return { label: 'normalized', value }
}
const result = measure({ label: 'source', value: 72 })