This commit is contained in:
2025-09-11 13:55:36 +02:00
parent 141151bcec
commit f9c1e24abe
7 changed files with 360 additions and 17 deletions

193
css/animations.css Normal file
View File

@@ -0,0 +1,193 @@
/* Animation Styles for Homepage Components */
/* Base animation classes */
.animate-fade-in {
opacity: 0;
transform: translateY(30px);
transition: opacity 0.8s ease-out, transform 0.8s ease-out;
}
.animate-fade-in.animate-visible {
opacity: 1;
transform: translateY(0);
}
/* Slide in from left */
.animate-slide-left {
opacity: 0;
transform: translateX(-50px);
transition: opacity 0.8s ease-out, transform 0.8s ease-out;
}
.animate-slide-left.animate-visible {
opacity: 1;
transform: translateX(0);
}
/* Slide in from right */
.animate-slide-right {
opacity: 0;
transform: translateX(50px);
transition: opacity 0.8s ease-out, transform 0.8s ease-out;
}
.animate-slide-right.animate-visible {
opacity: 1;
transform: translateX(0);
}
/* Scale up animation */
.animate-scale-up {
opacity: 0;
transform: scale(0.9);
transition: opacity 0.8s ease-out, transform 0.8s ease-out;
}
.animate-scale-up.animate-visible {
opacity: 1;
transform: scale(1);
}
/* Staggered animations for multiple elements */
.animate-stagger-1 {
transition-delay: 0.1s;
}
.animate-stagger-2 {
transition-delay: 0.2s;
}
.animate-stagger-3 {
transition-delay: 0.3s;
}
.animate-stagger-4 {
transition-delay: 0.4s;
}
.animate-stagger-5 {
transition-delay: 0.5s;
}
/* Hero section specific animations */
.hero-title {
opacity: 0;
transform: translateY(40px);
transition: opacity 1s ease-out, transform 1s ease-out;
}
.hero-title.animate-visible {
opacity: 1;
transform: translateY(0);
}
.hero-subtitle {
opacity: 0;
transform: translateY(30px);
transition: opacity 1s ease-out 0.3s, transform 1s ease-out 0.3s;
}
.hero-subtitle.animate-visible {
opacity: 1;
transform: translateY(0);
}
.hero-button {
opacity: 0;
transform: translateY(20px);
transition: opacity 0.8s ease-out 0.6s, transform 0.8s ease-out 0.6s;
}
.hero-button.animate-visible {
opacity: 1;
transform: translateY(0);
}
/* Image animations */
.animate-image {
opacity: 0;
transform: scale(1.1);
transition: opacity 1s ease-out, transform 1s ease-out;
}
.animate-image.animate-visible {
opacity: 1;
transform: scale(1);
}
/* Text content animations */
.animate-text-content h1,
.animate-text-content h2,
.animate-text-content h3,
.animate-text-content h4 {
opacity: 0;
transform: translateY(20px);
transition: opacity 0.8s ease-out, transform 0.8s ease-out;
}
.animate-text-content.animate-visible h1,
.animate-text-content.animate-visible h2,
.animate-text-content.animate-visible h3,
.animate-text-content.animate-visible h4 {
opacity: 1;
transform: translateY(0);
}
.animate-text-content p {
opacity: 0;
transform: translateY(15px);
transition: opacity 0.8s ease-out 0.2s, transform 0.8s ease-out 0.2s;
}
.animate-text-content.animate-visible p {
opacity: 1;
transform: translateY(0);
}
.animate-text-content button,
.animate-text-content a[href] {
opacity: 0;
transform: translateY(10px);
transition: opacity 0.8s ease-out 0.4s, transform 0.8s ease-out 0.4s;
}
.animate-text-content.animate-visible button,
.animate-text-content.animate-visible a[href] {
opacity: 1;
transform: translateY(0);
}
/* Reduced motion for accessibility */
@media (prefers-reduced-motion: reduce) {
.animate-fade-in,
.animate-slide-left,
.animate-slide-right,
.animate-scale-up,
.hero-title,
.hero-subtitle,
.hero-button,
.animate-image,
.animate-text-content h1,
.animate-text-content h2,
.animate-text-content h3,
.animate-text-content h4,
.animate-text-content p,
.animate-text-content button,
.animate-text-content a[href] {
transition: none;
opacity: 1;
transform: none;
}
}
/* Loading animation for initial page load */
.page-loading .animate-on-load {
opacity: 0;
transform: translateY(20px);
}
.page-loaded .animate-on-load {
opacity: 1;
transform: translateY(0);
transition: opacity 0.6s ease-out, transform 0.6s ease-out;
}