A sea of text lines rolling in soft swells, in and out of focus
| Name | Type | Default | Description |
|---|---|---|---|
text | string | "FORM FOLLOWS FEELING ·" | The phrase repeated along every line of the sea. |
colors | [string, string] | ["#FFFFFF", "#7C5CFF"] | Colour of the text on the crests and nearby, and colour it fades to in the troughs and the distance, blended in OKLab. |
backgroundColor | string | "#0A0A0A" | Colour of the water between the lines. Nearer crests hide the lines behind them in this colour. |
mode | "auto" | "glow" | "ink" | "auto" | glow lets bright crests burn toward white on dark backgrounds; ink keeps colours true for light ones. auto picks from the background. |
fontFamily | string | inherited | Font for the lettering. Leave unset to use the page font. |
fontWeight | number | 500 | Font weight. |
letterSpacing | number | 0.08 | Letter spacing in em. |
glyphSize | number | 13 | Size of the nearest line of text, in pixels. Lines further away get smaller. |
rows | number | 30 | Number of lines of text, from 2 to 64. |
perspective | number | 0.55 | Depth of the view, from 0 (a flat stack of lines, like a ridgeline chart) to 1 (a deep sea running to the horizon). |
tilt | number | 24 | How steeply you look down at the sea, in degrees. |
horizon | number | 0.36 | Where the furthest line sits, as a fraction of the height from the top. Leaves room for a headline above. |
amplitude | number | 1.6 | Height of the swell, measured in line spacings. |
wavelength | number | 0.7 | Length of the swell relative to the width of the frame. |
speed | number | 1 | Time scale for the swell. |
direction | number | 0 | Direction the swell travels, in degrees. 0 rolls toward you. |
sharpness | number | 0.5 | How peaked the crests are, from 0 (rounded) to 1 (sharp). |
envelope | number | 0 | Gathers the swell toward the centre, from 0 (even) to 1 (peaks in the middle, flat at the sides). |
flow | number | 0.8 | Speed the text drifts along its line, in em per second. Negative values drift the other way. |
alternate | boolean | false | Neighbouring lines drift in opposite directions. |
fog | number | 0.6 | How quickly distant lines fade, from 0 to 3. |
interactive | boolean | true | Respond to the pointer. |
hoverFocus | boolean | true | The lens racks focus to follow the pointer: the lines at the pointer's depth turn crisp while nearer and farther lines soften, then focus eases back to focusDepth when the pointer leaves. |
focusDepth | number | 0.3 | Where the lens rests, from 0 (the nearest line) to 1 (the horizon). |
depthOfField | number | 0.7 | How soft the out-of-focus lines get, from 0 (everything sharp) to 1. |
focusRange | number | 0.14 | Depth of the sharp band around the focus, as a fraction of the sea. |
clickStrum | boolean | true | Clicking strums the lines: a soft ripple runs along each one, spreading out from the line you clicked. |
strumStrength | number | 1 | Height of the strum ripple, from 0 to 3. |
tension | number | 1 | How fast a strum ripple runs along the lines. |
sustain | number | 1.6 | Seconds a strummed line keeps ringing. |
paused | boolean | false | Freeze the sea. Reduced-motion users always get a still frame. |
quality | number | 1 | Resolution scale from 0.25 to 1. |
ref | { strum } | — | strum(x, y) strums the lines from a point given as fractions of the width and height. |
children | ReactNode | — | Content placed over the sea. |
className | string | — | Classes for the root element. It fills its parent, with a 240px minimum height. |
style | CSSProperties | — | Inline styles for the root element. |
textstringThe phrase repeated along every line of the sea.
"FORM FOLLOWS FEELING ·"colors[string, string]Colour of the text on the crests and nearby, and colour it fades to in the troughs and the distance, blended in OKLab.
["#FFFFFF", "#7C5CFF"]backgroundColorstringColour of the water between the lines. Nearer crests hide the lines behind them in this colour.
"#0A0A0A"mode"auto" | "glow" | "ink"glow lets bright crests burn toward white on dark backgrounds; ink keeps colours true for light ones. auto picks from the background.
"auto"fontFamilystringFont for the lettering. Leave unset to use the page font.
inheritedfontWeightnumberFont weight.
500letterSpacingnumberLetter spacing in em.
0.08glyphSizenumberSize of the nearest line of text, in pixels. Lines further away get smaller.
13rowsnumberNumber of lines of text, from 2 to 64.
30perspectivenumberDepth of the view, from 0 (a flat stack of lines, like a ridgeline chart) to 1 (a deep sea running to the horizon).
0.55tiltnumberHow steeply you look down at the sea, in degrees.
24horizonnumberWhere the furthest line sits, as a fraction of the height from the top. Leaves room for a headline above.
0.36amplitudenumberHeight of the swell, measured in line spacings.
1.6wavelengthnumberLength of the swell relative to the width of the frame.
0.7speednumberTime scale for the swell.
1directionnumberDirection the swell travels, in degrees. 0 rolls toward you.
0sharpnessnumberHow peaked the crests are, from 0 (rounded) to 1 (sharp).
0.5envelopenumberGathers the swell toward the centre, from 0 (even) to 1 (peaks in the middle, flat at the sides).
0flownumberSpeed the text drifts along its line, in em per second. Negative values drift the other way.
0.8alternatebooleanNeighbouring lines drift in opposite directions.
falsefognumberHow quickly distant lines fade, from 0 to 3.
0.6interactivebooleanRespond to the pointer.
truehoverFocusbooleanThe lens racks focus to follow the pointer: the lines at the pointer's depth turn crisp while nearer and farther lines soften, then focus eases back to focusDepth when the pointer leaves.
truefocusDepthnumberWhere the lens rests, from 0 (the nearest line) to 1 (the horizon).
0.3depthOfFieldnumberHow soft the out-of-focus lines get, from 0 (everything sharp) to 1.
0.7focusRangenumberDepth of the sharp band around the focus, as a fraction of the sea.
0.14clickStrumbooleanClicking strums the lines: a soft ripple runs along each one, spreading out from the line you clicked.
truestrumStrengthnumberHeight of the strum ripple, from 0 to 3.
1tensionnumberHow fast a strum ripple runs along the lines.
1sustainnumberSeconds a strummed line keeps ringing.
1.6pausedbooleanFreeze the sea. Reduced-motion users always get a still frame.
falsequalitynumberResolution scale from 0.25 to 1.
1ref{ strum }strum(x, y) strums the lines from a point given as fractions of the width and height.
—childrenReactNodeContent placed over the sea.
—classNamestringClasses for the root element. It fills its parent, with a 240px minimum height.
—styleCSSPropertiesInline styles for the root element.
—