Foundations
Philosophy
Canon is not a style guide. It is a philosophical commitment to tools that recede into use, revealing only the work that matters.
Zuhandenheit
/ˈtsuːˌhandənˌhaɪt/ — German: "ready-to-hand"
Martin Heidegger distinguished between two modes of encountering tools: present-at-hand (Vorhandenheit) and ready-to-hand (Zuhandenheit).
Present-at-Hand
Vorhandenheit
The hammer as an object of study. You notice its weight, its material, its construction. The tool demands attention. Work stops.
Ready-to-Hand
Zuhandenheit
The hammer disappears into hammering. You think only of the nail, the wall, the picture you're hanging. The tool recedes into transparent use.
"The less we just stare at the hammer-thing, and the more we seize hold of it and use it, the more primordial does our relationship to it become." — Martin Heidegger, Being and Time
Canon's goal is Zuhandenheit: a design system that disappears into use. When you reach for var(--space-md), you shouldn't think about the golden ratio—you should simply
achieve the spacing that feels right.
The Subtractive Triad
Every creation exists simultaneously at three levels. Each level has its own discipline, question, and action. Applied in sequence, they reveal what truly matters.
DRY
Implementation Level
Eliminate duplication. Don't repeat patterns, tokens, or components. Every abstraction should exist exactly once.
Rams
Artifact Level
Dieter Rams: "Weniger, aber besser"—less, but better. Every element must justify its presence. Ornament is crime. Function is beauty.
Heidegger
System Level
The hermeneutic circle: parts must serve the whole, and the whole must illuminate the parts. Eliminate disconnection.
Application
For any design decision, ask the three questions in order:
- DRY: Is this pattern already defined? If so, use it. If not, should it become a pattern?
- Rams: Does this element justify its existence? Can it be removed without loss?
- Heidegger: Does this serve the system's coherence? Does it enable the whole?
Weniger, aber besser
/ˈveːnɪɡɐ ˈaːbɐ ˈbɛsɐ/ — German: "less, but better"
Dieter Rams' principle guides every Canon decision. It is not minimalism for aesthetics—it is minimalism for function. We remove what obscures.
"Indifference towards people and the reality in which they live is actually the one and only cardinal sin in design." — Dieter Rams
Mathematical Foundation
Canon's spacing and typography derive from the golden ratio (φ = 1.618033...). This is not arbitrary aestheticism—it is the recognition that proportional relationships feel natural because they occur throughout nature.
--space-xs 0.5rem φ⁻²--space-sm 1rem φ⁻¹--space-md 1.618rem φ⁰ × base--space-lg 2.618rem φ¹--space-xl 4.236rem φ²Each step in the scale multiplies by φ. The result: spacing that relates harmoniously at every level. Adjacent elements feel balanced. The mathematics recede; the harmony remains.
Color Philosophy
Canon's palette is functional, not decorative. Black and white provide structure. Opacity creates hierarchy. Semantic colors serve specific purposes—never ornament.
Black as Canvas
Pure black (#000000) is the canvas. Everything else is light revealing form.
Opacity for Hierarchy
White at varying opacities (100%, 80%, 60%, 46%, 20%) creates text hierarchy without introducing new colors.
Semantic Only
Colors beyond black/white exist only for meaning: success, error, warning, info. Never for decoration.
"Color is not to decorate, but to communicate."
In Practice
Philosophy without application is empty. Here is how Canon's philosophy manifests in code:
/* The Subtractive Triad applied to a component */
/* 1. DRY: Use existing tokens, don';t reinvent */
.card {
padding: var(--space-md);
border-radius: var(--radius-lg);
}
/* 2. Rams: Only necessary properties */
.card {
background: var(--color-bg-surface);
border: 1px solid var(--color-border-default);
/* No shadows, gradients, or decoration */
}
/* 3. Heidegger: Serve the system';s coherence */
.card {
transition: border-color var(--duration-micro) var(--ease-standard);
}
.card: hover {
border-color: var(--color-border-emphasis);
/* Consistent with all other hover states */
}