# Animated mesh gradient hero

> A full-screen living mesh gradient with film grain and a floating wave headline. Loops forever in pure CSS.

- Category: Developer tools
- Version: 1.0
- Source: https://ownlyplans.com/bhaskar/animated-mesh-gradient-hero/

## Overview

The smallest prompt of the set and the most striking: four blurred colour orbs wander across the screen, film grain adds texture, and the headline words ride a gentle wave. No JavaScript and no images.

## Tech stack

- Animation
- CSS
- HTML

## Build steps

### 1. Paste the prompt

Paste this prompt into your AI tool. It builds everything in one go, then the steps below show what to check.

Prompt:

```text
Make a single HTML file with a full-screen animated mesh-gradient hero.
Background #12091f. Inside a fixed layer (inset -20%, filter blur(60px) saturate(1.4)) place four radial-gradient circles, each about 60vmax wide: coral #ff5e7e, amber #ffb347, violet #6a5cff, teal #19d3c5. Animate each with its own transform keyframes (translate + scale, 11-16s, ease-in-out, infinite alternate) so the colours slowly mix and never repeat obviously.
Add film grain: a fixed overlay using an inline SVG feTurbulence data URI, opacity .22, mix-blend-mode overlay.
Centered content: small letter-spaced uppercase kicker "Studio Flux · 2026", a huge H1 (clamp 48-132px, weight 800, letter-spacing -0.05em, soft shadow) "Flow in every color" where each word is a span that bobs up and down 12px on a staggered wave animation, a 20px paragraph and a frosted glass pill link "Explore the work". Entrances: fade up with blur-in, staggered.
System fonts, no external files, reduced-motion safe. Return only the complete HTML.
```

### 2. Animate them

Check: Different keyframes and durations so the mix keeps changing.

### 3. Add grain and content

Check: SVG noise overlay, kicker, wave headline and glass button.

**Done when:** You can see it working in the browser.

## Assets

### prompt.md — The full prompt.

~~~~
# Animated mesh gradient hero

Copy this prompt into Claude, Cursor or Lovable.

```text
Make a single HTML file with a full-screen animated mesh-gradient hero.
Background #12091f. Inside a fixed layer (inset -20%, filter blur(60px) saturate(1.4)) place four radial-gradient circles, each about 60vmax wide: coral #ff5e7e, amber #ffb347, violet #6a5cff, teal #19d3c5. Animate each with its own transform keyframes (translate + scale, 11-16s, ease-in-out, infinite alternate) so the colours slowly mix and never repeat obviously.
Add film grain: a fixed overlay using an inline SVG feTurbulence data URI, opacity .22, mix-blend-mode overlay.
Centered content: small letter-spaced uppercase kicker "Studio Flux · 2026", a huge H1 (clamp 48-132px, weight 800, letter-spacing -0.05em, soft shadow) "Flow in every color" where each word is a span that bobs up and down 12px on a staggered wave animation, a 20px paragraph and a frosted glass pill link "Explore the work". Entrances: fade up with blur-in, staggered.
System fonts, no external files, reduced-motion safe. Return only the complete HTML.
```
~~~~

### index.html.md — Complete code of the result in the video.

~~~~
# index.html

The finished result as one file. Save it as index.html and open it.

