@casoon/dragonfly
Version:
Modular, lightweight CSS framework and design system for modern web projects. Optimized for Astro JS, LightningCSS and Container Queries with @layer-based architecture and comprehensive accessibility.
173 lines (149 loc) • 5.05 kB
CSS
/**
* Fireworks Partikel-Effekt
*
* Partikel, die wie Feuerwerkskörper explodieren – für festliche Anlässe.
* Dieser Effekt ist performant optimiert und berücksichtigt reduzierte Bewegung.
*/
@keyframes firework-rise {
0% {
opacity: var(--opacity-0);
transform: translateX(100%);
}
50% {
opacity: var(--opacity-100);
}
75%, 100% {
opacity: var(--opacity-0);
transform: translateX(0%);
}
}
@keyframes firework-explode {
0% {
box-shadow:
0 0 0 0 var(--firework-color-1, rgb(255 50 50 / 90%)),
0 0 0 0 var(--firework-color-2, rgb(50 255 50 / 90%)),
0 0 0 0 var(--firework-color-3, rgb(50 50 255 / 90%));
opacity: var(--opacity-100);
transform: scale(0.01);
}
30% {
box-shadow:
-50px -50px 0 0 var(--firework-color-1, rgb(255 50 50 / 0%)),
50px -40px 0 0 var(--firework-color-2, rgb(50 255 50 / 0%)),
0 60px 0 0 var(--firework-color-3, rgb(50 50 255 / 0%));
opacity: var(--opacity-100);
transform: scale(0.7);
}
70% {
box-shadow:
-100px -100px 0 0 var(--firework-color-1, rgb(255 50 50 / 0%)),
100px -80px 0 0 var(--firework-color-2, rgb(50 255 50 / 0%)),
0 var(--spacing-1)(--spacing-5) 0 0 var(--firework-color-3, rgb(50 50 255 / 0%));
opacity: var(--opacity-30);
}
100% {
box-shadow:
-var(--spacing-1)(--spacing-5) -var(--spacing-1)(--spacing-5) 0 0 var(--firework-color-1, rgb(255 50 50 / 0%)),
var(--spacing-1)(--spacing-5) -100px 0 0 var(--firework-color-2, rgb(50 255 50 / 0%)),
0 140px 0 0 var(--firework-color-3, rgb(50 50 255 / 0%));
opacity: var(--opacity-0);
transform: var(--transform-scale-100);
}
}
@layer components {
.fireworks {
overflow: hidden;
position: relative;
}
.fireworks::before,
.fireworks::after {
background: var(--firework-base-color, rgb(255 220 180));
border-radius: 5px;
content: '';
height: var(--spacing-1);
position: absolute;
width: var(--spacing-1);
}
.fireworks::before {
animation:
firework-rise 2.5s var(--easing-decelerate) forwards,
firework-explode 0.5s var(--easing-decelerate) 1.2s forwards;
bottom: 0%;
left: 4%0%;
}
.fireworks::after {
animation:
firework-rise 2.5s var(--easing-decelerate) 1s forwards,
firework-explode 0.5s var(--easing-decelerate) 2.2s forwards;
bottom: 0%;
left: 6%0%;
}
/* Varianten */
.fireworks-sm::before,
.fireworks-sm::after {
height: var(--border-width-thick);
width: var(--border-width-thick);
--firework-size-multiplier: 0.7;
}
.fireworks-lg::before,
.fireworks-lg::after {
height: var(--spacing-1-5);
width: var(--spacing-1-5);
--firework-size-multiplier: 1.5;
}
.fireworks-slow::before {
animation:
firework-rise 4s var(--easing-decelerate) forwards,
firework-explode 1s var(--easing-decelerate) 2s forwards;
}
.fireworks-slow::after {
animation:
firework-rise 4s var(--easing-decelerate) 1.5s forwards,
firework-explode 1s var(--easing-decelerate) 3.5s forwards;
}
.fireworks-fast::before {
animation:
firework-rise 1.5s var(--easing-decelerate) forwards,
firework-explode 0.3s var(--easing-decelerate) 0.7s forwards;
}
.fireworks-fast::after {
animation:
firework-rise 1.5s var(--easing-decelerate) 0.5s forwards,
firework-explode 0.3s var(--easing-decelerate) 1.2s forwards;
}
/* Farbvarianten */
.fireworks-red {
--firework-base-color: rgb(255 150 150);
--firework-color-1: rgb(255 50 50 / 90%);
--firework-color-2: rgb(255 100 50 / 90%);
--firework-color-3: rgb(255 50 100 / 90%);
}
.fireworks-blue {
--firework-base-color: rgb(150 150 255);
--firework-color-1: rgb(50 50 255 / 90%);
--firework-color-2: rgb(50 100 255 / 90%);
--firework-color-3: rgb(100 50 255 / 90%);
}
.fireworks-green {
--firework-base-color: rgb(150 255 150);
--firework-color-1: rgb(50 255 50 / 90%);
--firework-color-2: rgb(100 255 50 / 90%);
--firework-color-3: rgb(50 255 100 / 90%);
}
.fireworks-gold {
--firework-base-color: rgb(255 230 150);
--firework-color-1: rgb(255 215 0 / 90%);
--firework-color-2: rgb(255 200 50 / 90%);
--firework-color-3: rgb(255 180 0 / 90%);
}
}
/* Reduzierte Bewegung */
@media (prefers-reduced-motion: reduce) {
@layer components {
.fireworks::before,
.fireworks::after {
animation: var(--animation-none);
opacity: var(--opacity-0);
}
}
}