.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%; } }