.anim.fadeIn { opacity: 0; animation-name: fadeIn; animation-duration: 180ms; animation-timing-function: ease-in-out; animation-fill-mode: forwards; } @keyframes fadeIn { 0% { opacity: 0; } 100% { opacity: 1; } } .anim.searchResult { opacity: 0; transform: translate3d(580px, 0, 0); animation-name: searchResult; animation-duration: 220ms; animation-fill-mode: forwards; animation-timing-function: cubic-bezier(.62, .28, .23, .99); } @keyframes searchResult { 0% { opacity: 0; transform: translate3d(400px, 0, 0); } 100% { opacity: 1; transform: translate3d(0, 0, 0); } } .anim.notification { transform: translate3d(580px, 0, 0); animation-name: notification; animation-duration: 3s; animation-timing-function: ease-in-out; animation-fill-mode: forwards; &.stopped { animation-name: notificationStopped; } } @keyframes notification { 0% { transform: translate3d(580px, 0, 0); } 10% { transform: translate3d(0, 0, 0); } 90% { transform: translate3d(0, 0, 0); } 100% { transform: translate3d(580px, 0, 0); } } @keyframes notificationStopped { 0% { transform: translate3d(580px, 0, 0); } 10% { transform: translate3d(0, 0, 0); } 100% { transform: translate3d(0, 0, 0); } } @keyframes menuIn { from { opacity: 0; transform: scale3d(0, 0, 1); } to { opacity: 1; transform: scale3d(1, 1, 1); } } .anim.menuIn { transform-origin: 100% 0%; animation-name: menuIn; animation-duration: 120ms; animation-delay: 0s; animation-timing-function: cubic-bezier(.62, .28, .23, .99); } @keyframes loadingBob { 0% { transform: translate3d(0, 0, 0); } 30% { transform: translate3d(0, 0, 0); } 50% { transform: translate3d(0, -10px, 0); } 70% { transform: translate3d(0, 0, 0); } 100% { transform: translate3d(0, 0, 0); } } @keyframes pointer { 0% { transform: translate3d(0, 20px, 0) scale3d(0, 0, 0); } 100% { transform: translate3d(0, 0, 0) scale3d(1, 1, 1); } } .anim.pointer { transform-origin: 50% 100%; animation-name: pointer; animation-duration: 180ms; animation-delay: 0s; animation-timing-function: cubic-bezier(.62, .28, .23, .99); }