180 lines
3.8 KiB
CSS
180 lines
3.8 KiB
CSS
.spring-container {
|
|
display: block;
|
|
position: fixed;
|
|
overflow: hidden;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
pointer-events: none;
|
|
z-index: 1000;
|
|
}
|
|
|
|
/* Petals */
|
|
.spring-petal {
|
|
position: fixed;
|
|
top: -20px;
|
|
z-index: 1005;
|
|
width: 15px;
|
|
height: 10px;
|
|
background-color: #ffc0cb;
|
|
border-radius: 15px 0px 15px 0px;
|
|
|
|
will-change: transform, top;
|
|
animation-name: spring-fall, spring-sway;
|
|
animation-timing-function: linear, ease-in-out;
|
|
animation-iteration-count: infinite, infinite;
|
|
animation-duration: 10s, 3s;
|
|
}
|
|
|
|
.spring-petal.lighter {
|
|
background-color: #ffd1dc;
|
|
opacity: 0.8;
|
|
}
|
|
|
|
.spring-petal.darker {
|
|
background-color: #ffb7c5;
|
|
opacity: 0.9;
|
|
}
|
|
|
|
.spring-petal.type2 {
|
|
width: 12px;
|
|
height: 12px;
|
|
border-radius: 10px 0px 10px 5px;
|
|
}
|
|
|
|
/* Pollen */
|
|
.spring-pollen {
|
|
position: fixed;
|
|
z-index: 14;
|
|
background-color: #fffacd;
|
|
border-radius: 50%;
|
|
opacity: 0.6;
|
|
box-shadow: 0 0 4px rgba(255, 250, 205, 0.4);
|
|
|
|
will-change: transform;
|
|
animation-name: spring-float;
|
|
animation-timing-function: linear;
|
|
animation-iteration-count: infinite;
|
|
}
|
|
|
|
/* Sunbeams */
|
|
.spring-sunbeam {
|
|
position: fixed;
|
|
top: -50%;
|
|
height: 200%;
|
|
background: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(255, 255, 200, 0.08) 50%, rgba(255, 255, 255, 0));
|
|
z-index: 5;
|
|
transform-origin: top center;
|
|
pointer-events: none;
|
|
|
|
animation-name: spring-beam-pulse;
|
|
animation-timing-function: ease-in-out;
|
|
animation-iteration-count: infinite;
|
|
}
|
|
|
|
/* Grass */
|
|
.spring-grass-container {
|
|
position: fixed;
|
|
bottom: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 80px;
|
|
z-index: 1002;
|
|
overflow: hidden;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.spring-grass {
|
|
position: absolute;
|
|
bottom: 0;
|
|
width: 3px;
|
|
border-radius: 100% 0 0 0;
|
|
transform-origin: bottom center;
|
|
background-color: #4caf50;
|
|
|
|
will-change: transform;
|
|
animation-name: spring-grass-sway;
|
|
animation-timing-function: ease-in-out;
|
|
animation-iteration-count: infinite;
|
|
}
|
|
|
|
/* Ladybugs */
|
|
.spring-ladybug {
|
|
position: absolute;
|
|
width: 6px;
|
|
height: 4px;
|
|
background-color: #e74c3c; /* Red */
|
|
border-radius: 3px 3px 0 0;
|
|
z-index: 1003;
|
|
|
|
will-change: left, transform;
|
|
animation-timing-function: linear;
|
|
animation-iteration-count: infinite;
|
|
}
|
|
|
|
.spring-ladybug.right {
|
|
animation-name: spring-bug-crawl-right;
|
|
transform: scaleX(1);
|
|
}
|
|
|
|
.spring-ladybug.left {
|
|
animation-name: spring-bug-crawl-left;
|
|
transform: scaleX(-1);
|
|
}
|
|
|
|
.spring-ladybug::before {
|
|
content: '';
|
|
position: absolute;
|
|
right: -2px;
|
|
top: 1px;
|
|
width: 2px;
|
|
height: 2px;
|
|
background-color: #000;
|
|
border-radius: 50%;
|
|
}
|
|
|
|
@keyframes spring-fall {
|
|
0% { top: -10%; }
|
|
100% { top: 100%; }
|
|
}
|
|
|
|
@keyframes spring-sway {
|
|
0%, 100% {
|
|
transform: translateX(0) rotate(0deg);
|
|
}
|
|
50% {
|
|
transform: translateX(30px) rotate(45deg);
|
|
}
|
|
}
|
|
|
|
@keyframes spring-float {
|
|
0% { transform: translateX(0) translateY(0); }
|
|
25% { transform: translateX(20px) translateY(-10px); }
|
|
50% { transform: translateX(40px) translateY(0); }
|
|
75% { transform: translateX(20px) translateY(10px); }
|
|
100% { transform: translateX(0) translateY(0); }
|
|
}
|
|
|
|
@keyframes spring-beam-pulse {
|
|
0% { opacity: 0.3; transform: rotate(45deg) scaleX(1); }
|
|
50% { opacity: 0.6; transform: rotate(45deg) scaleX(1.1); }
|
|
100% { opacity: 0.3; transform: rotate(45deg) scaleX(1); }
|
|
}
|
|
|
|
@keyframes spring-grass-sway {
|
|
0% { transform: rotate(0deg); }
|
|
50% { transform: rotate(8deg); }
|
|
100% { transform: rotate(0deg); }
|
|
}
|
|
|
|
@keyframes spring-bug-crawl-right {
|
|
0% { left: -5%; }
|
|
100% { left: 105%; }
|
|
}
|
|
|
|
@keyframes spring-bug-crawl-left {
|
|
0% { left: 105%; }
|
|
100% { left: -5%; }
|
|
}
|