```html
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Mesh gradient loop</title>
<style>
*{box-sizing:border-box;margin:0}
html,body{height:100%}
body{overflow:hidden;background:#12091f;font-family:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;color:#fff}
.mesh{position:fixed;inset:-20%;filter:blur(60px) saturate(1.4)}
.mesh i{position:absolute;width:60vmax;height:60vmax;border-radius:50%;opacity:.9}
.mesh i:nth-child(1){background:radial-gradient(circle,#ff5e7e,transparent 65%);left:0;top:0;animation:a 12s ease-in-out infinite alternate}
.mesh i:nth-child(2){background:radial-gradient(circle,#ffb347,transparent 65%);right:0;top:10%;animation:b 14s ease-in-out infinite alternate}
.mesh i:nth-child(3){background:radial-gradient(circle,#6a5cff,transparent 65%);left:20%;bottom:-10%;animation:c 16s ease-in-out infinite alternate}
.mesh i:nth-child(4){background:radial-gradient(circle,#19d3c5,transparent 65%);right:5%;bottom:0;animation:d 11s ease-in-out infinite alternate}
@keyframes a{to{transform:translate(35vw,25vh) scale(1.2)}}
@keyframes b{to{transform:translate(-30vw,30vh) scale(.9)}}
@keyframes c{to{transform:translate(25vw,-30vh) scale(1.15)}}
@keyframes d{to{transform:translate(-35vw,-20vh) scale(1.25)}}
.grain{position:fixed;inset:0;opacity:.22;mix-blend-mode:overlay;pointer-events:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>")}
.c{position:relative;z-index:2;height:100%;display:grid;place-content:center;text-align:center;padding:24px}
.k{font-size:13px;letter-spacing:.32em;text-transform:uppercase;opacity:.8;animation:in 1.2s both}
h1{font-size:clamp(48px,10vw,132px);line-height:.95;letter-spacing:-.05em;font-weight:800;margin:20px 0;text-shadow:0 8px 60px rgba(0,0,0,.25);animation:in 1.2s .15s both}
h1 span{display:inline-block;animation:wave 4s ease-in-out infinite}
h1 span:nth-child(2){animation-delay:-.4s}h1 span:nth-child(3){animation-delay:-.8s}h1 span:nth-child(4){animation-delay:-1.2s}h1 span:nth-child(5){animation-delay:-1.6s}
@keyframes wave{50%{transform:translateY(-12px)}}
p{font-size:20px;max-width:520px;margin:0 auto 34px;line-height:1.5;opacity:.88;animation:in 1.2s .3s both}
a{justify-self:center;padding:15px 30px;border-radius:999px;background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.4);color:#fff;text-decoration:none;font-weight:600;backdrop-filter:blur(14px);animation:in 1.2s .45s both}
@keyframes in{from{opacity:0;transform:translateY(24px);filter:blur(8px)}to{opacity:1;transform:none;filter:none}}
@media(prefers-reduced-motion:reduce){*{animation:none!important}}
</style></head><body>
<div class="mesh"><i></i><i></i><i></i><i></i></div><div class="grain"></div>
<main class="c"><div class="k">Studio Flux · 2026</div><h1><span>Flow</span> <span>in</span> <span>every</span> <span>color</span></h1><p>A living gradient background that loops forever in pure CSS. No images, no libraries.</p><a href="#">Explore the work</a></main>
</body></html>

```
~~~~


## Build instructions by tool

### Claude Code

Open a terminal in an empty folder, run `claude`, then paste the prompt.

```text
Build the "Animated mesh gradient hero" app from the OwnlyPlans blueprint at https://ownlyplans.com/bhaskar/animated-mesh-gradient-hero/.
Stack: Animation, CSS, HTML.
Follow the plan's steps in order: Paste the prompt → Animate them → Add grain and content.
Download the full plan (Markdown) from the link above and keep it in the project root as PLAN.md.
Ask me before adding anything not in the plan. (Prepared for Claude Code.)
```

### Cursor

Open an empty folder in Cursor, start an Agent chat, then paste the prompt.

```text
Build the "Animated mesh gradient hero" app from the OwnlyPlans blueprint at https://ownlyplans.com/bhaskar/animated-mesh-gradient-hero/.
Stack: Animation, CSS, HTML.
Follow the plan's steps in order: Paste the prompt → Animate them → Add grain and content.
Download the full plan (Markdown) from the link above and keep it in the project root as PLAN.md.
Ask me before adding anything not in the plan. (Prepared for Cursor.)
```

### Lovable

Start a new Lovable project and paste the prompt as your first message.

```text
Build the "Animated mesh gradient hero" app from the OwnlyPlans blueprint at https://ownlyplans.com/bhaskar/animated-mesh-gradient-hero/.
Stack: Animation, CSS, HTML.
Follow the plan's steps in order: Paste the prompt → Animate them → Add grain and content.
Download the full plan (Markdown) from the link above and keep it in the project root as PLAN.md.
Ask me before adding anything not in the plan. (Prepared for Lovable.)
```

## Definition of done

- Every build step is complete and the app runs locally.
- The main user flow works end to end.
- Share your build on OwnlyPlans with a demo link, build time and tool.
