From 3cc26765300ae00f25b8d99a76fa2c726403a673 Mon Sep 17 00:00:00 2001 From: matthieu Date: Thu, 23 Oct 2025 16:17:01 +0200 Subject: [PATCH] Add comprehensive CSS animations and effects --- src/index.css | 311 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 296 insertions(+), 15 deletions(-) diff --git a/src/index.css b/src/index.css index 547fe27..1e05960 100644 --- a/src/index.css +++ b/src/index.css @@ -1,16 +1,297 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -@keyframes slide { - 0% { - transform: translateX(0); - } - 100% { - transform: translateX(-50%); - } -} - -.animate-slide { - animation: slide 60s linear infinite; +@tailwind base; +@tailwind components; +@tailwind utilities; + +/* Existing slide animation */ +@keyframes slide { + 0% { + transform: translateX(0); + } + 100% { + transform: translateX(-50%); + } +} + +.animate-slide { + animation: slide 60s linear infinite; +} + +/* Fade In Animation */ +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.animate-fade-in { + animation: fadeIn 0.6s ease-out forwards; +} + +/* Fade In Delayed - for staggered animations */ +.animate-fade-in-delay-1 { + animation: fadeIn 0.6s ease-out 0.1s forwards; + opacity: 0; +} + +.animate-fade-in-delay-2 { + animation: fadeIn 0.6s ease-out 0.2s forwards; + opacity: 0; +} + +.animate-fade-in-delay-3 { + animation: fadeIn 0.6s ease-out 0.3s forwards; + opacity: 0; +} + +/* Slide In From Left */ +@keyframes slideInLeft { + from { + opacity: 0; + transform: translateX(-50px); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +.animate-slide-in-left { + animation: slideInLeft 0.5s ease-out forwards; +} + +/* Slide In From Right */ +@keyframes slideInRight { + from { + opacity: 0; + transform: translateX(50px); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +.animate-slide-in-right { + animation: slideInRight 0.5s ease-out forwards; +} + +/* Scale In Animation */ +@keyframes scaleIn { + from { + opacity: 0; + transform: scale(0.9); + } + to { + opacity: 1; + transform: scale(1); + } +} + +.animate-scale-in { + animation: scaleIn 0.4s ease-out forwards; +} + +/* Pulse Glow Animation */ +@keyframes pulseGlow { + 0%, 100% { + box-shadow: 0 0 5px rgba(59, 130, 246, 0.5); + } + 50% { + box-shadow: 0 0 20px rgba(59, 130, 246, 0.8), 0 0 30px rgba(59, 130, 246, 0.4); + } +} + +.animate-pulse-glow { + animation: pulseGlow 2s ease-in-out infinite; +} + +/* Shimmer Effect */ +@keyframes shimmer { + 0% { + background-position: -1000px 0; + } + 100% { + background-position: 1000px 0; + } +} + +.animate-shimmer { + background: linear-gradient( + 90deg, + rgba(255, 255, 255, 0) 0%, + rgba(255, 255, 255, 0.2) 50%, + rgba(255, 255, 255, 0) 100% + ); + background-size: 1000px 100%; + animation: shimmer 2s infinite; +} + +/* Bounce In Animation */ +@keyframes bounceIn { + 0% { + opacity: 0; + transform: scale(0.3); + } + 50% { + opacity: 1; + transform: scale(1.05); + } + 70% { + transform: scale(0.9); + } + 100% { + transform: scale(1); + } +} + +.animate-bounce-in { + animation: bounceIn 0.6s ease-out forwards; +} + +/* Float Animation */ +@keyframes float { + 0%, 100% { + transform: translateY(0); + } + 50% { + transform: translateY(-10px); + } +} + +.animate-float { + animation: float 3s ease-in-out infinite; +} + +/* Gradient Animation */ +@keyframes gradientShift { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} + +.animate-gradient { + background: linear-gradient( + -45deg, + #ee7752, + #e73c7e, + #23a6d5, + #23d5ab + ); + background-size: 400% 400%; + animation: gradientShift 15s ease infinite; +} + +/* Card Flip Animation */ +@keyframes flipCard { + 0% { + transform: perspective(1000px) rotateY(0); + } + 100% { + transform: perspective(1000px) rotateY(180deg); + } +} + +.animate-flip { + animation: flipCard 0.6s ease-in-out; +} + +/* Rotate Animation */ +@keyframes rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +.animate-rotate { + animation: rotate 2s linear infinite; +} + +/* Enhanced Hover Effects */ +.card-hover { + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +.card-hover:hover { + transform: translateY(-8px) scale(1.02); + box-shadow: 0 20px 40px rgba(0, 0, 0, 0.4), + 0 0 20px rgba(59, 130, 246, 0.3); +} + +/* Button Ripple Effect */ +.btn-ripple { + position: relative; + overflow: hidden; +} + +.btn-ripple::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: 0; + height: 0; + border-radius: 50%; + background: rgba(255, 255, 255, 0.5); + transform: translate(-50%, -50%); + transition: width 0.6s, height 0.6s; +} + +.btn-ripple:active::after { + width: 300px; + height: 300px; +} + +/* Smooth Transitions */ +.transition-smooth { + transition: all 0.3s ease-in-out; +} + +/* Glass Morphism Effect */ +.glass-effect { + background: rgba(31, 41, 55, 0.8); + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.1); +} + +/* Glow on Hover */ +.glow-on-hover { + transition: all 0.3s ease; +} + +.glow-on-hover:hover { + box-shadow: 0 0 15px rgba(59, 130, 246, 0.6), + 0 0 30px rgba(59, 130, 246, 0.4), + 0 0 45px rgba(59, 130, 246, 0.2); + transform: scale(1.05); +} + +/* Loading Animation */ +@keyframes loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +.loading-spinner { + border: 3px solid rgba(255, 255, 255, 0.3); + border-top-color: #3b82f6; + border-radius: 50%; + animation: loading 1s linear infinite; }