Colophon

How this site is made

The site is a static build with Astro 5. Pages are pre-rendered; a small island of plain TypeScript handles the interactions that need it — theme and brand switching, the work filter, the multi-step form, the charts' tooltips, and the hero canvas.

Type is self-hosted. The template ships five variable fonts, all released under the SIL Open Font License: Fraunces, Spline Sans, Newsreader, Hanken Grotesk, and Bricolage Grotesque. Each brand preset pairs a display face with a body face; switching brand swaps both in a single step.

Color is tokenized. Three brand presets ship in the same build, each with a light and a dark palette. Every foreground-and-background pair has been checked against the WCAG thresholds at build time.

Motion is structural. Reveal animations use transform and opacity only; open transitions use an ease-out curve, close transitions use an ease-in. The hero canvas pauses when it leaves the viewport and yields entirely to prefers-reduced-motion. Page transitions use the View Transitions API with a fade fallback for browsers that do not implement it.

Content lives in data files. Studio figures, work, services, capabilities, process, team, roles, and journal entries are all typed modules under src/data. Brand identity is in a single file at src/config/brand.ts.