crucıble

Louver

Gradient blinds: angled slats tilt open around the cursor to reveal a brighter rosewood-to-indigo field behind, each open slat catching a 1px lit edge, with a slow diagonal shimmer when idle. Original OGL fragment shader, offscreen-paused and reduced-motion-safe. Idles on its own when untouched — a ghost cursor tilts the blinds.

oglfree

Installation

CLI

npx shadcn@latest add @crucible/louver

Manual — install dependencies, then copy the source

npm install ogl

Props

PropTypeDefaultDescription
colors[string, string]rosewood → indigo duotoneTwo gradient stops [from, to] for the field behind the blinds. Any hex strings.
slatCountnumber24Number of slats. Clamped so no slat renders narrower than ~10 CSS px (the effective count drops automatically on short stages).
anglenumber18Slat tilt from horizontal, in degrees.
openBiasnumber0.07Baseline openness of every slat, 0–0.8.
radiusnumber0.32Pointer influence radius as a fraction of the stage height (the blinds tilt open within this distance of the cursor).
interactivebooleantrueRespond to the pointer. When false only the idle shimmer runs.
speednumberAnimation speed multiplier. 1 = default.
intensitynumberStrength of the pointer reveal and lit-edge highlight. 1 = default.
pausedbooleanFreeze the animation, holding the current frame.
idlebooleantrueIdle autoplay: after ~1.5s with no real pointer, a seeded ghost cursor drifts over the blinds on a slow Lissajous path, tilting them open at a slightly softer strength, so the field never looks dead in thumbnails and heroes. The real pointer takes over instantly. Only when interactive; never under reduced motion.
classNamestringExtra classes for the wrapper. Positioned absolute inset-0 -z-10.

Honors prefers-reduced-motion with a designed static fallback, pauses offscreen and on hidden tabs, and passes className through.