Streamer Unfurl
A copy-paste confetti & celebration component in pure HTML & CSS. Zero dependencies, framework-agnostic, MIT-licensed.
Confetti & CelebrationHTMLCSSany framework
Copy into your project
HTML
<div class="nuda-cc2-streamer-unfurl" role="img" aria-label="Streamer ribbons unfurling from above">
<span class="nuda-cc2-streamer-unfurl__strip" aria-hidden="true" style="left:8%; --c:#e4ff54; --d:0s"></span>
<span class="nuda-cc2-streamer-unfurl__strip" aria-hidden="true" style="left:22%; --c:#ff5db1; --d:.3s"></span>
<span class="nuda-cc2-streamer-unfurl__strip" aria-hidden="true" style="left:38%; --c:#5dd0ff; --d:.6s"></span>
<span class="nuda-cc2-streamer-unfurl__strip" aria-hidden="true" style="left:54%; --c:#fafafa; --d:.9s"></span>
<span class="nuda-cc2-streamer-unfurl__strip" aria-hidden="true" style="left:70%; --c:#e4ff54; --d:1.2s"></span>
<span class="nuda-cc2-streamer-unfurl__strip" aria-hidden="true" style="left:86%; --c:#ff5db1; --d:1.5s"></span>
</div>CSS
.nuda-cc2-streamer-unfurl {
position: relative;
width: 200px;
height: 140px;
background: #09090b;
border: 1px solid rgba(255,255,255,.1);
border-radius: 12px;
overflow: hidden;
}
.nuda-cc2-streamer-unfurl__strip {
position: absolute;
top: 0;
width: 8px;
height: 76px;
border-radius: 0 0 4px 4px;
background: var(--c);
transform-origin: top center;
opacity: 0;
will-change: transform,opacity;
animation: _nuda-cc2streamerunfurl 4.5s ease-in-out var(--d) infinite;
}
@keyframes _nuda-cc2streamerunfurl {
0% {
opacity: 0;
transform: scaleY(.05) rotate(0deg);
}
10% {
opacity: 1;
}
24% {
transform: scaleY(1.08) rotate(5deg);
}
34% {
transform: scaleY(1) rotate(-3deg);
}
50% {
transform: scaleY(1) rotate(2deg);
}
66% {
transform: scaleY(1) rotate(-2deg);
}
84% {
transform: scaleY(1) rotate(1deg);
opacity: 1;
}
93% {
opacity: .35;
transform: scaleY(.5) rotate(0deg);
}
100% {
opacity: 0;
transform: scaleY(.05) rotate(0deg);
}
}
@media (prefers-reduced-motion:reduce) {
.nuda-cc2-streamer-unfurl__strip {
animation: none;
opacity: 1;
transform: scaleY(1) rotate(0deg);
}
}
How to use Streamer Unfurl
Paste the HTML where you need it and the CSS into a global stylesheet (or a <style> tag). Every class is prefixed nuda- so it never collides with Tailwind or your own styles. Tweak the CSS custom properties to match your design system.
Works in React, Vue, Svelte, Astro, Next.js, Nuxt, Laravel Blade, Django, Rails — or a single .html file. No npm install, no build step.