> ## Documentation Index
> Fetch the complete documentation index at: /llms.txt
> Use this file to discover all available pages before exploring further.

# Mesh Gradient Background

> A render-safe mesh gradient using animated radial layers.

# Mesh Gradient Background

A render-safe mesh gradient using animated radial layers.

**Mesh Gradient Background**

```html mesh-gradient-bg.html
<!--
  Mesh Gradient Background - catalog component for HyperFrames.

  Paste the markup and CSS into a composition. Drive the timeline integration
  from a paused GSAP timeline so renders remain deterministic.
-->

<div class="hf-catalog-mesh-gradient-bg">
  <div class="mesh"></div>
  <div class="card">
    <div class="spot"></div>
    <div>
      <h3>Mesh Gradient Background</h3>
      <p>A render-safe mesh gradient using animated radial layers.</p>
    </div>
  </div>
</div>

<style>
  .hf-catalog-mesh-gradient-bg {
    --hf-accent: #2563eb;
    --hf-ink: #111827;
    --hf-muted: #6b7280;
    --hf-surface: #ffffff;
    color: var(--hf-ink);
    font-family: Inter, system-ui, sans-serif;
  }
  .hf-catalog-mesh-gradient-bg {
    position: relative;
    width: 760px;
    height: 428px;
    overflow: hidden;
    border-radius: 30px;
    background: #080b12;
    box-shadow: 0 28px 80px rgba(15, 23, 42, 0.2);
  }
  .hf-catalog-mesh-gradient-bg .mesh {
    position: absolute;
    inset: -22%;
    filter: blur(44px);
    opacity: 0.88;
    background:
      radial-gradient(
        circle at var(--hf-x1, 20%) var(--hf-y1, 30%),
        #60a5fa 0 18%,
        transparent 32%
      ),
      radial-gradient(
        circle at var(--hf-x2, 76%) var(--hf-y2, 52%),
        #f472b6 0 16%,
        transparent 34%
      ),
      radial-gradient(circle at var(--hf-x3, 46%) var(--hf-y3, 78%), #34d399 0 18%, transparent 34%);
  }
  .hf-catalog-mesh-gradient-bg .card {
    position: absolute;
    inset: 74px 92px;
    border: 1px solid rgba(255, 255, 255, 0.16);
    border-radius: 26px;
    background: rgba(255, 255, 255, 0.08);
    color: #fff;
    display: grid;
    place-items: center;
    text-align: center;
    overflow: hidden;
  }
  .hf-catalog-mesh-gradient-bg .spot {
    position: absolute;
    width: 260px;
    height: 260px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(255, 255, 255, 0.5), transparent 65%);
    transform: translate(var(--hf-spot-x, 0px), var(--hf-spot-y, 0px));
    mix-blend-mode: screen;
  }
  .hf-catalog-mesh-gradient-bg .particle {
    position: absolute;
    left: 50%;
    top: 54%;
    width: 12px;
    height: 20px;
    border-radius: 3px;
    background: var(--c);
    transform: translate(var(--hf-px, 0px), var(--hf-py, 0px)) rotate(var(--hf-pr, 0deg));
    opacity: var(--hf-po, 0);
  }
  .hf-catalog-mesh-gradient-bg h3 {
    margin: 0;
    font-size: 44px;
    letter-spacing: -0.04em;
  }
  .hf-catalog-mesh-gradient-bg p {
    margin: 8px 0 0;
    color: rgba(255, 255, 255, 0.7);
  }
</style>

<!--
  Timeline integration:
  tl.fromTo('.hf-catalog-mesh-gradient-bg .mesh', { '--hf-x1': '18%', '--hf-y1': '28%', '--hf-x2': '78%', '--hf-y2': '46%', '--hf-x3': '44%', '--hf-y3': '80%' }, { '--hf-x1': '34%', '--hf-y1': '42%', '--hf-x2': '62%', '--hf-y2': '60%', '--hf-x3': '58%', '--hf-y3': '64%', duration: 4, ease: 'sine.inOut' }, startTime); tl.fromTo('.hf-catalog-mesh-gradient-bg .spot', { '--hf-spot-x': '-120px', '--hf-spot-y': '-70px' }, { '--hf-spot-x': '190px', '--hf-spot-y': '90px', duration: 3, ease: 'sine.inOut' }, startTime); const particles_mesh_gradient_bg = gsap.utils.toArray('.hf-catalog-mesh-gradient-bg .particle'); if (particles_mesh_gradient_bg.length) { tl.fromTo(particles_mesh_gradient_bg, { '--hf-po': 0, '--hf-px': '0px', '--hf-py': '0px', '--hf-pr': '0deg' }, { '--hf-po': 1, '--hf-px': (i) => (Math.cos(i * 0.83) * 250) + 'px', '--hf-py': (i) => (-120 - Math.sin(i * 0.61) * 120) + 'px', '--hf-pr': (i) => (180 + i * 37) + 'deg', duration: 0.8, stagger: 0.015, ease: 'power2.out' }, startTime + 0.2); }
-->
```

Copy npx hyperframes add mesh-gradient-bg to the clipboard

That writes one file: `compositions/components/mesh-gradient-bg.html`.

## Paste it into your composition

Open `compositions/components/mesh-gradient-bg.html` and copy what is inside into your own composition.
The file opens with a comment header that walks you through it.

A component has no size or duration of its own. It takes both from the composition
you paste it into.

{/* hf:generated-footer */}

Tagged `effect`.

## Related topics

* [Browse the complete Catalog](/catalog.md)
* [Add assets and Catalog items in the browser editor](/studio/assets-and-blocks.md)
* [Put blocks together into one video](/concepts/compositions.md)
