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)
| Pair | Ratio | Status | Notes |
|---|---|---|---|
| Ink on Ground (light mode) | 11.2:1 | ✓ AAA | Body text, critical UI |
| Ink Secondary on Ground | 5.6:1 | ✓ AA | Secondary content, labels |
| Ink Muted on Ground | 3.1:1 | ✗ Small text only | Large text (18px+) or decorative |
| Ink on Dark (dark mode) | 11.2:1 | ✓ AAA | Dark 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.
Standard vision
Low contrast simulation — still readable
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-950Semantic
--color-text-primaryComponent
body { color: ... }Color System
Ink Primitives (0–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
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
| Primary | Secondary (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
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.
| Interaction | Duration | Easing |
|---|---|---|
| Hover state | 150ms | ease-out |
| Active / press | 80ms | ease-in |
| Reduced motion | 0ms | — |
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.