visualaesthetic
Get in touch

VisualAesthetic · v0.3

The system behind the site.

Tokens, type, and components rendered live from the same code the pages use. Color, washes and type show the light and dark themes side by side. Each component has its own switch, so you can flip one without changing the page. Components read semantic tokens only, never hex.

Color

Foundations and aliases

Foundations

Neutrals
  • grey-50#f3f4f6
  • grey-100#eef0f3
  • grey-150#e9ebee
  • grey-200#dde0e5
  • grey-300#c8ccd3
  • grey-400#aeb3bc
  • grey-500#8d929c
  • grey-600#545a64
  • grey-650#4b515b
  • grey-800#23262c
  • grey-850#1d2027
  • grey-900#15181d
  • grey-950#0e1013
Ink
  • slate-800#223044
Accent
  • lime-400#c8f542
  • green-700#396619
  • green-800#2d670e

Aliases

Light
  • bggrey-150
  • surfacegrey-50
  • surface-2grey-200
  • linegrey-300
  • line-strongslate-800
  • textslate-800
  • text-2grey-650
  • text-3grey-600
  • accentlime-400
  • accent-inkgreen-700
  • on-accentgrey-950
  • accent-markgreen-800
  • focusgreen-700
Dark
  • bggrey-950
  • surfacegrey-900
  • surface-2grey-850
  • linegrey-800
  • line-stronggrey-100
  • textgrey-100
  • text-2grey-400
  • text-3grey-500
  • accentlime-400
  • accent-inklime-400
  • on-accentgrey-950
  • accent-marklime-400
  • focuslime-400

Foundations are the raw colors: cool greys named by lightness, one slate ink, a lime and two greens. Aliases name a job (the page, the text, the accent) and pick a foundation in each theme, so a component asks for text and gets slate-800 in daylight and grey-100 in the dark. Accent as a fill pairs with on-accent; accent as text renders through accent-ink. Marks that point at something use accent-mark, the green in daylight because lime is too light to see on the pale ground.

Washes

Two colors per project
Light
Site pagesMain #2f7a45Partner #1d6475
Photo Finish LiveMain #17723fPartner #7f7056
Madden NFL 20/21Main #8a1c1cPartner #1d2f5e
Tap Sports FishingMain #1b6f86Partner #b8862e
HypSportsMain #a77b2cPartner #23305e
AlphaDraftMain #6648adPartner #0f9182
Dark
Site pagesMain #2f7a45Partner #1d6475
Photo Finish LiveMain #17723fPartner #7f7056
Madden NFL 20/21Main #8a1c1cPartner #1d2f5e
Tap Sports FishingMain #1b6f86Partner #b8862e
HypSportsMain #a77b2cPartner #23305e
AlphaDraftMain #6648adPartner #0f9182
Colors
Two per project, set in the CMS: a main color and a partner. The site's own pages share green and teal.
Blobs
Four soft radial blobs, two of each color, in a box that reaches up behind the nav and fades out into the page below the header.
Drift
Each blob drifts on its own loop of 41 to 59 seconds, stepped about 15 times a second so the GPU stays quiet. With reduced motion the blobs hold still.
Frost
The Bench rain's frost speckle rides inside each blob: a 160px tile at 6%, overlay blend.
Daylight
In the light theme each color mixes 48% toward white (40% on phones) and multiplies into the page; in the dark it sits at 62% (48% on phones).
Images
Case studies lay their lead image over the wash, lightly blurred, anchored right.
Bookend
The same pair closes each page behind the footer, mirrored so it rises from the bottom.

Type

Newsreader · Geist · Geist Mono
Light
Display / 1Play, watch, pay
Display / 2Selected work
TitleShow the decision, not just the screen
LedeOne sentence that frames the study.
Body / SerifCase study prose reads in Newsreader at a comfortable measure.
BodyInterface copy reads in Geist at 15 over 1.55.
CaptionFig. 1 Captions are serif italic and quiet.
LabelMono label · 12 · 0.08em
Dark
Display / 1Play, watch, pay
Display / 2Selected work
TitleShow the decision, not just the screen
LedeOne sentence that frames the study.
Body / SerifCase study prose reads in Newsreader at a comfortable measure.
BodyInterface copy reads in Geist at 15 over 1.55.
CaptionFig. 1 Captions are serif italic and quiet.
LabelMono label · 12 · 0.08em

Depth

Five levels
Light
InsetPressed into the page: an inner shadow with a lit lower edge. Tracks that hold something, like the theme switch and the ticker.Tokensnav-inset · nav-hi
FlatLevel with the page: a surface and a hairline, no shadow. Specimens, wells and the quiet cards.Tokenssurface · line
RaisedSits on the page: a lit top edge and a short, soft drop. The pressed theme chip and the ticker's Now chip.Tokensnav-hi · nav-shade
GlassFloats over color: blurs and deepens what is behind it, with a lit top edge. The nav controls over the header wash.Tokenstrack-filter · nav-hi
LiftedRises toward you on hover: 2px up and a longer shadow. Cards you can open, like the shelf and the wash tiles.Tokensbtn-shade · nav-hi
Dark
InsetPressed into the page: an inner shadow with a lit lower edge. Tracks that hold something, like the theme switch and the ticker.Tokensnav-inset · nav-hi
FlatLevel with the page: a surface and a hairline, no shadow. Specimens, wells and the quiet cards.Tokenssurface · line
RaisedSits on the page: a lit top edge and a short, soft drop. The pressed theme chip and the ticker's Now chip.Tokensnav-hi · nav-shade
GlassFloats over color: blurs and deepens what is behind it, with a lit top edge. The nav controls over the header wash.Tokenstrack-filter · nav-hi
LiftedRises toward you on hover: 2px up and a longer shadow. Cards you can open, like the shelf and the wash tiles.Tokensbtn-shade · nav-hi

Layers

A header is six layers, lowest first: the page ground, the color wash, the frost speckle, the blueprint guides, the film grain, then the type and nav. Hover or tap to pull them apart. The guides here are drawn lines standing in for the live ones.

Space

4 to 120
4
8
12
16
24
32
48
72
120

Components

Rendered live

Button

Primary pill, quiet pill, underline. Hit targets never drop below 44px.

Tag

Design leadershipLive productMobile F2P

MetaList

Role
VP Experience Design
Company
Third Time
Years
2021 to 2023

One rule language: a HUD header (mono readout over a segmented rail) opens the list, quiet rules separate the rows. Without hud, a strong rule opens it.

Figure

Specimen well
Fig. 1A media well with the glow reserved for lead figures.

Wells hold every image; captions are serif italic and numbered because the text references them.

Ticker

Now
BuildingThis site, in the openSept 2026FlyingTwo DarkStar22 cinewhoopsSept 2026StudyingFAA Part 107ongoing

Pauses on hover and focus; reduced motion renders a static list.

FieldNote

An aside in the rail column, never inside the prose.

BeforeAfter

Before
After
BeforeAfter
Fig. 2The reveal slider, wired to the compare_drag event.

A native range input over the frame: drag, swipe, arrow keys (shift for 10), and screen readers all work for free.

Hotspots

Annotated screen
Fig. 3Numbered callouts over a recreated screen.

Markers are buttons with aria-expanded; the active callout reads through an aria-live panel below the frame. The first marker opens on entry, never under reduced motion.

FlowStepper

Screen · lobby
1 of 3
BrowseThe lobby leads with what is happening now, not with navigation.
Step 1 of 3: Browse
Fig. 4A three-step flow with the step position announced.

Screen above, controls below; swipe changes step on touch. Content swaps with a cross-fade and a 12px rise on the base duration.