/* Transition de page - effet "changement de zone" */ .page-enter-active, .page-leave-active { transition: opacity 0.3s ease, transform 0.3s ease; } .page-enter-from { opacity: 0; transform: translateY(10px); } .page-leave-to { opacity: 0; transform: translateY(-10px); } /* Transition de layout */ .layout-enter-active, .layout-leave-active { transition: opacity 0.2s ease; } .layout-enter-from, .layout-leave-to { opacity: 0; } /* Mobile menu slide */ .slide-down-enter-active, .slide-down-leave-active { transition: opacity 0.2s ease, transform 0.2s ease; } .slide-down-enter-from, .slide-down-leave-to { opacity: 0; transform: translateY(-8px); } /* Landing page animations */ @keyframes fadeSlideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .animate-fade-slide-up { opacity: 0; animation: fadeSlideUp 0.6s ease-out forwards; } .animate-delay-100 { animation-delay: 0.1s; } .animate-delay-200 { animation-delay: 0.2s; } .animate-delay-300 { animation-delay: 0.3s; } .animate-delay-400 { animation-delay: 0.4s; } /* Hero selector transition */ .hero-enter-active, .hero-leave-active { transition: opacity 0.4s ease, transform 0.4s ease; } .hero-enter-from { opacity: 0; transform: translateY(20px); } .hero-leave-to { opacity: 0; transform: translateY(-20px); } /* Respect de prefers-reduced-motion */ @media (prefers-reduced-motion: reduce) { .page-enter-active, .page-leave-active, .layout-enter-active, .layout-leave-active, .slide-down-enter-active, .slide-down-leave-active { transition: none; } .page-enter-from, .page-leave-to, .layout-enter-from, .layout-leave-to, .slide-down-enter-from, .slide-down-leave-to, .hero-enter-from, .hero-leave-to { opacity: 1; transform: none; } .animate-fade-slide-up { animation: none; opacity: 1; transform: none; } .hero-enter-active, .hero-leave-active { transition: none; } }