A photograph that bends under the pointer: moving across it pushes a soft liquid ripple through the pixels, trailing behind the hand and settling back when you stop. The distortion lives in a tiny WebGL shader on top of the image, so the image itself stays a plain `<img>` for layout and SEO.
Placeholder photos by Tom Gainor on Unsplash. Replace them with your own before launch.
`uv += dir × sin(dist × 30 − t × 6) × strength × smoothstep(0.35, 0, dist)` where `dir` points away from the pointer; `strength` eases toward 0.04 while moving and decays to 0 at rest (×0.92 per frame). The pointer uniform lerps at 0.12 so the ripple trails. ~60 lines of GLSL and JS, no library.
From prompt to a block in your page.
The preview is the shipped element inside a neutral demo page. Hover, click, focus: the one interaction it is about is live.
Token sets re-tint it live. The prompt carries the one you chose.
A paste-in snippet, or a component for Next.js, React, Vue, Astro, WordPress, Shopify or Webflow.
It quotes the markup, styles and script verbatim with the tokens and the rules that keep it self-contained.
It inherits your page's font and width; the tokens live on :root; several instances share one script.