Files
join_landing_vanity/css/animations.css
2025-10-29 11:47:33 -06:00

375 lines
6.5 KiB
CSS

/* ========================================
ANIMATIONS.CSS - Scroll Reveal Animations
======================================== */
/* Base animation classes */
.animate-on-scroll {
opacity: 0;
transform: translateY(30px);
transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.animate-on-scroll.animate-in {
opacity: 1;
transform: translateY(0);
}
/* Different animation variants */
.animate-fade-up {
opacity: 0;
transform: translateY(50px);
transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.animate-fade-up.animate-in {
opacity: 1;
transform: translateY(0);
}
.animate-fade-left {
opacity: 0;
transform: translateX(-50px);
transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.animate-fade-left.animate-in {
opacity: 1;
transform: translateX(0);
}
.animate-fade-right {
opacity: 0;
transform: translateX(50px);
transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.animate-fade-right.animate-in {
opacity: 1;
transform: translateX(0);
}
.animate-scale {
opacity: 0;
transform: scale(0.9);
transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.animate-scale.animate-in {
opacity: 1;
transform: scale(1);
}
/* Staggered animations for children */
.animate-stagger {
opacity: 0;
transform: translateY(30px);
transition: all 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.animate-stagger.animate-in {
opacity: 1;
transform: translateY(0);
}
/* Delay variants for staggered animations */
.animate-delay-1 {
transition-delay: 0.1s;
}
.animate-delay-2 {
transition-delay: 0.2s;
}
.animate-delay-3 {
transition-delay: 0.3s;
}
.animate-delay-4 {
transition-delay: 0.4s;
}
.animate-delay-5 {
transition-delay: 0.5s;
}
.animate-delay-6 {
transition-delay: 0.6s;
}
/* Section-specific animations */
.benefits {
opacity: 0;
transform: translateY(50px);
transition: all 1s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.benefits.animate-in {
opacity: 1;
transform: translateY(0);
}
.profile {
opacity: 0;
transform: translateY(50px);
transition: all 1s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.2s;
}
.profile.animate-in {
opacity: 1;
transform: translateY(0);
}
.process {
opacity: 0;
transform: translateY(50px);
transition: all 1s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.3s;
}
.process.animate-in {
opacity: 1;
transform: translateY(0);
}
.faq {
opacity: 0;
transform: translateY(50px);
transition: all 1s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.4s;
}
.faq.animate-in {
opacity: 1;
transform: translateY(0);
}
.testimonials {
opacity: 0;
transform: translateY(50px);
transition: all 1s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.5s;
}
.testimonials.animate-in {
opacity: 1;
transform: translateY(0);
}
.cta-carousel {
opacity: 0;
transform: translateY(50px);
transition: all 1s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.6s;
}
.cta-carousel.animate-in {
opacity: 1;
transform: translateY(0);
}
/* Enhanced benefit cards animation */
.benefit-card {
opacity: 0;
transform: translateY(30px) scale(0.95);
transition: all 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.benefit-card.animate-in {
opacity: 1;
transform: translateY(0) scale(1);
}
/* Process steps animation */
.process__step {
opacity: 0;
transform: translateY(40px);
transition: all 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.process__step.animate-in {
opacity: 1;
transform: translateY(0);
}
/* FAQ items animation */
.faq__item {
opacity: 0;
transform: translateX(-30px);
transition: all 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.faq__item.animate-in {
opacity: 1;
transform: translateX(0);
}
/* Section headers animation */
.section-header {
opacity: 0;
transform: translateY(30px);
transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.section-header.animate-in {
opacity: 1;
transform: translateY(0);
}
/* Profile cards animation */
.profile__requirements,
.profile__desired {
opacity: 0;
transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.profile__requirements {
transform: translateX(-40px);
}
.profile__desired {
transform: translateX(40px);
}
.profile__requirements.animate-in,
.profile__desired.animate-in {
opacity: 1;
transform: translateX(0);
}
/* Testimonial cards animation */
.testimonial-slide {
transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
/* CTA section specific animations */
.cta-carousel__text {
opacity: 0;
transform: translateX(-40px);
transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.cta-carousel__text.animate-in {
opacity: 1;
transform: translateX(0);
}
.cta-carousel__images {
opacity: 0;
transform: translateX(40px);
transition: all 0.8s cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.2s;
}
.cta-carousel__images.animate-in {
opacity: 1;
transform: translateX(0);
}
/* Stats animation */
.stat-item {
opacity: 0;
transform: translateY(20px);
transition: all 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.stat-item.animate-in {
opacity: 1;
transform: translateY(0);
}
/* Respect reduced motion preference */
@media (prefers-reduced-motion: reduce) {
.animate-on-scroll,
.animate-fade-up,
.animate-fade-left,
.animate-fade-right,
.animate-scale,
.animate-stagger,
.benefits,
.profile,
.process,
.faq,
.testimonials,
.cta-carousel,
.benefit-card,
.process__step,
.faq__item,
.section-header,
.profile__requirements,
.profile__desired,
.cta-carousel__text,
.cta-carousel__images,
.stat-item {
opacity: 1;
transform: none;
transition: none;
}
}
/* Enhanced entrance animations */
@keyframes slideInFromBottom {
0% {
opacity: 0;
transform: translateY(50px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeInScale {
0% {
opacity: 0;
transform: scale(0.9);
}
100% {
opacity: 1;
transform: scale(1);
}
}
@keyframes slideInFromLeft {
0% {
opacity: 0;
transform: translateX(-50px);
}
100% {
opacity: 1;
transform: translateX(0);
}
}
@keyframes slideInFromRight {
0% {
opacity: 0;
transform: translateX(50px);
}
100% {
opacity: 1;
transform: translateX(0);
}
}
/* Pulse animation for important elements */
@keyframes pulse {
0%, 100% {
transform: scale(1);
}
50% {
transform: scale(1.05);
}
}
.animate-pulse {
animation: pulse 2s ease-in-out infinite;
}
/* Floating animation for decorative elements */
@keyframes float {
0%, 100% {
transform: translateY(0);
}
50% {
transform: translateY(-10px);
}
}
.animate-float {
animation: float 3s ease-in-out infinite;
}