@hellouxpavel/cssanimation
Version:
A Powerful CSS Animation Library for Advanced Motion Design.
2,647 lines (2,388 loc) • 206 kB
CSS
/*!* @preserve
* cssanimation.css – Core animation styles and keyframes
* Part of: https://cssanimation.io/
* Version: 6.10.1
* Built: 2025-07-18 18:25:30 UTC
*
* Author: Shafayetul Islam Pavel
* LinkedIn: https://www.linkedin.com/in/shafayetul/
* Email: hello@cssanimation.io
* GitHub: https://github.com/yesiamrocks/cssanimation
*
* Title: Core Animation Styles and Keyframe Definitions for cssanimation.
* Description: Contains the fundamental CSS animation classes, keyframe definitions,
* and essential styling that form the base of the cssanimation.io library.
*
* © 2025 Shafayetul Islam Pavel – All rights reserved.*/
@charset "UTF-8";
:root {
--cssanimation-duration: 1s;
--cssanimation-fill-mode: both;
--cssanimation-infinite: infinite;
--cssanimation-backface-visibility: hidden;
--cssanimation-transform-style: preserve-3d;
--cssanimation-will-change: transform, opacity;
--cssanimation-display: inline-block;
--move-distance: -800px;
}
.cssanimation {
animation-duration: var(--cssanimation-duration, 1s);
animation-fill-mode: var(--cssanimation-fill-mode, both);
}
.cssanimation span {
display: var(--cssanimation-display, inline-block);
}
.infinite {
animation-iteration-count: var(--cssanimation-infinite, infinite) !important;
}
@media (prefers-reduced-motion: reduce) {
.cssanimation,
.cssanimation span {
animation: none !important;
transition: none !important;
}
}
/**
* Module: Blur In
* Filename: ca__BlurIn.css
*/
.ca__fx-blurIn {
animation-name: blurIn;
}
@keyframes blurIn {
from {
filter: blur(20px);
opacity: 0;
}
}
.ca__fx-blurInfromLeft {
animation-name: blurInLeft;
}
@keyframes blurInLeft {
from {
transform: translateX(-100%);
filter: blur(20px);
opacity: 0;
}
}
.ca__fx-blurInFromRight {
animation-name: blurInRight;
}
@keyframes blurInRight {
from {
transform: translateX(100%);
filter: blur(20px);
opacity: 0;
}
}
.ca__fx-blurInFromTop {
animation-name: blurInTop;
}
@keyframes blurInTop {
from {
transform: translateY(-100%);
filter: blur(20px);
opacity: 0;
}
}
.ca__fx-blurInFromBottom {
animation-name: blurInBottom;
}
@keyframes blurInBottom {
from {
transform: translateY(100%);
filter: blur(20px);
opacity: 0;
}
}
/**
* Module: Blur Out
* Filename: ca__BlurOut.css
*/
.ca__fx-blurOut {
animation-name: blurOut;
}
@keyframes blurOut {
85%,
100% {
filter: blur(20px);
}
100% {
opacity: 0;
}
}
.ca__fx-blurOutToLeft {
animation-name: blurOutLeft;
}
@keyframes blurOutLeft {
85%,
100% {
filter: blur(20px);
transform: translateX(-100%);
}
100% {
opacity: 0;
}
}
.ca__fx-blurOutToRight {
animation-name: blurOutRight;
}
@keyframes blurOutRight {
85%,
100% {
filter: blur(20px);
transform: translateX(100%);
}
100% {
opacity: 0;
}
}
.ca__fx-blurOutToTop {
animation-name: blurOutTop;
}
@keyframes blurOutTop {
85%,
100% {
filter: blur(20px);
transform: translateY(-100%);
}
100% {
opacity: 0;
}
}
.ca__fx-blurOutToBottom {
animation-name: blurOutBottom;
}
@keyframes blurOutBottom {
85%,
100% {
filter: blur(20px);
transform: translateY(100%);
}
100% {
opacity: 0;
}
}
/**
* Module: Bounce
* Filename: ca__Bounce.css
*/
.ca__fx-bounceX {
animation-name: bounceX;
}
@keyframes bounceX {
0%,
25%,
55%,
85%,
100% {
animation-timing-function: ease-out;
transform: scale3d(1, 1, 1);
}
41%,
44% {
animation-timing-function: ease-in;
transform: scale3d(1.8, 1, 1);
}
70% {
animation-timing-function: ease-in;
transform: scale3d(1.5, 1, 1);
}
90% {
transform: scale3d(1.1, 1, 1);
}
}
.ca__fx-bounceY {
animation-name: bounceY;
}
@keyframes bounceY {
0%,
25%,
55%,
85%,
100% {
animation-timing-function: ease-out;
transform: scale3d(1, 1, 1);
}
41%,
44% {
animation-timing-function: ease-in;
transform: scale3d(1, 2, 1);
}
70% {
animation-timing-function: ease-in;
transform: scale3d(1, 1.5, 1);
}
90% {
transform: scale3d(1, 1.1, 1);
}
}
.ca__fx-bounceZoomOut {
animation-name: bounceZoomOut;
}
@keyframes bounceZoomOut {
0%,
25%,
55%,
85%,
100% {
animation-timing-function: ease-out;
transform: scale(1);
}
41%,
44% {
animation-timing-function: ease-in;
transform: scale(0.3);
}
70% {
animation-timing-function: ease-in;
transform: scale(0.5);
}
90% {
transform: scale(0.9);
}
}
.ca__fx-spring {
animation: spring var(--spring-duration, 0.6s) cubic-bezier(0.34, 1.56, 0.64, 1) infinite;
}
@keyframes spring {
0%,
100% {
transform: translateY(0);
}
50% {
transform: translateY(calc(var(--spring-height, 1rem) * -1));
}
}
.ca__fx-boing {
animation: boing var(--boing-duration, 0.9s) cubic-bezier(0.28, 1.5, 0.68, 1) infinite;
}
@keyframes boing {
0%,
100% {
transform: translateY(0);
}
30% {
transform: translateY(calc(var(--boing-height, 1rem) * -1.1));
}
50% {
transform: translateY(calc(var(--boing-height, 1rem) * 0.3));
}
70% {
transform: translateY(calc(var(--boing-height, 1rem) * -0.5));
}
90% {
transform: translateY(calc(var(--boing-height, 1rem) * 0.15));
}
}
.ca__fx-hop {
animation: hop var(--hop-duration, 0.5s) ease-out infinite;
}
@keyframes hop {
0%,
100% {
transform: translateY(0);
}
40% {
transform: translateY(calc(var(--hop-height, 0.8rem) * -1));
}
}
.ca__fx-lift {
animation: lift var(--lift-duration, 1.2s) ease-in-out infinite;
}
@keyframes lift {
0%,
100% {
transform: translateY(0);
}
50% {
transform: translateY(calc(var(--lift-height, 10px) * -1));
}
}
.ca__fx-popUp {
animation: popUp var(--popUp-duration, 0.5s) ease-out both;
}
@keyframes popUp {
0% {
transform: scale(0.95) translateY(0);
opacity: 0;
}
60% {
transform: scale(1.05) translateY(calc(var(--popUp-height, 8px) * -1));
opacity: 1;
}
80% {
transform: scale(0.98) translateY(calc(var(--popUp-height, 8px) * -0.3));
}
100% {
transform: scale(1) translateY(0);
}
}
.ca__fx-rebound {
animation: rebound var(--rebound-duration, 0.7s) ease-in-out infinite;
}
@keyframes rebound {
0%,
100% {
transform: translateY(0);
}
20% {
transform: translateY(calc(var(--rebound-height, 1rem) * -1));
}
40% {
transform: translateY(calc(var(--rebound-height, 1rem) * 0.5));
}
60% {
transform: translateY(calc(var(--rebound-height, 1rem) * -0.3));
}
}
.ca__fx-jump {
animation: jump var(--jump-duration, 0.6s) ease-in-out infinite;
}
@keyframes jump {
0%,
100% {
transform: translateY(0);
}
30% {
transform: translateY(calc(var(--jump-height, 1.2rem) * -1));
}
}
.ca__fx-jumping {
animation: jumping 1.2s ease-in-out infinite;
transform-origin: bottom center;
}
@keyframes jumping {
0%,
100% {
transform: translateY(0) scale(1);
opacity: 0.7;
}
25% {
transform: translateY(-20%) scale(1.1);
opacity: 1;
}
50% {
transform: translateY(0) scale(0.95);
opacity: 0.8;
}
75% {
transform: translateY(-10%) scale(1.05);
opacity: 0.9;
}
}
.ca__fx-launch {
animation: launch var(--launch-duration, 0.8s) ease-out infinite;
}
@keyframes launch {
0% {
transform: translateY(0);
}
20% {
transform: translateY(calc(var(--launch-height, 2rem) * -1.2));
}
40% {
transform: translateY(calc(var(--launch-height, 2rem) * 0.5));
}
60% {
transform: translateY(calc(var(--launch-height, 2rem) * -0.3));
}
80% {
transform: translateY(calc(var(--launch-height, 2rem) * 0.15));
}
100% {
transform: translateY(0);
}
}
.ca__fx-levitate {
animation: levitate var(--levitate-duration, 2s) ease-in-out infinite;
}
@keyframes levitate {
0%,
100% {
transform: translateY(0);
}
50% {
transform: translateY(calc(var(--levitate-height, 0.6rem) * -1));
}
}
.ca__fx-jitterJump {
animation: jitterJump 1.3s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite;
}
@keyframes jitterJump {
0% {
transform: translateY(0) scale(1, 1);
}
20% {
transform: translateY(-40px) scale(1.1, 0.9);
} /* Jump up with squash */
40% {
transform: translateY(0) scale(0.9, 1.1);
} /* Land with stretch */
60% {
transform: translateY(-20px) scale(1.05, 0.95);
} /* Smaller rebound */
80% {
transform: translateY(0) scale(0.98, 1.02);
} /* Settle */
100% {
transform: translateY(0) scale(1, 1);
}
}
.ca__fx-elasticJump {
animation: elasticJump 1.2s cubic-bezier(0.2, 0.8, 0.3, 1.2) infinite;
transform-origin: bottom center;
display: inline-block;
}
@keyframes elasticJump {
0%,
100% {
transform: translateY(0) scaleY(1);
}
30% {
transform: translateY(-40%) scaleY(1.2);
}
50% {
transform: translateY(0) scaleY(0.9);
}
70% {
transform: translateY(-20%) scaleY(1.05);
}
}
.ca__fx-squishyBounce {
animation: squishyBounce 1.4s ease-in-out infinite;
transform-origin: bottom center;
display: inline-block;
}
@keyframes squishyBounce {
0%,
100% {
transform: translateY(0) scale(1, 1);
}
25% {
transform: translateY(-30%) scale(1.1, 0.9);
}
50% {
transform: translateY(0) scale(0.95, 1.05);
}
75% {
transform: translateY(-15%) scale(1.05, 0.95);
}
}
.ca__fx-bouncyDrop {
animation: bouncyDrop 1.5s ease-in-out infinite;
transform-origin: top center;
display: inline-block;
}
@keyframes bouncyDrop {
0% {
transform: translateY(-100%) scaleY(1.2);
opacity: 0;
}
30% {
transform: translateY(10%) scaleY(0.8);
opacity: 1;
}
60% {
transform: translateY(-5%) scaleY(1.1);
}
100% {
transform: translateY(0) scaleY(1);
}
}
/**
* Module: Bounce In
* Filename: ca__BounceIn.css
*/
.ca__fx-bounceInTop {
animation-name: bounceInTop;
}
@keyframes bounceInTop {
0% {
transform: translate3d(0, -300%, 0);
}
58% {
transform: translate3d(0, 27px, 0);
}
73% {
transform: translate3d(0, -12px, 0);
}
88% {
transform: translate3d(0, 7px, 0);
}
}
.ca__fx-bounceInBottom {
animation-name: bounceInBottom;
}
@keyframes bounceInBottom {
0% {
transform: translate3d(0, 300%, 0);
}
58% {
transform: translate3d(0, -27px, 0);
}
73% {
transform: translate3d(0, 12px, 0);
}
88% {
transform: translate3d(0, -8px, 0);
}
}
.ca__fx-bounceInLeft {
animation-name: bounceInLeft;
}
@keyframes bounceInLeft {
0% {
transform: translate3d(-300%, 0, 0);
}
58% {
transform: translate3d(27px, 0, 0);
}
73% {
transform: translate3d(-12px, 0, 0);
}
88% {
transform: translate3d(8px, 0, 0);
}
}
.ca__fx-bounceInRight {
animation-name: bounceInRight;
}
@keyframes bounceInRight {
0% {
transform: translate3d(300%, 0, 0);
}
58% {
transform: translate3d(-27px, 0, 0);
}
73% {
transform: translate3d(12px, 0, 0);
}
88% {
transform: translate3d(-8px, 0, 0);
}
}
.ca__fx-bounceFromTop {
animation-name: bounceFromTop;
}
@keyframes bounceFromTop {
0%,
25%,
55%,
85%,
100% {
animation-timing-function: ease-out;
transform: translate3d(0, 0, 0);
}
41%,
44% {
animation-timing-function: ease-in;
transform: translate3d(0, -80px, 0) scale3d(1, 1.6, 1);
}
70% {
animation-timing-function: ease-in;
transform: translate3d(0, -20px, 0);
}
90% {
transform: translate3d(0, -4px, 0);
}
}
.ca__fx-bounceFromDown {
animation-name: bounceFromDown;
}
@keyframes bounceFromDown {
0%,
25%,
55%,
85%,
100% {
animation-timing-function: ease-out;
transform: translate3d(0, 0, 0);
}
41%,
44% {
animation-timing-function: ease-in;
transform: translate3d(0, 80px, 0) scale3d(1, 1.2, 1);
}
70% {
animation-timing-function: ease-in;
transform: translate3d(0, 20px, 0);
}
90% {
transform: translate3d(0, 4px, 0);
}
}
/**
* Module: Bounce Out
* Filename: ca__BounceOut.css
*/
.ca__fx-bounceOutTop {
animation-name: bounceOutTop;
}
@keyframes bounceOutTop {
18%,
33%,
48% {
opacity: 1;
}
18% {
transform: translate3d(0, 27px, 0);
}
33% {
transform: translate3d(0, -12px, 0);
}
48% {
transform: translate3d(0, 8px, 0);
}
100% {
opacity: 0;
transform: translate3d(0, -300%, 0);
}
}
.ca__fx-bounceOutBottom {
animation-name: bounceOutBottom;
}
@keyframes bounceOutBottom {
18%,
33%,
48% {
opacity: 1;
}
18% {
transform: translate3d(0, -27px, 0);
}
33% {
transform: translate3d(0, 12px, 0);
}
48% {
transform: translate3d(0, -8px, 0);
}
100% {
opacity: 0;
transform: translate3d(0, 300%, 0);
}
}
.ca__fx-bounceOutLeft {
animation-name: bounceOutLeft;
}
@keyframes bounceOutLeft {
18%,
33%,
48% {
opacity: 1;
}
18% {
transform: translate3d(27px, 0, 0);
}
33% {
transform: translate3d(-12px, 0, 0);
}
48% {
transform: translate3d(8px, 0, 0);
}
100% {
opacity: 0;
transform: translate3d(-300%, 0, 0);
}
}
.ca__fx-bounceOutRight {
animation-name: bounceOutRight;
}
@keyframes bounceOutRight {
18%,
33%,
48% {
opacity: 1;
}
18% {
transform: translate3d(-27px, 0, 0);
}
33% {
transform: translate3d(12px, 0, 0);
}
48% {
transform: translate3d(-8px, 0, 0);
}
100% {
opacity: 0;
transform: translate3d(300%, 0, 0);
}
}
/**
* Module: Clip Path Animations
* Filename: ca__Clip-Path.css
*/
.ca__fx-clipCircleExpandIn {
animation: clipCircleExpandIn 3s ease-out;
clip-path: circle(0% at 50% 50%);
}
@keyframes clipCircleExpandIn {
0% {
clip-path: circle(0% at 50% 50%);
}
100% {
clip-path: circle(150% at 50% 50%);
}
}
.ca__fx-clipCircleCollapseOut {
animation: clipCircleCollapseOut 3s ease-in both;
clip-path: circle(150% at 50% 50%);
will-change: clip-path;
}
@keyframes clipCircleCollapseOut {
0% {
clip-path: circle(150% at 50% 50%);
}
100% {
clip-path: circle(0% at 50% 50%);
}
}
.ca__fx-clipDiagonalWipeIn {
animation-name: clipDiagonalWipeIn;
}
@keyframes clipDiagonalWipeIn {
0% {
clip-path: polygon(0 0, 0 0, 0 0, 0 0);
opacity: 0;
}
100% {
clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%);
opacity: 1;
}
}
.ca__fx-clipDiagonalWipeOut {
animation-name: clipDiagonalWipeOut;
animation-timing-function: ease-in-out;
}
@keyframes clipDiagonalWipeOut {
0% {
clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%);
opacity: 1;
}
100% {
clip-path: polygon(100% 100%, 100% 100%, 100% 100%, 100% 100%);
opacity: 0;
}
}
.ca__fx-clipGridReveal {
animation-name: clipGridReveal;
}
@keyframes clipGridReveal {
0% {
clip-path: polygon(0 0, 0 0, 0 0, 0 0);
opacity: 0;
}
40% {
clip-path: polygon(0 0, 100% 0, 0 100%, 0 0);
opacity: 0.5;
}
70% {
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
opacity: 0.8;
}
100% {
clip-path: inset(0);
opacity: 1;
}
}
.ca__fx-clipGridCollapse {
animation-name: clipGridCollapse;
}
@keyframes clipGridCollapse {
0% {
clip-path: inset(0);
opacity: 1;
}
40% {
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
opacity: 0.5;
}
100% {
clip-path: polygon(0 0, 0 0, 0 0, 0 0);
opacity: 0;
}
}
.ca__fx-clipVerticalSplitIn {
animation-name: clipVerticalSplitIn;
}
@keyframes clipVerticalSplitIn {
0% {
clip-path: polygon(50% 0, 50% 0, 50% 100%, 50% 100%);
opacity: 0;
}
100% {
clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%);
opacity: 1;
}
}
.ca__fx-clipVerticalSplitOut {
animation: clipVerticalSplitOut 0.9s ease-in forwards;
}
@keyframes clipVerticalSplitOut {
0% {
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
opacity: 1;
}
100% {
clip-path: polygon(50% 0, 50% 0, 50% 100%, 50% 100%);
opacity: 0;
}
}
.ca__fx-clipCrossSweepOut {
animation: clipCrossSweepOut 1.1s ease-in forwards;
}
@keyframes clipCrossSweepOut {
0% {
clip-path: inset(0);
opacity: 1;
}
60% {
clip-path: polygon(25% 25%, 75% 25%, 75% 75%, 25% 75%);
opacity: 0.6;
}
100% {
clip-path: polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%);
opacity: 0;
}
}
.ca__fx-clipBurstCircle {
animation: clipBurstCircle 0.9s cubic-bezier(0.45, 0, 0.55, 1.5) both;
clip-path: circle(0% at 50% 50%);
}
@keyframes clipBurstCircle {
0% {
clip-path: circle(0% at 50% 50%);
opacity: 0;
}
60% {
clip-path: circle(60% at 50% 50%);
opacity: 1;
}
100% {
clip-path: circle(120% at 50% 50%);
}
}
.ca__fx-clipDiamondIn {
animation: clipDiamondIn 0.8s ease-out both;
}
@keyframes clipDiamondIn {
0% {
clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0% 50%);
opacity: 0;
transform: scale(0.6);
}
100% {
clip-path: inset(0);
opacity: 1;
transform: scale(1);
}
}
.ca__fx-clipDiagonalSliceIn {
animation: clipDiagonalSliceIn 1s ease-out both;
}
@keyframes clipDiagonalSliceIn {
0% {
clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
opacity: 0;
}
100% {
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
opacity: 1;
}
}
.ca__fx-clipMultiStepReveal {
animation: clipMultiStepReveal 1.1s ease-in-out both;
}
@keyframes clipMultiStepReveal {
0% {
clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
opacity: 0;
}
50% {
clip-path: polygon(0 0, 80% 0, 80% 100%, 0 100%);
opacity: 0.6;
}
100% {
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
opacity: 1;
}
}
.ca__fx-clipMultiStepCollapse {
animation: clipMultiStepCollapse 1.1s ease-in-out forwards;
}
@keyframes clipMultiStepCollapse {
0% {
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
opacity: 1;
}
50% {
clip-path: polygon(0 0, 80% 0, 80% 100%, 0 100%);
opacity: 0.5;
}
100% {
clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
opacity: 0;
}
}
.ca__fx-clipAnimate {
animation: morph 8s infinite ease-in-out alternate;
}
@keyframes morph {
0% {
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%); /* Diamond */
}
50% {
clip-path: polygon(20% 0%, 80% 0%, 100% 100%, 0% 100%); /* Trapezoid */
}
100% {
clip-path: polygon(0% 15%, 15% 0%, 100% 0%, 85% 15%, 100% 100%, 0% 100%); /* A complex star-like shape */
}
}
.ca__fx-clipAnimateWave {
animation: wave-morph 7s infinite ease-in-out alternate; /* Medium speed */
}
@keyframes wave-morph {
0% {
/* A gentle, slightly curved top and bottom */
clip-path: polygon(
0% 20%,
10% 25%,
20% 20%,
30% 25%,
40% 20%,
50% 25%,
60% 20%,
70% 25%,
80% 20%,
90% 25%,
100% 20%,
100% 80%,
90% 75%,
80% 80%,
70% 75%,
60% 80%,
50% 75%,
40% 80%,
30% 75%,
20% 80%,
10% 75%,
0% 80%
);
}
25% {
/* More pronounced wave, expanding horizontally */
clip-path: polygon(
0% 0%,
15% 10%,
30% 0%,
45% 10%,
60% 0%,
75% 10%,
90% 0%,
100% 10%,
100% 90%,
90% 100%,
75% 90%,
60% 100%,
45% 90%,
30% 100%,
15% 90%,
0% 100%
);
}
50% {
/* Reaching a flatter, more compressed state */
clip-path: polygon(0% 30%, 100% 30%, 100% 70%, 0% 70%); /* A wide rectangle */
}
75% {
/* Another wave pattern, perhaps inverted or shifted */
clip-path: polygon(
0% 10%,
10% 0%,
20% 10%,
30% 0%,
40% 10%,
50% 0%,
60% 10%,
70% 0%,
80% 10%,
90% 0%,
100% 10%,
100% 90%,
90% 100%,
80% 90%,
70% 100%,
60% 90%,
50% 100%,
40% 90%,
30% 100%,
20% 90%,
10% 100%,
0% 90%
);
}
100% {
/* Back to the initial gentle wave */
clip-path: polygon(
0% 20%,
10% 25%,
20% 20%,
30% 25%,
40% 20%,
50% 25%,
60% 20%,
70% 25%,
80% 20%,
90% 25%,
100% 20%,
100% 80%,
90% 75%,
80% 80%,
70% 75%,
60% 80%,
50% 75%,
40% 80%,
30% 75%,
20% 80%,
10% 75%,
0% 80%
);
}
}
/**
* Module: Dance
* Filename: ca__Dance.css
*/
.ca__fx-danceTop {
animation-name: danceTop;
transform-origin: top;
}
@keyframes danceTop {
16% {
transform: skew(-14deg);
}
33% {
transform: skew(12deg);
}
49% {
transform: skew(-8deg);
}
66% {
transform: skew(6deg);
}
83% {
transform: skew(-4deg);
}
}
.ca__fx-danceMiddle {
animation-name: danceMiddle;
}
@keyframes danceMiddle {
16% {
transform: skew(-14deg);
}
33% {
transform: skew(12deg);
}
49% {
transform: skew(-8deg);
}
66% {
transform: skew(6deg);
}
83% {
transform: skew(-4deg);
}
}
.ca__fx-danceBottom {
animation-name: danceBottom;
transform-origin: bottom;
}
@keyframes danceBottom {
16% {
transform: skew(-14deg);
}
33% {
transform: skew(12deg);
}
49% {
transform: skew(-8deg);
}
66% {
transform: skew(6deg);
}
83% {
transform: skew(-4deg);
}
}
/**
* Module: Door
* Filename: ca__Door.css
*/
.ca__fx-doorCloseFromLeft {
animation-name: doorCloseFromLeft;
}
@keyframes doorCloseFromLeft {
0% {
transform: perspective(400px) rotateY(90deg);
transform-origin: left;
opacity: 0;
}
50%,
100% {
transform: perspective(400px) rotateY(0deg);
transform-origin: left;
opacity: 1;
}
}
.ca__fx-doorOpenFromRight {
animation-name: doorOpenFromRight;
}
@keyframes doorOpenFromRight {
0% {
transform: perspective(400px) rotateY(0deg);
transform-origin: left;
opacity: 1;
}
50%,
100% {
transform: perspective(400px) rotateY(90deg);
transform-origin: left;
opacity: 0;
}
}
.ca__fx-doorCloseFromRight {
animation-name: doorCloseFromRight;
}
@keyframes doorCloseFromRight {
0% {
transform: perspective(400px) rotateY(-90deg);
transform-origin: right;
opacity: 0;
}
50%,
100% {
transform: perspective(400px) rotateY(0deg);
transform-origin: right;
opacity: 1;
}
}
.ca__fx-doorOpenFromLeft {
animation-name: doorOpenFromLeft;
}
@keyframes doorOpenFromLeft {
0% {
transform: perspective(400px) rotateY(0deg);
transform-origin: right;
opacity: 1;
}
50%,
100% {
transform: perspective(400px) rotateY(-90deg);
transform-origin: right;
opacity: 0;
}
}
/**
* Module: Dramatic
* Filename: ca__Dramatic.css
*/
.ca__fx-curtainReveal {
animation-name: curtainReveal;
animation-timing-function: ease-out;
transform-origin: top center;
overflow: hidden;
}
@keyframes curtainReveal {
0% {
clip-path: inset(0 0 100% 0);
opacity: 0;
}
50%,
100% {
clip-path: inset(0 0 0 0);
opacity: 1;
}
}
.ca__fx-curtainClose {
animation-name: curtainClose;
animation-timing-function: ease-in;
transform-origin: top center;
}
@keyframes curtainClose {
0% {
clip-path: inset(0 0 0 0);
opacity: 1;
}
50%,
100% {
clip-path: inset(0 0 100% 0);
opacity: 0;
}
}
.ca__fx-spiralTwistIn {
animation-name: spiralTwistIn;
animation-timing-function: ease-out;
transform-origin: center;
will-change: transform, opacity;
}
@keyframes spiralTwistIn {
0% {
transform: scale(0) rotate(720deg);
opacity: 0;
}
60% {
transform: scale(1.05) rotate(-30deg);
opacity: 1;
}
100% {
transform: scale(1) rotate(0deg);
}
}
.ca__fx-spiralTwistOut {
animation-name: spiralTwistOut;
animation-timing-function: ease-in;
transform-origin: center;
will-change: transform, opacity;
}
@keyframes spiralTwistOut {
0% {
transform: scale(1) rotate(0deg);
opacity: 1;
}
100% {
transform: scale(0.3) rotate(-360deg);
opacity: 0;
}
}
.ca__fx-spotlightFocus {
animation-name: spotlightFocus;
animation-timing-function: ease-in-out;
transform-origin: center;
will-change: transform, opacity;
}
@keyframes spotlightFocus {
0% {
filter: brightness(0.2) blur(4px);
transform: scale(1.2);
opacity: 0;
}
100% {
filter: brightness(1) blur(0);
transform: scale(1);
opacity: 1;
}
}
.ca__fx-spotlightFade {
animation-name: spotlightFade;
animation-timing-function: ease-out;
transform-origin: center;
will-change: transform, opacity;
}
@keyframes spotlightFade {
0% {
filter: brightness(1) blur(0);
opacity: 1;
transform: scale(1);
}
100% {
filter: brightness(0.3) blur(6px);
opacity: 0;
transform: scale(0.9);
}
}
/**
* Module: Elevate
* Filename: ca__Elevate.css
*/
.ca__fx-elevateLeft {
animation-name: elevateLeft;
}
@keyframes elevateLeft {
0% {
transform: translateY(100%) rotate(-20deg);
transform-origin: right;
}
40% {
transform: rotate(20deg);
transform-origin: right;
}
65% {
transform: rotate(0deg);
transform-origin: right;
}
}
.ca__fx-elevateRight {
animation-name: elevateRight;
}
@keyframes elevateRight {
0% {
transform: translateY(100%) rotate(20deg);
transform-origin: left;
}
40% {
transform: rotate(-20deg);
transform-origin: left;
}
65% {
transform: rotate(0deg);
transform-origin: left;
}
}
.ca__fx-bobble {
animation-name: bobble;
transform-origin: center;
}
@keyframes bobble {
0%,
100% {
transform: translateX(0%);
}
15% {
transform: translateX(-25%) rotate(-5deg);
}
30% {
transform: translateX(20%) rotate(3deg);
}
45% {
transform: translateX(-15%) rotate(-3deg);
}
60% {
transform: translateX(10%) rotate(2deg);
}
75% {
transform: translateX(-5%) rotate(-1deg);
}
90% {
transform: translateX(2%) rotate(0.5deg);
}
}
.ca__fx-jelly {
animation-name: jelly;
}
@keyframes jelly {
0% {
transform: scale(1, 1);
}
25% {
transform: scale(0.9, 1.1);
}
50% {
transform: scale(1.1, 0.9);
}
75% {
transform: scale(0.95, 1.05);
}
100% {
transform: scale(1, 1);
}
}
.ca__fx-perspectiveTilt {
animation-name: perspectiveTilt;
}
@keyframes perspectiveTilt {
50% {
transform: perspective(400px) rotateY(10deg);
}
}
.ca__fx-jello {
animation: jello var(--jello-duration, 0.9s) both;
}
@keyframes jello {
0%,
100% {
transform: none;
}
30% {
transform: skewX(-12.5deg) skewY(-12.5deg);
}
40% {
transform: skewX(6.25deg) skewY(6.25deg);
}
50% {
transform: skewX(-3.125deg) skewY(-3.125deg);
}
65% {
transform: skewX(1.5625deg) skewY(1.5625deg);
}
75% {
transform: skewX(-0.78125deg) skewY(-0.78125deg);
}
}
.ca__fx-waveBand {
animation-name: waveBand;
transform-origin: center center;
}
@keyframes waveBand {
0%,
100% {
transform: scaleY(1) translateY(0); /* Normal state */
}
25% {
transform: scaleY(1.1) translateY(-5px); /* Stretch vertically and move up slightly */
}
50% {
transform: scaleY(0.9) translateY(5px); /* Compress vertically and move down */
}
75% {
transform: scaleY(1.05) translateY(-2px); /* Slight overshoot */
}
}
/**
* Module: Fade in
* Filename: ca__FadeIn.css
*/
.ca__fx-fadeIn {
animation-name: fadeIn;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.ca__fx-fadeInLeft {
animation-name: fadeInLeft;
}
@keyframes fadeInLeft {
from {
opacity: 0;
transform: translateX(-100%);
}
to {
opacity: 1;
}
}
.ca__fx-fadeInRight {
animation-name: fadeInRight;
}
@keyframes fadeInRight {
from {
opacity: 0;
transform: translateX(100%);
}
to {
opacity: 1;
}
}
.ca__fx-fadeInTop {
animation-name: fadeInTop;
}
@keyframes fadeInTop {
from {
opacity: 0;
transform: translateY(-100%);
}
to {
opacity: 1;
}
}
.ca__fx-fadeInBottom {
animation-name: fadeInBottom;
}
@keyframes fadeInBottom {
from {
opacity: 0;
transform: translateY(100%);
}
to {
opacity: 1;
}
}
/**
* Module: Fade Out
* Filename: ca__FadeOut.css
*/
.ca__fx-fadeOut {
animation-name: fadeOut;
}
@keyframes fadeOut {
to {
opacity: 0;
}
}
.ca__fx-fadeOutLeft {
animation-name: fadeOutLeft;
}
@keyframes fadeOutLeft {
from {
opacity: 1;
}
to {
opacity: 0;
transform: translateX(-100%);
}
}
.ca__fx-fadeOutRight {
animation-name: fadeOutRight;
}
@keyframes fadeOutRight {
from {
opacity: 1;
}
to {
opacity: 0;
transform: translateX(100%);
}
}
.ca__fx-fadeOutTop {
animation-name: fadeOutTop;
}
@keyframes fadeOutTop {
from {
opacity: 1;
}
to {
opacity: 0;
transform: translateY(-100%);
}
}
.ca__fx-fadeOutBottom {
animation-name: fadeOutBottom;
}
@keyframes fadeOutBottom {
from {
opacity: 1;
}
to {
opacity: 0;
transform: translateY(100%);
}
}
.ca__fx-tiltFadeBack {
animation: tiltFadeBack 1s cubic-bezier(0.45, 0, 0.55, 1) forwards;
transform-style: preserve-3d;
backface-visibility: hidden;
will-change: transform, opacity;
}
@keyframes tiltFadeBack {
0% {
transform: perspective(800px) rotateX(0deg) translateZ(0);
opacity: 1;
}
100% {
transform: perspective(800px) rotateX(40deg) translateZ(-100px);
opacity: 0;
}
}
/**
* Module: FlipTwist Animation
* Filename: ca__FlipTwist.css
*/
.ca__fx-flipTwistRight {
animation-name: flipTwistRight;
transform-origin: center right;
animation-timing-function: ease-out;
will-change: transform, opacity;
}
@keyframes flipTwistRight {
0% {
transform: perspective(1000px) rotateY(90deg) rotateZ(-25deg);
opacity: 0;
}
60% {
transform: perspective(1000px) rotateY(-10deg) rotateZ(5deg);
opacity: 1;
}
100% {
transform: perspective(1000px) rotateY(0deg) rotateZ(0deg);
}
}
.ca__fx-flipTwistLeft {
animation-name: flipTwistLeft;
transform-origin: center left;
animation-timing-function: ease-out;
will-change: transform, opacity;
}
@keyframes flipTwistLeft {
0% {
transform: perspective(1000px) rotateY(-90deg) rotateZ(25deg);
opacity: 0;
}
60% {
transform: perspective(1000px) rotateY(10deg) rotateZ(-5deg);
opacity: 1;
}
100% {
transform: perspective(1000px) rotateY(0deg) rotateZ(0deg);
}
}
.ca__fx-flipTwistTop {
animation-name: flipTwistTop;
transform-origin: top center;
will-change: transform, opacity;
}
@keyframes flipTwistTop {
0% {
transform: perspective(800px) rotateX(90deg) rotateZ(20deg) translateY(-80%);
opacity: 0;
}
50% {
transform: perspective(800px) rotateX(-10deg) rotateZ(-10deg);
opacity: 1;
}
100% {
transform: perspective(800px) rotateX(0deg) rotateZ(0deg);
}
}
.ca__fx-flipTwistBottom {
animation-name: flipTwistBottom;
transform-origin: bottom center;
will-change: transform, opacity;
}
@keyframes flipTwistBottom {
0% {
transform: perspective(800px) rotateX(-90deg) rotateZ(-20deg) translateY(80%);
opacity: 0;
}
50% {
transform: perspective(800px) rotateX(10deg) rotateZ(10deg);
opacity: 1;
}
100% {
transform: perspective(800px) rotateX(0deg) rotateZ(0deg);
}
}
.ca__fx-flipTwistPop {
animation-name: flipTwistPop;
transform-origin: center;
will-change: transform, opacity;
}
@keyframes flipTwistPop {
0% {
transform: perspective(600px) rotateY(60deg) rotateZ(-10deg) scale(0.8);
opacity: 0;
}
60% {
transform: perspective(600px) rotateY(-10deg) rotateZ(5deg) scale(1.05);
opacity: 1;
}
100% {
transform: perspective(600px) rotateY(0deg) rotateZ(0deg) scale(1);
}
}
.ca__fx-flipTwistCombo {
animation-name: flipTwistCombo;
animation-duration: 1.5s;
transform-origin: top right;
will-change: transform, opacity;
animation-timing-function: cubic-bezier(0.3, 1.4, 0.5, 1);
}
@keyframes flipTwistCombo {
0% {
transform: perspective(1000px) rotateX(90deg) rotateY(60deg) rotateZ(-30deg) translate(50%, -100%);
opacity: 0;
}
50% {
transform: perspective(1000px) rotateX(-10deg) rotateY(-10deg) rotateZ(5deg);
opacity: 1;
}
100% {
transform: perspective(1000px) rotateX(0deg) rotateY(0deg) rotateZ(0deg) translate(0%, 0%);
}
}
.ca__fx-flipTwistVertical {
animation-name: flipTwistVertical;
transform-origin: center top;
will-change: transform, opacity;
}
@keyframes flipTwistVertical {
0% {
transform: perspective(900px) rotateX(-90deg) rotateZ(15deg);
opacity: 0;
}
50% {
transform: perspective(900px) rotateX(15deg) rotateZ(-5deg);
opacity: 1;
}
100% {
transform: perspective(900px) rotateX(0deg) rotateZ(0deg);
}
}
.ca__fx-flipTwistDiagonal {
animation-name: flipTwistDiagonal;
transform-origin: top right;
will-change: transform, opacity;
}
@keyframes flipTwistDiagonal {
0% {
transform: perspective(1000px) rotateX(-60deg) rotateY(60deg) rotateZ(25deg);
opacity: 0;
}
50% {
transform: rotateX(10deg) rotateY(-10deg) rotateZ(-5deg);
opacity: 1;
}
100% {
transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg);
}
}
.ca__fx-flipTwistSlam {
animation-name: flipTwistSlam;
transform-origin: center left;
will-change: transform, opacity;
animation-timing-function: cubic-bezier(0.3, 1.5, 0.4, 1);
}
@keyframes flipTwistSlam {
0% {
transform: perspective(800px) rotateY(-120deg) rotateZ(20deg);
opacity: 0;
}
70% {
transform: rotateY(15deg) rotateZ(-10deg);
opacity: 1;
}
100% {
transform: rotateY(0deg) rotateZ(0deg);
}
}
.ca__fx-flipTwistZoom {
animation-name: flipTwistZoom;
transform-origin: center;
will-change: transform, opacity;
}
@keyframes flipTwistZoom {
0% {
transform: perspective(1000px) rotateY(75deg) scale(1.3);
opacity: 0;
}
60% {
transform: rotateY(-15deg) scale(0.95);
opacity: 1;
}
100% {
transform: rotateY(0deg) scale(1);
}
}
.ca__fx-flipTwistDrop {
animation-name: flipTwistDrop;
transform-origin: top center;
will-change: transform, opacity;
}
@keyframes flipTwistDrop {
0% {
transform: perspective(800px) rotateX(80deg) translateY(-80%);
opacity: 0;
}
50% {
transform: rotateX(-15deg) translateY(5%);
opacity: 1;
}
100% {
transform: rotateX(0deg) translateY(0%);
}
}
.ca__fx-flipTwistTiltIn {
animation-name: flipTwistTiltIn;
transform-origin: center;
will-change: transform, opacity;
}
@keyframes flipTwistTiltIn {
0% {
transform: perspective(900px) rotateY(90deg) rotateZ(-30deg);
opacity: 0;
}
40% {
transform: rotateY(-20deg) rotateZ(10deg);
opacity: 1;
}
100% {
transform: rotateY(0deg) rotateZ(0deg);
}
}
.ca__fx-flipTwistHover {
display: inline-block;
transform-origin: center;
transition:
transform 0.5s ease, opacity 0.5s ease;
}
.ca__fx-flipTwistHover:hover {
transform: perspective(800px) rotateY(15deg) rotateZ(-5deg) scale(1.05);
opacity: 0.95;
}
.ca__fx-flipTwistTiltHover {
display: inline-block;
transform-origin: center;
transition: transform 0.4s ease-in-out;
}
.ca__fx-flipTwistTiltHover:hover {
transform: perspective(900px) rotateZ(10deg) rotateY(20deg);
}
.ca__fx-flipTwistZoomHover {
display: inline-block;
transform-origin: center;
transition: transform 0.6s ease-out;
}
.ca__fx-flipTwistZoomHover:hover {
transform: perspective(1000px) rotateY(-15deg) scale(1.1);
}
.ca__fx-flipTwistOutRight {
animation-name: flipTwistOutRight;
transform-origin: center right;
will-change: transform, opacity;
}
@keyframes flipTwistOutRight {
0% {
transform: rotateY(0deg) rotateZ(0deg);
opacity: 1;
}
60% {
transform: rotateY(-20deg) rotateZ(10deg);
opacity: 0.7;
}
100% {
transform: rotateY(90deg) rotateZ(-15deg);
opacity: 0;
}
}
.ca__fx-flipTwistOutLeft {
animation-name: flipTwistOutLeft;
transform-origin: center left;
will-change: transform, opacity;
}
@keyframes flipTwistOutLeft {
0% {
transform: rotateY(0deg);
opacity: 1;
}
60% {
transform: rotateY(20deg) rotateZ(-10deg);
opacity: 0.6;
}
100% {
transform: rotateY(-90deg) rotateZ(10deg);
opacity: 0;
}
}
.ca__fx-flipTwistOutTop {
animation-name: flipTwistOutTop;
transform-origin: top center;
will-change: transform, opacity;
}
@keyframes flipTwistOutTop {
0% {
transform: rotateX(0deg);
opacity: 1;
}
50% {
transform: rotateX(20deg);
opacity: 0.6;
}
100% {
transform: rotateX(-90deg) translateY(-60%);
opacity: 0;
}
}
.ca__fx-flipTwistOutZoom {
animation-name: flipTwistOutZoom;
transform-origin: center;
will-change: transform, opacity;
}
@keyframes flipTwistOutZoom {
0% {
transform: rotateY(0deg) scale(1);
opacity: 1;
}
60% {
transform: rotateY(-15deg) scale(0.9);
opacity: 0.6;
}
100% {
transform: rotateY(75deg) scale(0.5);
opacity: 0;
}
}
/**
* Module: Flip X
* Filename: ca__FlipX.css
*/
.ca__fx-flipX {
animation-name: flipX;
backface-visibility: var(--cssanimation-backface-visibility);
transform-style: var(--cssanimation-transform-style);
will-change: var(--cssanimation-will-change);
}
@keyframes flipX {
from {
transform: perspective(600px) rotateX(-180deg);
opacity: 0;
}
to {
transform: perspective(600px) rotateX(-360deg);
}
}
.ca__fx-flipXZoomIn {
animation-name: flipXZoomIn;
backface-visibility: var(--cssanimation-backface-visibility);
transform-style: var(--cssanimation-transform-style);
will-change: var(--cssanimation-will-change);
}
@keyframes flipXZoomIn {
0% {
transform: perspective(600px) rotateX(0deg) scale(1);
animation-timing-function: ease-out;
}
40% {
transform: perspective(600px) rotateX(-180deg) scale(1.8);
animation-timing-function: ease-out;
}
80% {
transform: perspective(600px) rotateX(-360deg) scale(0.7);
animation-timing-function: ease-in;
}
100% {
transform: scale(1);
}
}
.ca__fx-flipXZoomOut {
animation-name: flipXZoomOut;
backface-visibility: var(--cssanimation-backface-visibility);
transform-style: var(--cssanimation-transform-style);
will-change: var(--cssanimation-will-change);
}
@keyframes flipXZoomOut {
0% {
transform: perspective(600px) rotateX(0deg) scale(1);
animation-timing-function: ease-out;
}
40% {
transform: perspective(600px) rotateX(180deg) scale(1.8);
animation-timing-function: ease-out;
}
80% {
transform: perspective(600px) rotateX(360deg) scale(0.7);
animation-timing-function: ease-in;
}
100% {
transform: scale(1);
}
}
.ca__fx-flipOutLeft {
animation-name: flipOutLeft;
backface-visibility: var(--cssanimation-backface-visibility);
transform-style: var(--cssanimation-transform-style);
will-change: var(--cssanimation-will-change);
}
@keyframes flipOutLeft {
0% {
transform: perspective(600px) rotateY(0deg);
opacity: 1;
}
100% {
transform: perspective(600px) rotateY(-90deg) translateX(-60px);
opacity: 0;
}
}
.ca__fx-flipOutRight {
animation-name: flipOutRight;
backface-visibility: var(--cssanimation-backface-visibility);
transform-style: var(--cssanimation-transform-style);
will-change: var(--cssanimation-will-change);
}
@keyframes flipOutRight {
0% {
transform: perspective(600px) rotateY(0deg);
opacity: 1;
}
100% {
transform: perspective(600px) rotateY(90deg) translateX(60px);
opacity: 0;
}
}
.ca__fx-flipOutXLeft {
animation-name: flipOutXLeft;
backface-visibility: var(--cssanimation-backface-visibility);
transform-style: var(--cssanimation-transform-style);
will-change: var(--cssanimation-will-change);
}
@keyframes flipOutXLeft {
0% {
transform: perspective(600px) rotateX(0deg);
opacity: 1;
}
100% {
transform: perspective(600px) rotateX(-90deg) translateX(-60px);
opacity: 0;
}
}
.ca__fx-flipOutXRight {
animation-name: flipOutXRight;
backface-visibility: var(--cssanimation-backface-visibility);
transform-style: var(--cssanimation-transform-style);
will-change: var(--cssanimation-will-change);
}
@keyframes flipOutXRight {
0% {
transform: perspective(600px) rotateX(0deg);
opacity: 1;
}
100% {
transform: perspective(600px) rotateX(90deg) translateX(60px);
opacity: 0;
}
}
/**
* Module: Flip Y
* Filename: ca__FlipY.css
*/
.ca__fx-flipY {
animation-name: flipY;
backface-visibility: var(--cssanimation-backface-visibility);
transform-style: var(--cssanimation-transform-style);
will-change: var(--cssanimation-will-change);
}
@keyframes flipY {
from {
transform: perspective(600px) rotateY(180deg);
opacity: 0;
}
to {
transform: perspective(600px) rotateY(360deg);
}
}
.ca__fx-flipYZoomIn {
animation-name: flipYZoomIn;
backface-visibility: var(--cssanimation-backface-visibility);
transform-style: var(--cssanimation-transform-style);
will-change: var(--cssanimation-will-change);
}
@keyframes flipYZoomIn {
0% {
transform: perspective(600px) rotateY(0deg) scale(1);
animation-timing-function: ease-out;
}
40% {
transform: perspective(600px) rotateY(180deg) scale(1.6);
animation-timing-function: ease-out;
}
80% {
transform: perspective(600px) rotateY(360deg) scale(0.7);
animation-timing-function: ease-in;
}
100% {
transform: scale(1);
}
}
.ca__fx-flipYZoomOut {
animation-name: flipYZoomOut;
backface-visibility: var(--cssanimation-backface-visibility);
transform-style: var(--cssanimation-transform-style);
will-change: var(--cssanimation-will-change);
}
@keyframes flipYZoomOut {
0% {
transform: perspective(600px) rotateY(0deg) scale(1);
animation-timing-function: ease-out;
}
40% {
transform: perspective(600px) rotateY(180deg) scale(0.6);
animation-timing-function: ease-out;
}
80% {
transform: perspective(600px) rotateY(360deg) scale(1.8);
animation-timing-function: ease-in;
}
100% {
transform: scale(1);
}
}
/**
* Module: One After One Fade in
* Filename: ca__OneAfterOneFadeIn.css
*/
.ca__fx-flyInTop {
animation-name: flyInTop;
}
@keyframes flyInTop {
0% {
transform: translateY(80px);
opacity: 0;
}
50% {
transform: translateY(-50px);
animation-timing-function: ease-out;
}
}
.ca__fx-flyInBottom {
animation-name: flyInBottom;
}
@keyframes flyInBottom {
0% {
transform: translateY(-80px);
opacity: 0;
}
50% {
transform: translateY(50px);
animation-timing-function: ease-out;
}
}
.ca__fx-flyOutTop {
animation-name: flyOutTop;
}
@keyframes flyOutTop {
30% {
transform: translateY(80px);
animation-timing-function: ease-out;
}
80% {
transform: translateY(-50px);
animation-timing-function: ease-out;
}
100% {
opacity: 0;
}
}
.ca__fx-flyOutBottom {
animation-name: flyOutBottom;
}
@keyframes flyOutBottom {
30% {
transform: translateY(-80px);
animation-timing-function: ease-out;
}
80% {
transform: translateY(50px);
animation-timing-function: ease-out;
}
100% {
opacity: 0;
}
}
/**
* Module: Glitch
* Filename: ca__Glitch.css
*/
.ca__fx-microGlitch {
animation-name: microGlitch;
animation-timing-function: steps(1);
will-change: transform, opacity;
}
@keyframes microGlitch {
0%,
100% {
transform: translate(0, 0);
opacity: 1;
}
20% {
transform: translate(-2px, 1px);
}
40% {
transform: translate(3px, -1px);
}
60% {
transform: translate(-1px, 2px);
}
80% {
transform: translate(1px, -2px);
}
}
.ca__fx-glitchPopIn {
animation-name: glitchPopIn;
animation-timing-function: ease-out;
animation-iteration-count: 1;
animation-direction: normal;
will-change: transform, opacity;
}
@keyframes glitchPopIn {
0% {
transform: scale(0.8);
filter: contrast(2) brightness(0.5);
opacity: 0;
}
30% {
transform: scale(1.2);
filter: contrast(1.5) brightness(1.5);
opacity: 1;
}
50% {
transform: scale(0.95) translate(-2px, 2px);
}
70% {
transform: translate(2px, -2px);
}
100% {
transform: scale(1);
filter: none;
}
}
.ca__fx-glitchExit {
animation-name: glitchExit;
animation-timing-function: steps(2);
animation-iteration-count: 1;
animation-direction: normal;
will-change: transform, opacity;
}
@keyframes glitchExit {
0% {
opacity: 1;
transform: translate(0, 0);
}
30% {
transform: translate(4px, -2px);
}
60% {
transform: translate(-4px, 2px);
}
100% {
opacity: 0;
transform: translate(-10px, 10px) scale(0.9);
}
}
.ca__fx-glitchJitter {
animation: glitchJitter 0.6s steps(2, end) infinite;
}
@keyframes glitchJitter {
0% {
transform: translate(0, 0);
}
20% {
transform: translate(-2px, 2px);
}
40% {
transform: translate(2px, -2px);
}
60% {
transform: translate(-1px, 1px);
}
80% {
transform: translate(1px, -1px);
}
100% {
transform: translate(0, 0);
}
}
.ca__fx-glitchSlice {
animation: glitchSlice 1s infinite linear alternate;
}
@keyframes glitchSlice {
0% {
clip-path: inset(0 0 0 0);
transform: translate(0, 0);
}
20% {
clip-path: inset(10% 0 85% 0);
transform: translate(-5px, 0);
}
40% {
clip-path: inset(60% 0 15% 0);
transform: translate(5px, 0);
}
60% {
clip-path: inset(30% 0 40% 0);
transform: translate(-3px, 0);
}
80% {
clip-path: inset(45% 0 30% 0);
transform: translate(3px, 0);
}
100% {
clip-path: inset(0 0 0 0);
transform: translate(0, 0);
}
}
.ca__fx-glitchFlash {
animation: glitchFlash 0.15s steps(2, end) infinite;
}
@keyframes glitchFlash {
0%,
100% {
opacity: 1;
}
50% {
opacity: 0;
}
}
.ca__fx-glitchSliceInCollapse {
animation-name: glitchSliceInCollapse;
animation-timing-function: steps(5 end);
}
@keyframes glitchSliceInCollapse {
0% {
opacity: 0;
transform: scaleY(0);
clip-path: inset(100% 0 0 0);
}
40% {
transform: scaleY(0.6);
clip-path: inset(60% 0 10% 0);
}
70% {
transform: scaleY(0.9);
clip-path: inset(20% 0 20% 0);
}
100% {
opacity: 1;
transform: scaleY(1);
clip-path: inset(0 0 0 0);
}
}
.ca__fx-typewriterCorrupt {
animation: typewriterCorrupt 1.5s steps(2, end) infinite;
}
@keyframes typewriterCorrupt {
0% {
transform: translate(0, 0);
opacity: 1;
filter: none;
}
25% {
transform: translate(-1px, 0);
filter: blur(1px) hue-rotate(30deg);
}
50% {
transform: translate(1px, 0);
filter: grayscale(0.5);
}
75% {
transform: translate(-0.5px, 0);
opacity: 0.9;
}
100% {
transform: translate(0, 0);
filter: none;
opacity: 1;
}
}
.ca__fx-glitchSliceYank {
animation: glitchSliceYank 1s infinite steps(2, end);
}
@keyframes glitchSliceYank {
0% {
clip-path: inset(0 0 0 0);
transform: translate(0, 0);
}
15% {
clip-path: inset(10% 0 80% 0);
transform: translateX(-5px);
}
30% {
clip-path: inset(60% 0 25% 0);
transform: translateX(4px);
}
45% {
clip-path: inset(40% 0 50% 0);
transform: translateX(-3px);
}
60% {
clip-path: inset(20% 0 70% 0);
transform: translateX(3px);
}
75% {
clip-path: inset(50% 0 30% 0);
transform: translateX(-2px);
}
100% {
clip-path: inset(0 0 0 0);
transform: translate(0, 0);
}
}
.ca__fx-glitchSliceInSharp {
animation-name: glitchSliceInSharp;
animation-timing-function: ease-out;
}
@keyframes glitchSliceInSharp {
0% {
opacity: 0;
clip-path: