imeeting/frontend/src/pages/home/RightVisual.less

155 lines
4.2 KiB
Plaintext
Raw Normal View History

.home-right-visual {
position: relative;
width: 100%;
height: 100%;
min-height: 300px;
display: flex;
align-items: center;
justify-content: center;
perspective: 1200px;
z-index: 0;
pointer-events: none;
&__glow {
position: absolute;
border-radius: 50%;
filter: blur(50px);
z-index: -1;
pointer-events: none;
animation: pulseGlow 6s ease-in-out infinite alternate;
&--main {
width: 280px;
height: 280px;
background: rgba(103, 103, 244, 0.18);
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
&--secondary {
width: 180px;
height: 180px;
background: rgba(165, 214, 255, 0.25);
top: 15%;
right: 15%;
animation-delay: -2s;
}
}
&__soundwave {
position: relative;
width: 380px;
height: 160px;
display: flex;
align-items: center;
justify-content: center;
gap: 4px;
z-index: 2;
.home-right-visual__bar {
width: 5px;
height: 100%;
background: linear-gradient(180deg, rgba(165, 214, 255, 0.95) 0%, rgba(103, 103, 244, 0.95) 100%);
border-radius: 999px;
transform-origin: center;
/* The base transform uses the envelope to shape the bell curve */
transform: scaleY(calc(0.05 + 0.1 * var(--envelope)));
animation: soundwave-bounce var(--duration) ease-in-out infinite alternate;
/* Sweep delay creates the wave-like motion */
animation-delay: calc(-0.1s * var(--index));
box-shadow: 0 0 12px rgba(103, 103, 244, 0.25);
will-change: transform;
}
}
&__drop {
position: absolute;
background: linear-gradient(145deg, rgba(255, 255, 255, 0.8) 0%, rgba(240, 240, 255, 0.3) 100%);
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
border: 1px solid rgba(255, 255, 255, 0.7);
box-shadow:
0 12px 40px rgba(103, 103, 244, 0.15),
inset 0 0 20px rgba(255, 255, 255, 0.95),
inset 4px 4px 10px rgba(255, 255, 255, 0.6);
animation: floatDrop 6s ease-in-out infinite;
transform-style: preserve-3d;
overflow: hidden;
&-inner {
position: absolute;
width: 150%;
height: 150%;
top: -25%;
left: -25%;
background: radial-gradient(circle at 30% 30%, rgba(255,255,255,0.8) 0%, transparent 60%);
pointer-events: none;
transform: rotate(-45deg);
}
&--1 {
width: 80px;
height: 80px;
top: 10%;
right: 12%;
animation-duration: 7s;
animation-name: floatDrop1;
}
&--2 {
width: 120px;
height: 110px;
bottom: -10%;
left: -5%;
animation-duration: 9s;
animation-delay: -4s;
animation-name: floatDrop3;
background: linear-gradient(145deg, rgba(255, 255, 255, 0.6) 0%, rgba(180, 180, 255, 0.25) 100%);
}
&--3 {
width: 50px;
height: 50px;
top: -5%;
left: 35%;
animation-duration: 8s;
animation-delay: -3s;
animation-name: floatDrop5;
}
}
}
@keyframes soundwave-bounce {
0% {
transform: scaleY(calc(0.05 + 0.1 * var(--envelope)));
opacity: 0.5;
}
100% {
transform: scaleY(calc(0.1 + 0.85 * var(--envelope)));
opacity: 1;
filter: brightness(1.2);
}
}
@keyframes pulseGlow {
0% { transform: translate(-50%, -50%) scale(0.85); opacity: 0.5; }
100% { transform: translate(-50%, -50%) scale(1.15); opacity: 1; }
}
@keyframes floatDrop1 {
0%, 100% { transform: translateY(0) rotate(0deg); border-radius: 40% 60% 70% 30% / 40% 50% 60% 50%; }
33% { transform: translateY(-22px) rotate(12deg); border-radius: 50% 50% 60% 40% / 50% 40% 70% 40%; }
66% { transform: translateY(12px) rotate(-8deg); border-radius: 30% 70% 50% 50% / 30% 60% 40% 60%; }
}
@keyframes floatDrop3 {
0%, 100% { transform: translateY(0) scale(1); border-radius: 50% 50% 30% 70% / 60% 40% 60% 40%; }
50% { transform: translateY(-28px) scale(1.02); border-radius: 30% 70% 50% 50% / 40% 60% 40% 60%; }
}
@keyframes floatDrop5 {
0%, 100% { transform: translateY(0) scale(1) rotate(0deg); border-radius: 45% 55% 65% 35% / 45% 45% 55% 55%; }
50% { transform: translateY(20px) scale(0.95) rotate(-10deg); border-radius: 55% 45% 35% 65% / 55% 55% 45% 45%; }
}