Skip to content
Motion
ProIn reviewv1.0.0

Pool Caustics

Sunlight through moving water, over any section: caustic light that wanders and ripples under the pointer.

Controls

0.85
3.2
0.6
<PoolCaustics />

About

The light at the bottom of a pool, behind your content. Bright lines gather where moving cells meet (the shader measures the gap between each pixel's nearest and second-nearest cell point, which is smallest along the cell edges), two scales of them overlap, a slow warp makes them wander, and the red channel is sampled a hair to the side for the faint fringe of real caustics. The pointer or a finger drops ripples into the water. It runs on the page's shared WebGL2 stage at under half the pixels; the blues come from your spectrum tokens, or from your own colours for a resort's palette. A CSS water gradient shows first and stays without hardware WebGL2. Original to VibeBox Motion.

Use it when

  • A resort, spa, pool, swim school or hotel wants its hero to feel like water.
  • A booking or "check dates" band needs atmosphere.

Skip it when

  • The brand has nothing to do with water or light; use Spectrum Mesh instead.
  • The page already has a 3D centrepiece.

Install

The demo above is live today. Installing Pro items opens with VibeBox Motion Pro; join the waitlist to hear first.

Code

The source is part of VibeBox Motion Pro.

Licensed per seat; it installs with the same shadcn command once Pro opens.

See Pro and join the waitlist

Props

PropTypeDefaultDescription
childrenReactNode—What sits on the water.
colors{ deep?: string; shallow?: string; light?: string }—Water and light colours (any CSS colour); default to tones of the spectrum's blues.
intensitynumber0.85Brightness of the light, 0 to 1.5.
scalenumber3.2Light cells across the short side; larger looks finer and deeper.
speednumber0.6Speed of the water; 0 holds it still.
interactivebooleantrueThe pointer drops ripples.
labelstring—Accessible name; leave it out when it is only a background.
classNamestring—Merged with cn(); give it a size and radius.

Accessibility and motion

Keyboard
Not focusable; content on it keeps its own focus order.
Screen readers
Decorative by default; with label it is an image with that name.
Touch
A finger drops ripples like the cursor; scrolling is never blocked.
Reduced motion
One still frame of the water; no drift or ripples.

Edge cases and limits

  • Light text on the shallows can lose contrast; keep text toward the deep end or on a card.
  • Very high intensity with a bright light colour washes out; stay below 1.2.
  • Spectrum shapes seen through vertical reeded glass

    Reeded-glass refraction over an image or spectrum art; the flutes slide with scroll and lean with the pointer.

    Backgrounds · WebGL2

  • A soft spectrum gradient behind a heading and a button

    A soft spectrum mesh gradient that drifts behind your content and leans toward the cursor; still under reduced motion.

    Backgrounds · WebGL2

  • A website wireframe and its finished design split by a rippling liquid seam

    A before-and-after slider whose edge is a wobbling liquid seam; drag, tap or use the arrow keys.

    Cursor and touch · WebGL2

↑ ↓ to move↵ to openesc to close