Design System

A live inventory of the classes and components used across the portfolio.

Each row shows the actual building block on the right and its name on the left, so the page works as both reference and visual audit.

Primitives

Visual foundations

Primitive

Color tokens

Core colors used for text, surfaces, borders, and accent moments across the portfolio.

Background

--background

Surface

--surface

Text

--text

Aa

Muted

--muted

Aa

Accent

--accent

Accent Soft

--accent-soft

Border

--border

1px semantic border

Surface Strong

--surface-strong

Primitive

Flat surfaces

The page uses a quiet paper background, solid surfaces, and primary-color accents without decorative background effects.

Body background

--background

Panel surface

--surface

Inset surface

--surface-inset

Primitive

Typography

The system uses a sans body face for interface copy and a serif display face for headlines and emphasis.

Body font

--font-body

Geist

Interface copy, buttons, labels, and long-form supporting text use the body font stack.

Display font

--font-display

Junicode

Used for hero headlines, section titles, and larger editorial moments.

Primitive

Borders & radius

Corners stay tight and borders are explicit, with no shadow-based elevation.

Radius scale

2px / 0.25rem / 0.375rem / 0.5rem

Elevation

--shadow

Flat depth preset

Inset surface

--surface-inset

Flat supporting surface

Classes

Global utility classes

Class

.panel

Primary flat container used for cards, detail panels, and feature blocks.

Panel

Flat surface with a visible border and no shadow.

Class

.panel-muted

Lower-contrast container used for secondary navigation and supporting blocks.

Muted panel

Softer fill and border for quieter interface moments.

Class

.accent-ring

Accent-led border treatment used to mark focal surfaces.

Accent ring

Adds restrained geometric emphasis around highlighted elements.

Class

.font-display

Display serif used for section titles, hero headlines, and large emphasis copy.

Junicode display styling for headlines

Class

.text-balance

Improves wrapping on multi-line copy blocks where balance matters more than strict line fill.

This line is intentionally long enough to show how balanced wrapping keeps a block of text feeling more composed.

Class

.ui-button-*

Button size and variant classes expressed through the shared UiButton component.

Components

Reusable UI components

Component

UiButton

Link-aware button wrapper with primary and secondary variants.

Component

SectionHeading

Standardized page and section intro used across the site.

Component

SectionHeading preview

Pairs an eyebrow, a display headline, and optional supporting copy.

Component

HoverPanel

Motion wrapper that adds lift and scale feedback to cards.

HoverPanel

Hover this card to inspect the motion behavior.

Component

HeroArt

Generative surface used in hero and case-study previews.

Featured Surface

HeroArt compresses the visual language of the portfolio into a reusable branded surface.

Component

DetailAccordion

Expandable narrative block used on detail pages for challenge, process, and outcome content.

Designed for structured long-form content without abandoning the visual tone of the portfolio.

Component

ExperimentPreview

Adaptive preview shell that renders either a HeroArt block or the Chladni simulation depending on the experiment.

Dithered wildlife artwork rendered in a warm orange palette.

Component

ChladniCanvas

Generative particle field used as the custom live preview for the Chladni experiment.

Component

FadeIn

Viewport-triggered reveal wrapper used throughout the site for staggered section entrances.

FadeIn

This preview is wrapped in the same reveal component used on the page itself.

App Shell

Layout-level components

Component

SiteHeader

Global navigation shell that reads from the shared nav items and stays pinned at the top of every page.

Live globally

The actual SiteHeader is already mounted above this page as part of the app shell.

Component

SiteFooter

Global footer that mirrors primary navigation and contact information.

Live globally

The actual SiteFooter is already mounted below this page and updates automatically with shared nav content.

Component

PageTransition

Route-level transition wrapper applied by the root layout when pages enter or exit.

PageTransition

This preview sits inside the same route-transition wrapper used by the app shell.