Perceptual Design System
The Perceptual Design System is built around perceptual scales—notably z0a (typographic notation) and L-Scale (luminance-first color).
Developed by Simon Yates, it defines a unified framework for constructing visual systems based on human perception. Each scale can be adopted independently.
It introduces a small set of interoperable scales—typography, spacing, and luminance—so visual hierarchy and relationships can be expressed without arbitrary values or one-off exceptions.
The system is intentionally finite at the point of use, but derivable beyond the documented range when new constraints or contexts demand it.
Nothing is arbitrary.
Typographic Scale
Type sizes are derived from a tritonic modular scale (three equal steps per 2:1 “octave”).
The scale is defined in rem for digital and ptfor print, with a shared step ratio so the relationships remain stable across media.
The reference (or “clef”) is z0a. In this system, z tokens descend and a tokens ascend away from the reference, and the token itself encodes direction and magnitude.
The naming rules are documented in Typographic Scale Notation.
Each step uses a constant ratio:
ratioPerStep = ∛2 ≅ 1.259921Tokens follow a simple grammar:
z0ais the reference (“clef”)- Ascenders are
a1,a2, … - Descenders are
z1,z2, …
The benefit of tokenized sizing is that it decouples semantic HTML choices from typographic intent: the scale can express hierarchy without forcing naming to track specific elements such as h1–h3.
The scale is also extendable: when a context requires sizes outside the documented band, the naming remains stable and the values are mechanically derivable rather than introduced as arbitrary new tokens.
In the following table, the HTML-relevant band is shown, plus one step above and below. The standard h1–h3, body, and small body sizes have been labelled and highlighted.
For a complete table across the full scale, see the Typographic Scale Table.
| Step | EM Size(4dp) | Point Size(1dp) | Pixel Size(4dp) | Name | Example |
|---|---|---|---|---|---|
| a4 | 2.5198rem | 30.2pt | 40.3175px | M | |
| a3 | 2.0rem | 24.0pt | 32.0px | Heading 1 | M |
| a2 | 1.5874rem | 19.0pt | 25.3984px | Heading 2 | M |
| a1 | 1.2599rem | 15.1pt | 20.1587px | Heading 3 | M |
| z0a | 1.0rem | 12.0pt | 16.0px | Body | M |
| z1 | 0.7937rem | 9.5pt | 12.6992px | Small | M |
| z2 | 0.63rem | 7.6pt | 10.0794px | M |
Orthogonal Hierarchy
In addition to vertical hierarchy through typographic scale, the system defines an orthogonal hierarchy that operates independently of size.
Changes in letterform case and weight allow elements at the same scale to express different levels of authority.
| Treatment | Example |
|---|---|
| Uppercase | Mass Production State of Mind |
| Title case | Mass Production State of Mind |
| Sentence case | Mass production state of mind |
Luminance Scale (L-Scale)
This luminance scale is part of a broader system, “L-Scale: A Lightness-First Colour System”, which documents the full methodology and research. This page focuses on how the system is used in practice.
Rather than distributing colours evenly across a numeric range, L-Scale is built around how luminance is perceived in real use—especially in typography. The goal is not theoretical balance, but consistent legibility across sizes, densities, and contexts.
At the core of the system is a perceptual midpoint:
L55(#717176) serves as the middle gray- Values below
L55are designed for use on light surfaces - Values above
L55are designed for use on dark surfaces
This midpoint anchors the entire scale and allows contrast decisions to be made predictably.
Perceptual Anchors
The scale is bounded by two softened extremes:
L25(#212126) — a soft black, reducing the harshness of pure black while maintaining strong contrastL97(#F4F4FB) — a soft white, avoiding the glare of pure white
These anchors create a more stable and comfortable contrast range for extended reading and interface use.
Size-Aware Luminance (L40, L45, L48)
Between these anchors, luminance is adjusted based on size and role.
A key property of L-Scale is that luminance is not treated as size-independent.
Smaller text requires stronger contrast to remain legible, while larger text can support lighter tones. As text size increases, perceived weight also increases—causing darker values to visually collapse toward stronger anchors like L25.
To account for this, the scale currently defines a narrow middle register that adapts based on size, role, and hierarchy:
L40(#47474C) — used when text functions as body copy, even at larger sizes (e.g.text-a1).In this role,L40behaves as a softened extension ofL25, preserving readability while avoiding the visual weight of a true heading.L45(#55555A) — used for smaller, de-emphasized supporting text such as captions, UI labels, helper text, and metadata (commonlytext-z0aortext-z1).At these sizes,L48can feel too light, whileL45maintains clarity without competing with primary content.L48(#5D5D62) — used for subtitles and subheadings where the intent is to sit clearly belowL25headings but above body copy (oftentext-a2or larger).L40can read too close toL25, especially at larger sizes or when used alongside it, reducing perceptual separation.L48provides a lighter register that preserves distinction fromL25while still appearing beforeL55, without competing with it.
This range is intentionally tight. The goal is not to introduce more options, but to allow precise control over hierarchy without breaking the perceptual continuity of the scale.
Extended Range for Surfaces
Beyond the core ramp, additional high-luminance values extend the scale to support:
- Background tints
- Subtle highlights
- Layered surfaces
These values are intentionally spaced to remain visually distinct while preserving the overall rhythm of the scale.
Visual Representation
L-Scale is displayed to reflect its intended usage:
- Core values are presented uniformly
- Values intended for smaller text are visually reduced
- Values intended for larger applications are emphasized
This representation makes the scale self-documenting—communicating not just what the values are, but howthey should be used.
Key Characteristics
- The darkest value functions as a soft black
- The lightest value functions as a soft white
L55acts as the perceptual midpoint of the system- Contrast decisions are anchored around real-world readability, not just compliance
- The scale adapts to typography size, not just colour relationships
| L-Scale | Hex | Contrast vs L100 | Contrast vs L25 |
|---|---|---|---|
L0 | #000000 | 21.00:1AAA | 1.31:1∅ |
L25 | #212126 | 16.03:1AAA | 1.00:1∅ |
L40 | #47474C | 9.24:1AAA | 1.74:1∅ |
L45 | #55555A | 7.41:1AAA | 2.16:1∅ |
L48 | #5D5D62 | 6.55:1AA | 2.45:1∅ |
L55 | #717176 | 4.85:1AA | 3.30:1∅ |
L72 | #A4A4AA | 2.48:1∅ | 6.46:1AA |
L88 | #D7D7DD | 1.43:1∅ | 11.18:1AAA |
L94 | #EAEAF1 | 1.20:1∅ | 13.39:1AAA |
L97 | #F4F4FB | 1.09:1∅ | 14.64:1AAA |
L100 | #FFFFFF | 1.00:1∅ | 16.03:1AAA |
For print, the approach shifts toward higher contrast and simpler tonal structure.
- Blacks are set to true black
- Whites remain crisp and un-tinted
- Middle grays are used sparingly, if at all
- Intermediate tones are avoided
Instead of relying on semi-tones, depth is created through:
- Line weight
- Spacing
- Negative space
This results in output that is sharper, more consistent, and more reliable across typical printing conditions.
There are also practical considerations. Black ink is more economical, and mid-tone grays produced by laser printers can appear uneven or washed out. A high-contrast approach avoids these issues while producing a more defined and intentional result.
Proximity Scale
The proximity scale defines how visual relationships are expressed through spacing and luminance.
As the site migrates toward z0a-based sizing for everything, more of this behavior becomes implicit in the system. The section remains here to describe the model and vocabulary—and will be revised once the sizing migration is complete.
Scale
| Level | Proximity | Description |
|---|---|---|
| 0 | Unity | Content is a direct continuation. Elements feel bound as a single unit with no perceptual separation. |
| 1 | Close | Tight visual grouping. Used for elements that belong together, such as a heading and its paragraph. |
| 2 | Moderate | Separation within a section. Used for subheadings or grouped ideas that are related but distinct. |
| 3 | Discrete | Separation of sections within a broader theme. Signals a clear shift in topic while maintaining continuity. |
| 5 | Unrelated | Separation of unrelated content. Signals a complete break and reset in context. |
Proximity as a Fibonacci Scale
Proximity levels follow the Fibonacci sequence, consistent with the broader system where values scale either by the typographic scale or by Fibonacci growth.
Rather than using evenly spaced increments, distance increases according to perceptual significance:
1→ tight grouping2→ related separation3→ sectional break5→ complete separation
This allows small differences to remain subtle, while larger separations expand more aggressively—matching how visual relationships are perceived.
How It’s Applied
Proximity is applied as a multiplier of the local typographic scale.
For example:
- Paragraph spacing →
1×the current font size (e.g.z0a * 1) - Subheading spacing → relative to the heading size (e.g.
mt-a1) - Section spacing →
2×–3×the relevant typographic scale - Major breaks →
5×to signal a complete separation
Because spacing is derived from typography, the system remains consistent across different sizes and layouts.
Luminance and Separation
With the L-Scale, adjacent values are sufficiently distinct that strict rules like “skip a shade” are no longer required.
Instead, luminance is selected based on:
- The role of the element
- Its size
- Its relationship to surrounding content
In most cases:
L25establishes the primary reading layerL40/L45/L48provide local separation within that layer
This creates a stable working range where hierarchy can be expressed without introducing unnecessary contrast.
Navigation and System Contrast
L55operates outside the primary content range.
It is used for navigation and system-level elements, where it should remain visually distinct from the main reading layer.
To preserve this distinction:
- Body content remains within
L25andL4xvalues - Separation is achieved through proximity and spacing, not by stepping into
L55
In practice, L55can also be used to indicate de-emphasized or inactive states, where a clear shift away from primary content is intended.
Key Idea
Proximity is not a fixed measurement—it is a perceptual signal.
- Spacing defines how far apart things are
- Luminance defines how closely they are related
Together, they create a system where relationships are immediately understood without relying on rigid rules or arbitrary values.