Colophon

How the site is put together

A theme called Blomstring — Danish for blossoming — drawn from the work itself: warm sand grounds, one poppy red, and a lot of air.


Colour — Nine tokens

Every colour on the site is one of these. Each pairing was measured against WCAG AA in both light and dark, so nothing here is decided by eye alone.

Type

Two faces, no downloads

Both stacks are fonts you already have. Nothing is fetched, so text paints immediately and there is no layout shift when a webfont lands.

Display

Iowan Old Style

Falling back through Palatino, Book Antiqua and Georgia. High contrast, tight leading, only ever used large.

Blomstring

Body

Avenir Next

Falling back to the system sans. Set at 1.75 line-height with a 62-character measure.

There’s only one of you — enjoy it.

Labels

Uppercase, 0.22em

Eyebrows, buttons and meta share one treatment so small text always reads as navigation rather than content.

Photographic artist

Decisions

Things that were fixed, not assumed

Most of the work on a site like this is invisible. These are the choices that were measured rather than guessed:

  • Motion is optional. Under prefers-reduced-motion nothing animates, and no element sits at zero opacity waiting for a scroll listener.
  • Reveals are gated on JavaScript. A one-line inline script adds a .js class, so with scripting off the page is simply visible instead of blank.
  • The gallery is a grid, not columns. CSS multi-column filled column-by-column, which put ten of twelve works in a reading position that did not match tab order.
  • Work cards are links. Each points at the work’s own page, so a click still does something useful without scripting, and cmd-click opens a new tab.
  • Status is never colour alone. Live and past states differ by border style and dot fill as well as hue.
  • Images declare their size. Every img carries intrinsic dimensions, so measured layout shift is zero on every page.
  • The chrome is shared code. Head, header and footer come from one module, so the nav on page thirty cannot drift from the nav on page one.
Pages
Static HTML, assembled from shared chrome
CSS
One stylesheet, no framework
JavaScript
One small file, no dependencies
Build
Node scripts, output committed
Requests
No third-party, no fonts, no trackers
Images
Generated SVG placeholders
Audits
Run headless before publishing

Credit where due

Photographs

Every image currently on this site is a generated placeholder, drawn in the theme palette so the layout can be judged before the real photographs are in. They are not artworks and should not be reproduced as such.

Text and photographs © Zenna Lua. Site built to be handed over: no build step to deploy, no accounts, nothing to renew.