@keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes pulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.05); opacity: 0.8; } }
@keyframes countUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
@keyframes slideDown { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } }
@keyframes freePulse { 0% { box-shadow: 0 0 0 0 rgba(0, 200, 150, 0.4); } 70% { box-shadow: 0 0 0 15px rgba(0, 200, 150, 0); } 100% { box-shadow: 0 0 0 0 rgba(0, 200, 150, 0); } }
.animate-fade-up { animation: fadeInUp 0.6s ease forwards; }
.animate-fade-in { animation: fadeIn 0.4s ease forwards; }
.animate-pulse { animation: pulse 2s infinite; }
.animate-free-pulse { animation: freePulse 2s infinite; }
[data-animate] { opacity: 0; transform: translateY(20px); transition: opacity 0.6s ease, transform 0.6s ease; }
[data-animate].is-visible { opacity: 1; transform: translateY(0); }
