/** * Animation Styles * * CSS animations and keyframes for the theme * @package ROI_Theme * @since 1.0.0 */ /* Fade animations */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } } @keyframes fadeInDown { from { opacity: 0; transform: translate3d(0, -100%, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } } @keyframes fadeInUp { from { opacity: 0; transform: translate3d(0, 100%, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } } @keyframes fadeInLeft { from { opacity: 0; transform: translate3d(-100%, 0, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } } @keyframes fadeInRight { from { opacity: 0; transform: translate3d(100%, 0, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } } /* Slide animations */ @keyframes slideDown { from { transform: translateY(-100%); } to { transform: translateY(0); } } @keyframes slideUp { from { transform: translateY(100%); } to { transform: translateY(0); } } @keyframes slideLeft { from { transform: translateX(-100%); } to { transform: translateX(0); } } @keyframes slideRight { from { transform: translateX(100%); } to { transform: translateX(0); } } /* Zoom animations */ @keyframes zoomIn { from { opacity: 0; transform: scale3d(0.3, 0.3, 0.3); } 50% { opacity: 1; } } @keyframes zoomOut { from { opacity: 1; } 50% { opacity: 0; transform: scale3d(0.3, 0.3, 0.3); } to { opacity: 0; } } @keyframes zoomInDown { from { opacity: 0; transform: translate3d(0, -100%, 0) scale3d(0.5, 0.5, 0.5); } 50% { opacity: 1; } } @keyframes zoomInUp { from { opacity: 0; transform: translate3d(0, 100%, 0) scale3d(0.5, 0.5, 0.5); } 50% { opacity: 1; } } /* Bounce animations */ @keyframes bounce { 0%, 100% { animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); transform: translate3d(0, 0, 0); } 45% { animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); transform: translate3d(0, -30px, 0); } } @keyframes bounceIn { from { opacity: 0; transform: scale3d(0.3, 0.3, 0.3); } 20% { opacity: 1; transform: scale3d(1.1, 1.1, 1.1); } 40% { transform: scale3d(0.9, 0.9, 0.9); } 60% { opacity: 1; transform: scale3d(1.03, 1.03, 1.03); } 80% { transform: scale3d(0.97, 0.97, 0.97); } to { opacity: 1; transform: scale3d(1, 1, 1); } } @keyframes bounceInDown { from { opacity: 0; transform: translate3d(0, -100%, 0); } 60% { opacity: 1; transform: translate3d(0, 25px, 0); } 75% { transform: translate3d(0, -10px, 0); } 90% { transform: translate3d(0, 5px, 0); } to { transform: translate3d(0, 0, 0); } } @keyframes bounceInUp { from { opacity: 0; transform: translate3d(0, 100%, 0); } 60% { opacity: 1; transform: translate3d(0, -25px, 0); } 75% { transform: translate3d(0, 10px, 0); } 90% { transform: translate3d(0, -5px, 0); } to { transform: translate3d(0, 0, 0); } } /* Rotate animations */ @keyframes rotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes rotateIn { from { opacity: 0; transform: rotate3d(0, 0, 1, -200deg); } to { opacity: 1; transform: translate3d(0, 0, 0); } } @keyframes rotateOut { from { opacity: 1; transform: translate3d(0, 0, 0); } to { opacity: 0; transform: rotate3d(0, 0, 1, 200deg); } } /* Flip animations */ @keyframes flip { from { transform: perspective(400px) rotate3d(0, 1, 0, -360deg); animation-timing-function: ease-out; } 40% { transform: perspective(400px) rotate3d(0, 1, 0, 10deg); animation-timing-function: ease-in; } 70% { transform: perspective(400px) rotate3d(0, 1, 0, -5deg); animation-timing-function: ease-in; } 100% { transform: perspective(400px); } } @keyframes flipInX { from { opacity: 0; transform: perspective(400px) rotate3d(1, 0, 0, 90deg); } 40% { transform: perspective(400px) rotate3d(1, 0, 0, -10deg); } 70% { transform: perspective(400px) rotate3d(1, 0, 0, 5deg); } 100% { opacity: 1; transform: perspective(400px); } } @keyframes flipInY { from { opacity: 0; transform: perspective(400px) rotate3d(0, 1, 0, 90deg); } 40% { transform: perspective(400px) rotate3d(0, 1, 0, -10deg); } 70% { transform: perspective(400px) rotate3d(0, 1, 0, 5deg); } 100% { opacity: 1; transform: perspective(400px); } } /* Pulse animation */ @keyframes pulse { 0% { opacity: 1; } 50% { opacity: 0.5; } 100% { opacity: 1; } } /* Heartbeat animation */ @keyframes heartbeat { 0%, 100% { transform: scale(1); } 14% { transform: scale(1.15); } 28% { transform: scale(1); } 42% { transform: scale(1.15); } 70% { transform: scale(1); } } /* Shake animation */ @keyframes shake { 0%, 100% { transform: translate3d(0, 0, 0); } 10%, 20% { transform: translate3d(-10px, 0, 0); } 30%, 50%, 70%, 90% { transform: translate3d(10px, 0, 0); } 40%, 60%, 80% { transform: translate3d(-10px, 0, 0); } } /* Swing animation */ @keyframes swing { 20% { transform: rotate(15deg); } 40% { transform: rotate(-10deg); } 60% { transform: rotate(5deg); } 80% { transform: rotate(-5deg); } 100% { transform: rotate(0deg); } } /* Wobble animation */ @keyframes wobble { 0% { transform: translateX(0); } 15% { transform: translateX(-25px) rotate(-5deg); } 30% { transform: translateX(20px) rotate(3deg); } 45% { transform: translateX(-15px) rotate(-3deg); } 60% { transform: translateX(10px) rotate(2deg); } 75% { transform: translateX(-5px) rotate(-1deg); } 100% { transform: translateX(0); } } /* Jello animation */ @keyframes jello { 0%, 11.1%, 100% { transform: translate3d(0, 0, 0); } 22.2% { transform: skewX(-12.5deg) skewY(-12.5deg); } 33.3% { transform: skewX(6.25deg) skewY(6.25deg); } 44.4% { transform: skewX(-3.125deg) skewY(-3.125deg); } 55.5% { transform: skewX(1.5625deg) skewY(1.5625deg); } 66.6% { transform: skewX(-0.78125deg) skewY(-0.78125deg); } 77.7% { transform: skewX(0.390625deg) skewY(0.390625deg); } 88.8% { transform: skewX(-0.1953125deg) skewY(-0.1953125deg); } } /* Loading spinner */ @keyframes spinner { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* Utility animation classes */ .animate-fade-in { animation: fadeIn 0.5s ease-in-out; } .animate-fade-out { animation: fadeOut 0.5s ease-in-out; } .animate-fade-in-down { animation: fadeInDown 0.6s ease-out; } .animate-fade-in-up { animation: fadeInUp 0.6s ease-out; } .animate-fade-in-left { animation: fadeInLeft 0.6s ease-out; } .animate-fade-in-right { animation: fadeInRight 0.6s ease-out; } .animate-slide-down { animation: slideDown 0.4s ease-out; } .animate-slide-up { animation: slideUp 0.4s ease-out; } .animate-slide-left { animation: slideLeft 0.4s ease-out; } .animate-slide-right { animation: slideRight 0.4s ease-out; } .animate-zoom-in { animation: zoomIn 0.5s ease-out; } .animate-zoom-out { animation: zoomOut 0.5s ease-out; } .animate-bounce { animation: bounce 1s infinite; } .animate-bounce-in { animation: bounceIn 0.6s; } .animate-bounce-in-down { animation: bounceInDown 0.6s; } .animate-bounce-in-up { animation: bounceInUp 0.6s; } .animate-rotate { animation: rotate 2s linear infinite; } .animate-rotate-in { animation: rotateIn 0.6s ease-out; } .animate-rotate-out { animation: rotateOut 0.6s ease-out; } .animate-flip { animation: flip 0.6s; } .animate-flip-in-x { animation: flipInX 0.6s; } .animate-flip-in-y { animation: flipInY 0.6s; } .animate-pulse { animation: pulse 1.5s ease-in-out infinite; } .animate-heartbeat { animation: heartbeat 1.3s ease-in-out infinite; } .animate-shake { animation: shake 0.5s; } .animate-swing { animation: swing 0.6s; } .animate-wobble { animation: wobble 0.8s; } .animate-jello { animation: jello 0.9s; } .animate-spinner { animation: spinner 1s linear infinite; } /* Animation delay classes */ .animate-delay-1 { animation-delay: 0.1s; } .animate-delay-2 { animation-delay: 0.2s; } .animate-delay-3 { animation-delay: 0.3s; } .animate-delay-4 { animation-delay: 0.4s; } .animate-delay-5 { animation-delay: 0.5s; } /* Animation duration classes */ .animate-duration-fast { animation-duration: 0.3s; } .animate-duration-normal { animation-duration: 0.6s; } .animate-duration-slow { animation-duration: 1s; } .animate-duration-slower { animation-duration: 1.5s; }