Material Philosophy

This design system draws from physical precedent. The Beolit 15, Braun ET66, Japanese lacquerware—objects that age with grace, where surface texture reveals craft. We're not building Apple's liquid glass. That's cool. We're building something warmer: depth without transparency, presence without coldness, tactility without gimmickry.

Every glass surface in this system has grain. Not blur, not frost, but actual luminous imperfection—the way light moves through aged materials. The RGB channels are warm (#F9F6F0 in light, #1C1812 in dark) because pure white and pure black create halation, a glow that makes low-vision users work harder to parse text edges. Warmth is legibility.

The six registers exist to give surfaces hierarchy without hierarchy. A button isn't "higher" than a card because it's brighter or bigger. It's higher because it has more tactile depth, more inset shadow, more dimensional presence. This serves the people this system is built for: users whose visual field is narrowed, who need redundant signals — not color alone, but shape, position, shadow, and depth in concert. Shape, position, shadow, depth—not color alone. The register metaphor extends this principle into naming: a vocabulary borrowed from acoustic experience, for a system that serves visual experience—and whatever lies adjacent to it.

Accessibility as Design Intent

Not compliance. Conviction.

SonarUI begins from a premise most design systems skip: people with low vision and blindness are first-class citizens, not edge cases to accommodate after the fact. WCAG guidelines are a floor here, not a destination. Every decision in this system asks what the ceiling looks like — and builds toward it. The reasons behind each choice come from how vision actually degrades across conditions, not from abstract compliance checklists or empathy exercises. Contrast ratios, warm ink tones, redundant signals, generous spacing — these aren't bolt-ons. They are the design.

Contrast as Foundation

Target: 11.2:1 for body text (vs 4.5:1 AA minimum). Central vision loss changes how contrast is perceived. The difference between compliant and readable matters. Warm ink (#16130F) over pure black deliberately reduces halation—that glow that degrades tracking for low-vision conditions.

Spacing as Accessibility

The 96px section padding and generous line-heights aren't aesthetic luxury. Visual crowding is one of the first things that degrades under low-vision. Generous space is clarity. Every spacing decision asks: does this help someone whose visual field is narrowed?

Color Never Alone

Color never carries meaning by itself. Borders, shadows, position, shape—they redundantly communicate. This benefits low-vision users, color-blind users, anyone on a degraded screen, anyone in bright sunlight. Signal diversity is survival.

Focus States First

Every interactive element has a deliberate, visible focus state. Not an afterthought. The warm ink outline at 2px with 3px offset is clearly visible without garish. If you can't use this portfolio with a keyboard alone, it isn't done.

These decisions make the design better for everyone. That's not a coincidence—it's the point.

Contrast Reference (WCAG 2.1)

PairRatioStatusNotes
Ink on Ground (light mode)11.2:1✓ AAABody text, critical UI
Ink Secondary on Ground5.6:1✓ AASecondary content, labels
Ink Muted on Ground3.1:1✗ Small text onlyLarge text (18px+) or decorative
Ink on Dark (dark mode)11.2:1✓ AAADark mode body text

Simulated Visual Context

Below: same case study card under standard vision, low-contrast simulation, and protanopia (red-blind) simulation. Information never depends on color alone.

Portfolio Analytics Dashboard

Staff Designer · Chatham Financial

↑ 31%

reduction in support escalations

Read case study →

Standard vision

Portfolio Analytics Dashboard

Staff Designer · Chatham Financial

↑ 31%

reduction in support escalations

Read case study →

Low contrast simulation — still readable

Portfolio Analytics Dashboard

Staff Designer · Chatham Financial

↑ 31%

reduction in support escalations

Read case study →

Protanopia simulation — no information loss

Token Architecture

Three-tier system: Primitives (raw values) → Semantics (mode-aware) → Components (applied). This structure keeps light/dark mode in sync without duplication.

Token Flow

Primitive

--p-ink-950

Semantic

--color-text-primary

Component

body { color: ... }

Color System

Ink Primitives (0–1000)

0
100
200
300
400
500
600
700
800
900
950
1000

Surface Register System

In music, a register describes the resonant range of a voice: chest, mixed, head, falsetto. Each sits at a different depth in the body. You feel the difference before you analyze it. You don't need to see someone singing to know they've shifted into a higher register. This system borrows that language deliberately — as a quiet homage to people who navigate the world through non-visual senses. Hierarchy here is perceptual, not decorative.

The glass effect compounds this intent. These surfaces are semi-transparent not because it's fashionable, but because light perception often survives conditions that destroy visual acuity. Warm ambient glow through a frosted surface is legible at registers of vision most design systems ignore. At Base, the surface is nearly opaque — dense, grounded, warm. At Peak, it becomes 62% transparent: 28px of blur, maximum depth, a surface that catches and scatters light even when text cannot be resolved. Someone who sees only warm light still perceives the difference. That's the ceiling the system is built toward.

3D Depth Stack

Register 1: Base
Register 2: Lift
Register 3: Float
Register 4: Crest
Register 5: Summit
Register 6: Peak

The Six Registers

Register 1

Base

Blur: 4px | Shadow: minimal | Use: callouts, asides
Opacity: 0.032

Register 2

Lift

Blur: 8px | Shadow: medium | Use: cards, case studies
Opacity: 0.025

Register 3

Float

Blur: 12px | Shadow: pronounced | Use: navigation
Opacity: 0.018

Register 4

Crest

Blur: 16px | Shadow: strong | Use: modals
Opacity: 0.012

Register 5

Summit

Blur: 20px | Shadow: strong | Use: glass buttons, interactive surfaces
Glass: 50% — deeply frosted, strongly shadowed

Register 5: Summit — States

PrimarySecondary (glass)Link
Default
Hover
Focus
Disabled
Active

Size Variants

Default for inline actions. XL for hero CTAs, empty-state prompts, and section-level calls to action.

Default

XL

Register 6

Peak

Blur: 28px | Shadow: maximum | Use: tooltips, toasts, command palette
Glass: 38% — near-transparent, greatest depth

Five Interaction Rules

1

Every interactive element must have a focus state

2

Hover and active states must be kinetic

3

Grain never animates—only structure does

4

Shadow depth increases on interaction

5

Reduced motion preference disables transitions

Typography

Two families: Source Serif 4 variable (serif, headings) and Inter (sans-serif, body). Source Serif 4 leverages optical sizing and a continuous weight axis — display sizes run at 300, H1 at 350, H2 at 400. Lighter weight at large sizes reads as confident restraint, and the low stroke contrast between thick and thin strokes serves low-vision users better than high-contrast serifs.

Display — Source Serif 4 (72px · wght 300 · opsz auto)

Design with purpose

Heading 1 — Source Serif 4 (48px · wght 350 · opsz auto)

Surface Register System

Base (16px, 400)

This is the default reading size. It maintains 1.7 line-height for comfort.

Component Library

Case Study Card

Portfolio Analytics Dashboard

Staff Designer · Chatham Financial

Designed and shipped an internal analytics dashboard used by 400+ staff. Reduced support load by 31%.

↑ 31%

Stat Card

7 yrs

Complex systems design in high-trust FinTech

Motion Principles

Motion serves clarity, never distraction. Reduced motion preference disables all transitions—no exceptions.

InteractionDurationEasing
Hover state150msease-out
Active / press80msease-in
Reduced motion0ms

Usage Guidelines

When to Use Each Register

Register 1: Base

Callouts, asides, sidebar navigation, tag chips. Barely elevated — content feels grounded.

Register 2: Lift

Case study cards, content containers, stats. The primary surface for browsable content.

Register 3: Float

Sticky navigation, floating toolbars. Surfaces that visibly hover over scrolling content.

Register 4: Crest

Modal dialogs, drawer panels, sheets. The highest static ambient surface.

Register 5: Summit

Primary CTAs, interactive buttons. Kinetic: lifts on hover, depresses on click. The only interactive register.

Register 6: Peak

Tooltips, toast notifications, command palette, date pickers. Maximum depth — appears above all other surfaces.

Anti-Patterns

Using color as the only signal. Always pair with shadow, border, or position.
Removing outline-focus from interactive elements. Focus states are mandatory.