Skip to content
Alethia — style guide

Alethia

Paper ground, hard black rules, one hot orange. Nothing is softened, nothing is hidden: emphasis is a fill, structure is a rule, and the chrome speaks in small mono capitals.

This page shows the system live, drawn by alethia.css. Switch the theme in the bar above. The rules and the reasons behind them are in the README; the values, for tools, are in tokens.json. The app's own stylesheets are the source of truth for all of it.

The Alethia app icon: a black alpha in an orange tile

Colour

Two neutrals and one spot colour. Swatches follow the current theme; the labels show both values. Contrast is measured against the ground the token is actually used on.

--bg
Paper / Ink
Ground
--text
Ink / Paper
Body text
--text-muted
Stone / Stone light
Secondary text
--border
Rule / Band
Rules and inverted bands
--accent-hot
Hot
Fill under ink; text on the code well
--accent
Rust / Hot light
Orange readable as text on the ground
--selection
Blush / Ember
Selection, row hover
--code-bg
Code well
Ink in light, black in dark
Do · orange as a fill, ink on it
showcase.md This file changed on disk.
Don't · hot orange as text on paper
showcase.md · unsaved ← use --accent instead

Contrast

Web Content Accessibility Guidelines (WCAG) 2 ratios, computed here in the browser from the values in alethia.css, for both themes. Text needs 4.5:1 (AA) or 7:1 (AAA). Anything under 4.5 is marked as a fail: all chrome type is small, so the 3:1 allowance for large text never applies here. The last two rows fail on purpose: they are the pairs the token split exists to prevent.

PairWhereLightDark

Type

Three voices, never mixed within a role. Archivo carries reading. Archivo Black shouts, always in capitals. DM Mono labels everything that is not content.

Display · Archivo Black 400Write it down
Prose · Archivo 400 / 600The source is always here and bold
Mono · DM Mono 400 / 500alpha.md · 710B
h1 · 2.3em

Field notes

h2 · 1.55em

Today

h3 · 1.2em

Intake

h4 · 1.02em

Owners and days

h5 · mono 0.85em
Section label
h6 · mono muted
Quiet label
Body · 1rem / 1.65

Rendering is a skin the caret peels back. Click into anything and its raw syntax reappears, then closes again when you leave.

Micro · 0.62rem +0.1emRecent
Label · 0.66rem +0.1em95 words · 667 characters
UI · 0.7rem +0.08emOpen folder…
Note · 0.72rem +0.02emNo earlier versions yet. One is kept each time a save replaces this file.
Row · 0.75rem +0.02emheader-table.md

Rules & shape

Structure is drawn, not shaded. Four line weights, square corners everywhere, no shadows. Depth comes from inversion: a band of ink on paper, or paper on ink.

2px · thin
3px · structural
6px · heavy (hr)
8px · slab (quote)
Radius0. The app-icon mask is the only curve in the system.

Chrome

The editor window, rebuilt from the .al-* classes. Hover the rows, tabs and toolbar to see the two interaction colours: hot fill for "pointing at", inversion for "pressed" or "selected". Tab through it to see the focus outline.

showcase.md
This file changed on disk since you loaded it.

Field notes

The source is always here. Rendering is a skin the caret peels back — click into anything and its raw syntax reappears.

Write it down before it becomes an opinion.

  • Draft the intake rules
  • Check the segment boundaries
    • Nested items keep their depth
95 words · 667 characters Focusshowcase.md · unsaved
Buttons
Input · rename in place
State marks
Focus Typewriter
Pinned panel · history rows
beta.md
Empty state · with recent folders

No folder open.

Recent

Prose

Plain semantic HTML inside .al-prose, set the way the editor renders markdown.

Today

Text is strong, emphasised, struck, or inline code. A link is a filled label, not an underline.

  1. Ordered markers are mono, in accent
  2. They hang in the same 1.6em gutter as bullets
    1. Nested numbering restarts
  • Square bullets: filled
  • Then open at the next depth
    • And filled again below that

StageOwnerDays
IntakeOps3
ReviewAgency6
export function reveal(node: SyntaxNode, caret: number): boolean {
  // The document is the markdown; decorations are only a skin over it.
  return caret >= node.from && caret <= node.to && 'visible' !== 0
}
title: Field notes tags: [intake, ops]

Screens

The app itself, for comparison with the rebuilt chrome above. Screenshots live in screenshots/.

Alethia in light mode: file tree on the left, format bar, and a rendered document with a quote, tasks, a table and a code slab
Light. File tree, format bar, rendered document.
Alethia in dark mode: the same window with paper text and rules on an ink ground
Dark. The paper inverts; the orange fills stay.
Alethia's history panel listing earlier versions of a file by relative time and size
History. Every save keeps the version it replaced.

Mark

App icon · assets/icon.svg
Wordmark
Alethia ἀλήθεια · disclosure

On paper the ground is white, every orange goes black, the slabs stay solid and inline fills become rules. Print this page to see the whole specimen that way; the rules are in the README under Print.