HomeStylesTemplates

Compiling the shader...

Luxe Lookbook
Neo-Brutalist
Back to Docs/Prism
FieldPaletteComponentsLab
StyleKit

Realtime WebGL

The living
gradient

A fragment shader flows across the canvas - no two frames alike. Glass holds the words, violet carries the action, and only the pixels move.

Start buildingView docs
Scroll

A living background is a premium signal. It says we wrote a shader even for the backdrop - not that we pasted an exported gradient.

01The field

One quad, one shader, forever new

A full-screen quad runs an fbm domain-warp field. The shader is compiled once; each frame only advances uniforms.

Realtime by default

Every frame is computed on the GPU with an fbm domain-warp field. Nothing is a baked PNG.

Frosted glass

Content floats on backdrop-blur panels with a 1px white/10 border and a dark scrim for legibility.

One accent

Violet carries every action and focus ring. The gradient supplies all the color it needs.

Kind to the machine

devicePixelRatio capped at 2, the loop pauses offscreen, and a single frame renders under reduced motion.

const gl = canvas.getContext("webgl");
if (!gl) return;                 // CSS gradient fallback stays
const dpr = Math.min(devicePixelRatio, 2);
// per frame: only advance uniforms
gl.uniform1f(uTime, performance.now() / 1000);
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
02Palette

Near-black, then iridescence

A deep base and a raised surface for solid sections; violet is the single UI accent, cyan and magenta live only in the field.

#08090D
Base
The canvas
#12131A
Surface
Solid sections
#EDEEF2
Paper
Section text
#7C5CFF
Violet
The one accent
#22D3EE
Cyan
Field only
#F472B6
Magenta
Field only
03Typography

Crisp sans, monospace signals

A clean grotesque for content; monospace for kickers and telemetry so the interface reads engineered.

Display / Semibold

Ship the living web

A gradient that breathes, panels that stay legible, and one accent to carry every action a visitor can take.

Body copy holds at a comfortable measure over the near-black base. Because the field is decorative, text never competes with it for attention.

u_speed 0.85 · u_blend 1.40 · u_grain 0.30

04Components

Legible over any frame

Violet for the one action, frosted translucency for everything else, so controls never hide the field.

Badges

RealtimeWebGLGPUfbm

Compile

72%

Alerts

Shader linked in 4ms
Context restored
Reduced motion active
WebGL unavailable - CSS fallback
05Shader lab

Drive the uniforms live

Each slider writes straight into the fragment shader. Scroll up to the hero or components to watch the same field respond.

u_speed 0.85 · u_blend 1.40 · u_grain 0.30
0.85
1.40
0.30

Under prefers-reduced-motion the field renders a single static frame; the sliders re-draw that frame instead of animating.

06Pricing

Glass all the way down

Cards float on the near-black base; only the featured plan borrows the accent.

Hobby

$0

Local renders

Pro

$29

Per seat / month

Scale

Custom

Volume + SSO

Uniform telemetry

FrameUniformValueState
0001u_time0.00static
0420u_speed0.85flowing
0918u_blend1.40warping
1337u_grain0.30textured
“
The background alone made the product feel expensive. We shipped one shader and the whole page grew up.

Dana Ford

Head of Design, Prism

07Guidelines

Do / Don't

Do

  • +Drive the field with a real WebGL fragment shader
  • +Cap devicePixelRatio at 2 and handle resize
  • +Pause the rAF loop offscreen via IntersectionObserver
  • +Render one static frame under reduced motion
  • +Fall back to a CSS gradient when WebGL is missing
  • +Sit text on glass panels with a scrim for 4.5:1
  • +Use a single violet accent; animate only transform / opacity

Don't

  • xFake the shader with a static PNG or CSS keyframes
  • xSkip the devicePixelRatio cap
  • xKeep the loop running while offscreen
  • xIgnore prefers-reduced-motion or the no-WebGL path
  • xPut text on the field with no glass or scrim
  • xFill the screen with canvases or loud accents
  • xAnimate DOM position and steal the shader's budget

Shader Gradient - the living gradient.

Back to topBack to all styles