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

# Confetti

> A deterministic celebration burst with seeded particles and gravity.

# Confetti

A deterministic celebration burst with seeded particles and gravity.

**Confetti**

```html confetti.html
<!--
  Confetti - 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-confetti">
  <div class="mesh"></div>
  <div class="card">
    <div class="spot"></div>
    <div>
      <h3>Confetti</h3>
      <p>A deterministic celebration burst with seeded particles and gravity.</p>
    </div>
  </div>
  <span class="particle" style="--c: var(--accent, #f43f5e)"></span
  ><span class="particle" style="--c: var(--accent, #f59e0b)"></span
  ><span class="particle" style="--c: var(--accent, #22c55e)"></span
  ><span class="particle" style="--c: var(--accent, #38bdf8)"></span
  ><span class="particle" style="--c: var(--accent, #a855f7)"></span
  ><span class="particle" style="--c: var(--accent, #f43f5e)"></span
  ><span class="particle" style="--c: var(--accent, #f59e0b)"></span
  ><span class="particle" style="--c: var(--accent, #22c55e)"></span
  ><span class="particle" style="--c: var(--accent, #38bdf8)"></span
  ><span class="particle" style="--c: var(--accent, #a855f7)"></span
  ><span class="particle" style="--c: var(--accent, #f43f5e)"></span
  ><span class="particle" style="--c: var(--accent, #f59e0b)"></span
  ><span class="particle" style="--c: var(--accent, #22c55e)"></span
  ><span class="particle" style="--c: var(--accent, #38bdf8)"></span
  ><span class="particle" style="--c: var(--accent, #a855f7)"></span
  ><span class="particle" style="--c: var(--accent, #f43f5e)"></span
  ><span class="particle" style="--c: var(--accent, #f59e0b)"></span
  ><span class="particle" style="--c: var(--accent, #22c55e)"></span
  ><span class="particle" style="--c: var(--accent, #38bdf8)"></span
  ><span class="particle" style="--c: var(--accent, #a855f7)"></span
  ><span class="particle" style="--c: var(--accent, #f43f5e)"></span
  ><span class="particle" style="--c: var(--accent, #f59e0b)"></span>
</div>

<style>
  .hf-catalog-confetti {
    color: var(--fg, #111827);
    font-family: var(--font-body, Inter, system-ui, sans-serif);
  }
  .hf-catalog-confetti {
    position: relative;
    width: 760px;
    height: 428px;
    overflow: hidden;
    border-radius: var(--radius, 30px);
    background: var(--bg, #080b12);
    box-shadow: 0 28px 80px color-mix(in srgb, var(--bg, #0f172a) 20%, transparent);
  }
  .hf-catalog-confetti .mesh {
    position: absolute;
    inset: -22%;
    filter: blur(44px);
    opacity: 0.88;
    background:
      radial-gradient(
        circle at var(--hf-x1, 20%) var(--hf-y1, 30%),
        var(--accent, #60a5fa) 0 18%,
        transparent 32%
      ),
      radial-gradient(
        circle at var(--hf-x2, 76%) var(--hf-y2, 52%),
        var(--accent-2, #f472b6) 0 16%,
        transparent 34%
      ),
      radial-gradient(
        circle at var(--hf-x3, 46%) var(--hf-y3, 78%),
        var(--brand, #34d399) 0 18%,
        transparent 34%
      );
  }
  .hf-catalog-confetti .card {
    position: absolute;
    inset: var(--space-3, 74px) var(--space-3, 92px);
    border: 1px solid color-mix(in srgb, var(--border, #ffffff) 16%, transparent);
    border-radius: var(--radius, 26px);
    background: color-mix(in srgb, var(--surface, #ffffff) 8%, transparent);
    color: var(--fg, #fff);
    display: grid;
    place-items: center;
    text-align: center;
    overflow: hidden;
  }
  .hf-catalog-confetti .spot {
    position: absolute;
    width: 260px;
    height: 260px;
    border-radius: 50%;
    background: radial-gradient(
      circle,
      color-mix(in srgb, var(--fg, #ffffff) 50%, transparent),
      transparent 65%
    );
    transform: translate(var(--hf-spot-x, 0px), var(--hf-spot-y, 0px));
    mix-blend-mode: screen;
  }
  .hf-catalog-confetti .particle {
    position: absolute;
    left: 50%;
    top: 54%;
    width: 12px;
    height: 20px;
    border-radius: var(--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-confetti h3 {
    margin: 0;
    font-size: 44px;
    letter-spacing: -0.04em;
  }
  .hf-catalog-confetti p {
    margin: var(--space-1, 8px) 0 0;
    color: color-mix(in srgb, var(--muted, #ffffff) 70%, transparent);
  }
</style>

<!--
  Timeline integration:
  tl.fromTo('.hf-catalog-confetti .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-confetti .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_confetti = gsap.utils.toArray('.hf-catalog-confetti .particle'); if (particles_confetti.length) { tl.fromTo(particles_confetti, { '--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 confetti to the clipboard

That writes one file: `compositions/components/confetti.html`.

## Paste it into your composition

Open `compositions/components/confetti.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)
