Patterns

Card

Base interaction affordance shared by SummaryCard, QuoteCard, and SpotlightCard. Provides consistent hover background, active-press opacity, and removes default link/button styling.

Cursor Affordance

Pointer-following label on hover, with a static fallback on touch where a component needs one. Provides interaction hints without cluttering the resting state.

View project

Dithered Field

Ordered dithering as the one way the site renders a continuous quantity — a Bayer 8×8 threshold on a 2px grid, two colours, a cell either on or off. Both surfaces that use it would otherwise be gradients: SkyBand draws the sky at each end of the document, Nav's veil paints ground under the cluster. Because Bayer8 is uniform on 0–1, the threshold level IS the local coverage fraction, which is what lets coverage be measured against a contrast requirement rather than judged.

Prose

Renders markdown-to-HTML content with consistent treatment — ink-secondary dash list markers, inline link hovers, paragraph spacing. Applied via the `.prose` class on any `set:html` container.

Design systems are living documents — they evolve with the product. This paragraph demonstrates the prose pattern: consistent typography, inline links with hover states, and structured spacing between elements.

  • Ink-secondary dash markers
  • Paragraph spacing via gap
  • Inherits parent type scale

Scroll Reveal

Scroll-triggered entrance animation. Elements start invisible and translated down by half a cell, then fade and slide in over 0.45s when they enter the viewport. The stagger advances children in 0.05s increments. Respects prefers-reduced-motion. On the home flow the reveal is per block — each passage, figure, divider and byline carries it — rather than per group or per paragraph.