Mesh Gradient Generator
The soft multi-colour wash every hero uses — as stacked CSS radial gradients rather than a 400KB PNG
Click a handle to select that blob; move it with the position sliders. Everything here is percentages, so the same CSS fills a 320px card and a 2560px hero identically.
.mesh {
background-color: #0b1120;
background-image:
radial-gradient(ellipse 62% 50% at 15% 20%, rgba(99, 102, 241, 0.70) 0%, rgba(99, 102, 241, 0) 100%),
radial-gradient(ellipse 55% 44% at 82% 18%, rgba(236, 72, 153, 0.60) 0%, rgba(236, 72, 153, 0) 100%),
radial-gradient(ellipse 70% 56% at 60% 88%, rgba(6, 182, 212, 0.55) 0%, rgba(6, 182, 212, 0) 100%);
}bg-[#0b1120] bg-[radial-gradient(ellipse_62%_50%_at_15%_20%,_rgba(99,_102,_241,_0.70)_0%,_rgba(99,_102,_241,_0)_100%),_radial-gradient(ellipse_55%_44%_at_82%_18%,_rgba(236,_72,_153,_0.60)_0%,_rgba(236,_72,_153,_0)_100%),_radial-gradient(ellipse_70%_56%_at_60%_88%,_rgba(6,_182,_212,_0.55)_0%,_rgba(6,_182,_212,_0)_100%)]Now use it on something
Every effect, block, page and template in the catalog is styled against tokens shaped exactly like these — so they take your values rather than fighting them.
npx shadcn@latest add https://hoverlab.dev/r/hoverlab.json
Horizontal centre, as a percentage of the box. Blobs anchored past the edge — under 0 or over 100 — give you a partial wash bleeding in, which usually looks better than a full circle sitting in frame.
Vertical centre. Same trick: the most convincing meshes have most of their blobs half outside the frame.
Radius as a percentage of the box's width. Overlapping blobs are the point — where two meet is where the third colour you did not choose appears.
Alpha at the centre, before the fade out. Below about 40% the blob stops competing with the base colour and starts tinting it, which is usually the more expensive-looking result.
What the blobs fade into. A dark base with bright blobs is the look everyone is copying; a light base needs the blob strengths halved or it turns to mud.
Squashes each radial to 4:5 rather than a true circle. Perfect circles read as spotlights; ellipses read as light.
Emits rgba(r, g, b, 0) instead of `transparent`. They sound identical and are not: `transparent` is transparent BLACK, so a colour fading to it travels through grey and every blob gets a dirty ring. Turn this off and watch the edges.
An inline noise layer over the top. Large smooth gradients band visibly on 8-bit displays, and a little grain is the standard cure. For a real texture with controls, use the noise tool.
Preview only. Meshes read completely differently at hero height and at card height — the blobs that looked balanced at 380px often crowd at 160px.
Keep this mesh. This browser remembers what you last had open. A free account remembers the ones you name, on every machine you use.
- Gradient StudioVisually compose multi-stop linear and radial gradients. Drag stops, set angles, preview live, and copy as CSS with all the vendor prefixes you need.
- Section DividerWaves, tilts, notches and arcs for the seam between two full-width bands, as scalable SVG. Emits currentColor so one snippet works in both themes, with the baseline gap and the antialiased hairline already handled.
- Clip-path, Blob & Shape MagicEleven classic polygon() shapes — chevrons, stars, arrows, speech bubbles — each with its own tunable parameters, plus a seeded organic blob generator with 3–12 control points and a randomness dial. Shape Magic merges draggable circles into one organic outline and leaves as a React component, SVG, PNG or CSS clip-path.