A ribbon of fine glowing wires drifting and twisting
| Name | Type | Default | Description |
|---|---|---|---|
colors | [string, string] | ["#6B3CFF", "#D46BFF"] | Two colours the strands cycle through, blended in OKLab. A deep shade of the first colour is derived automatically, so neighbouring strands never read as one flat band. |
backgroundColor | string | "#0A0A0A" | Colour behind the ribbon. |
mode | "auto" | "glow" | "ink" | "auto" | glow adds light for dark backgrounds, ink draws coloured strands for light ones. auto picks from the background brightness. |
wires | number | 64 | Number of strands across the ribbon, from 4 to 160. Where the ribbon turns edge-on they stack into bright knots. |
lineWidth | number | 1.6 | Width of the strands facing the viewer, in pixels. Strands on the far side of a twist thin out. |
ribbonWidth | number | 0.24 | Width of the ribbon as a fraction of the height. |
amplitude | number | 0.6 | How far the ribbon swings from the centre line. |
waveLength | number | 1 | Length of the ribbon's swings. Larger values give longer, lazier curves. |
angle | number | 42 | Direction the ribbon runs across the frame, in degrees. |
twist | number | 1.6 | How many times the ribbon turns over along its length. |
curl | number | 0.25 | Curves the ribbon's cross-section, so the strands bunch and fan apart as it turns. |
depth | number | 0.65 | How much strands on the far side of a turn fade and thin, from 0 (flat) to 1. |
stripes | number | 2.2 | How many times the colours cycle across the ribbon. 0 gives a single colour. |
colorFlow | number | 0.04 | Speed at which the colour stripes drift along the strands. Negative values drift the other way. |
glow | number | 0.45 | Soft haze around the strands, from 0 (crisp lines only) to 3. |
intensity | number | 1 | Overall exposure. |
speed | number | 0.7 | How fast the ribbon drifts and reshapes. Negative values run it backwards. |
spin | number | 0.35 | How fast the twists roll along the ribbon. |
interactive | boolean | true | Respond to the pointer. |
hoverPulses | boolean | true | Sweeping the pointer across the ribbon sends light running along the strands it crosses, like fibre optics. |
clickPulse | boolean | true | Clicking sends a bright pulse through every strand, spreading both ways from the pointer. |
pulseSpeed | number | 1.1 | How fast pulses travel along the strands. |
pulseStrength | number | 1 | Brightness of the pulses, from 0 to 3. |
hoverBoost | number | 1 | How much the ribbon brightens and quickens while the pointer is over it, from 0 to 2. |
paused | boolean | false | Freeze the drift. Pulses still run. Reduced-motion users always get a still frame. |
quality | number | 1 | Resolution scale from 0.25 to 1. Lower values are cheaper on large screens. |
ref | { pulse } | — | pulse(x) sends a pulse through every strand from a horizontal position between 0 and 1, for example when a form is submitted. |
children | ReactNode | — | Content placed over the background. |
className | string | — | Classes for the root element. It fills its parent, with a 240px minimum height. |
style | CSSProperties | — | Inline styles for the root element. |
colors[string, string]Two colours the strands cycle through, blended in OKLab. A deep shade of the first colour is derived automatically, so neighbouring strands never read as one flat band.
["#6B3CFF", "#D46BFF"]backgroundColorstringColour behind the ribbon.
"#0A0A0A"mode"auto" | "glow" | "ink"glow adds light for dark backgrounds, ink draws coloured strands for light ones. auto picks from the background brightness.
"auto"wiresnumberNumber of strands across the ribbon, from 4 to 160. Where the ribbon turns edge-on they stack into bright knots.
64lineWidthnumberWidth of the strands facing the viewer, in pixels. Strands on the far side of a twist thin out.
1.6ribbonWidthnumberWidth of the ribbon as a fraction of the height.
0.24amplitudenumberHow far the ribbon swings from the centre line.
0.6waveLengthnumberLength of the ribbon's swings. Larger values give longer, lazier curves.
1anglenumberDirection the ribbon runs across the frame, in degrees.
42twistnumberHow many times the ribbon turns over along its length.
1.6curlnumberCurves the ribbon's cross-section, so the strands bunch and fan apart as it turns.
0.25depthnumberHow much strands on the far side of a turn fade and thin, from 0 (flat) to 1.
0.65stripesnumberHow many times the colours cycle across the ribbon. 0 gives a single colour.
2.2colorFlownumberSpeed at which the colour stripes drift along the strands. Negative values drift the other way.
0.04glownumberSoft haze around the strands, from 0 (crisp lines only) to 3.
0.45intensitynumberOverall exposure.
1speednumberHow fast the ribbon drifts and reshapes. Negative values run it backwards.
0.7spinnumberHow fast the twists roll along the ribbon.
0.35interactivebooleanRespond to the pointer.
truehoverPulsesbooleanSweeping the pointer across the ribbon sends light running along the strands it crosses, like fibre optics.
trueclickPulsebooleanClicking sends a bright pulse through every strand, spreading both ways from the pointer.
truepulseSpeednumberHow fast pulses travel along the strands.
1.1pulseStrengthnumberBrightness of the pulses, from 0 to 3.
1hoverBoostnumberHow much the ribbon brightens and quickens while the pointer is over it, from 0 to 2.
1pausedbooleanFreeze the drift. Pulses still run. Reduced-motion users always get a still frame.
falsequalitynumberResolution scale from 0.25 to 1. Lower values are cheaper on large screens.
1ref{ pulse }pulse(x) sends a pulse through every strand from a horizontal position between 0 and 1, for example when a form is submitted.
—childrenReactNodeContent placed over the background.
—classNamestringClasses for the root element. It fills its parent, with a 240px minimum height.
—styleCSSPropertiesInline styles for the root element.
—