@hellouxpavel/cssanimation
Version:
A Powerful CSS Animation Library for Advanced Motion Design.
2,718 lines (2,428 loc) • 206 kB
CSS
/*!* @preserve
* cssanimation.css – Core animation styles and keyframes
* Part of: https://cssanimation.io/
* Version: 6.10.2
* Built: 2025-07-24 08:52:19 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";
.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: Blob
* Filename: ca__blob.css
*/
.ca__fx-blobJumpMorph {
width: 100px;
height: 100px;
background: radial-gradient(circle at 50% 50%, #00f0ff, #0099cc);
border-radius: 40% 60% 60% 40% / 60% 40% 60% 40%;
animation: blobJumpMorph 2.2s ease-in-out infinite;
}
@keyframes blobJumpMorph {
0%,
100% {
transform: translateY(0) scale(1);
border-radius: 40% 60% 60% 40% / 60% 40% 60% 40%;
}
25% {
transform: translateY(-30%) scale(1.1, 0.9);
border-radius: 50% 40% 60% 50% / 40% 60% 40% 60%;
}
50% {
transform: translateY(0) scale(0.95, 1.05);
border-radius: 60% 50% 40% 60% / 50% 60% 50% 40%;
}
75% {
transform: translateY(-15%) scale(1.05, 0.95);
border-radius: 45% 55% 55% 45% / 55% 45% 55% 45%;
}
}
.ca__fx-gooBounceBlob {
width: 90px;
height: 90px;
background: linear-gradient(135deg, #ff66cc, #9900ff);
border-radius: 50%;
animation: gooBounceBlob 1.8s ease-in-out infinite;
}
@keyframes gooBounceBlob {
0%,
100% {
transform: translateY(0) scale(1);
border-radius: 50%;
}
30% {
transform: translateY(-40%) scale(1.2, 0.8);
border-radius: 40% 60% 70% 30% / 50% 60% 40% 50%;
}
60% {
transform: translateY(10%) scale(0.9, 1.1);
border-radius: 60% 40% 40% 60% / 50% 40% 60% 50%;
}
}
.ca__fx-jellyBounceWave {
width: 80px;
height: 80px;
background: conic-gradient(from 90deg, #00ffcc, #6600ff, #00ffcc);
border-radius: 50%;
animation: jellyBounceWave 2.6s ease-in-out infinite;
}
@keyframes jellyBounceWave {
0%,
100% {
transform: translateY(0) scale(1);
border-radius: 50%;
}
20% {
transform: translateY(-30%) scale(1.1, 0.8);
border-radius: 40% 60% 65% 35% / 50% 40% 60% 50%;
}
50% {
transform: translateY(0) scale(0.95, 1.1);
border-radius: 60% 40% 45% 55% / 60% 45% 55% 40%;
}
80% {
transform: translateY(-10%) scale(1.05, 0.95);
border-radius: 55% 45% 50% 50% / 50% 50% 55% 45%;
}
}
.ca__fx-blobBouncePop {
width: 90px;
height: 90px;
background: radial-gradient(circle at 40% 40%, #ffe066, #ff6b6b);
border-radius: 50%;
animation: blobBouncePop 2.2s ease-in-out infinite;
}
@keyframes blobBouncePop {
0% {
transform: scale(1) translateY(0);
border-radius: 50%;
}
20% {
transform: scale(1.2, 0.8) translateY(-25%);
border-radius: 40% 60% 70% 30% / 60% 40% 60% 40%;
}
50% {
transform: scale(0.95, 1.1) translateY(10%);
border-radius: 60% 40% 50% 50% / 50% 60% 40% 50%;
}
100% {
transform: scale(1) translateY(0);
border-radius: 50%;
}
}
.ca__fx-blobElasticStretch {
width: 70px;
height: 70px;
background: linear-gradient(45deg, #00f0ff, #0044ff);
border-radius: 60% 40% 70% 30% / 50% 60% 40% 50%;
animation: blobElasticStretch 2.8s ease-in-out infinite;
}
@keyframes blobElasticStretch {
0%,
100% {
transform: translateY(0%) scale(1);
}
25% {
transform: translateY(-60%) scale(0.9, 1.3);
border-radius: 50% 60% 40% 50% / 50% 40% 60% 50%;
}
50% {
transform: translateY(10%) scale(1.1, 0.8);
border-radius: 60% 50% 50% 40% / 50% 50% 50% 60%;
}
}
.ca__fx-blobPulseDrop {
width: 80px;
height: 80px;
background: radial-gradient(circle at 50% 50%, #ffffff, #00ffcc);
border-radius: 50%;
animation: blobPulseDrop 1.8s ease-in-out infinite;
box-shadow:
0 0 12px #00ffc3,
0 0 24px #00ffc3;
}
@keyframes blobPulseDrop {
0%,
100% {
transform: translateY(0) scale(1);
opacity: 1;
}
30% {
transform: translateY(-30%) scale(1.15, 0.85);
}
50% {
transform: translateY(0) scale(0.9, 1.1);
opacity: 0.9;
}
75% {
transform: translateY(-15%) scale(1.05, 0.95);
opacity: 1;
}
}
.ca__fx-floatingOrb {
width: 80px;
height: 80px;
background: radial-gradient(circle at 60% 40%, #fff5cc, #ff00cc);
border-radius: 50%;
animation: floatingOrb 3.5s ease-in-out infinite;
filter: drop-shadow(0 0 12px rgba(255,0,204,0.66667));
}
@keyframes floatingOrb {
0%,
100% {
transform: translateY(0) scale(1);
}
50% {
transform: translateY(-12%) scale(1.05);
}
}
.ca__fx-magicBlobSplit {
width: 100px;
height: 100px;
background: radial-gradient(circle, #99faff, #3300ff);
border-radius: 60% 40% 50% 70% / 60% 40% 60% 50%;
animation: magicBlobSplit 2.8s ease-in-out infinite;
}
@keyframes magicBlobSplit {
0%,
100% {
transform: translate(0, 0) scale(1);
border-radius: 60% 40% 50% 70% / 60% 40% 60% 50%;
}
50% {
transform: translate(-10%, -10%) scale(1.1);
border-radius: 40% 60% 70% 30% / 50% 70% 30% 60%;
}
}
.ca__fx-orbitalSpin {
width: 30px;
height: 30px;
background: radial-gradient(circle, #ff66ff, #9900ff);
border-radius: 50%;
animation: ca__orbitalSpin 5s linear infinite;
position: relative;
transform-origin: 100px center;
}
@keyframes orbitalSpin {
0% {
transform: rotate(0deg) translateX(100px) rotate(0deg);
}
100% {
transform: rotate(360deg) translateX(100px) rotate(-360deg);
}
}
.ca__fx-pulseAura {
width: 90px;
height: 90px;
background: radial-gradient(circle, #ffffff 10%, #00ffff 40%, transparent 70%);
border-radius: 50%;
animation: pulseAura 2s ease-in-out infinite;
filter: blur(3px);
opacity: 0.5;
}
@keyframes pulseAura {
0%,
100% {
transform: scale(1);
opacity: 0.5;
}
50% {
transform: scale(1.2);
opacity: 0.8;
}
}
.ca__fx-magicTrailComet {
width: 120px;
height: 4px;
background: linear-gradient(to right, transparent, #00ffff, #ffffff);
animation: magicTrailComet 1.5s linear infinite;
border-radius: 100px;
}
@keyframes magicTrailComet {
0% {
transform: translateX(-100%);
opacity: 0;
}
30% {
opacity: 1;
}
100% {
transform: translateX(100%);
opacity: 0;
}
}
/**
* 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: Elastic Animation
* Filename: ca__elastic.css
*/
.ca__fx-elasticArise {
animation: elasticArise 2s cubic-bezier(0.5, 0, 0.5, 1);
transform-origin: bottom center; /* Important for vertical scaling */
}
@keyframes elasticArise {
0%,
100% {
transform: translateY(0) scaleY(1);
}
20% {
transform: translateY(-40px) scaleY(1.2); /* Rise with stretch */
}
40% {
transform: translateY(0) scaleY(0.9); /* Settle with slight squash */
}
60% {
transform: translateY(-15px) scaleY(1.05); /* Smaller elastic bounce */
}
80% {
transform: translateY(0) scaleY(0.98);
}
}
.ca__fx-elasticRise {
animation: elasticRise var(--elastic-duration, 1s) ease-out both;
}
@keyframes elasticRise {
0% {
transform: scaleY(1) translateY(0);
}
40% {
transform: scaleY(0.9) translateY(calc(var(--elastic-height, 1.5rem) * -1.2));
}
60% {
transform: scaleY(1.1) translateY(calc(var(--elastic-height, 1.5rem) * 0.3));
}
80% {
transform: scaleY(0.95) translateY(calc(var(--elastic-height, 1.5rem) * -0.1));
}
100% {
transform: scaleY(1) translateY(0);
}
}
.ca__fx-elasticStretch {
animation: elasticStretch var(--duration, 1s) ease-out both;
}
@keyframes elasticStretch {
0% {
transform: scaleX(1);
}
30% {
transform: scaleX(1.4);
}
50% {
transform: scaleX(0.85);
}
70% {
transform: scaleX(1.15);
}
100% {
transform: scaleX(1);
}
}
.ca__fx-elasticBounce {
animation: elasticBounce var(--duration, 1s) cubic-bezier(0.34, 1.56, 0.64, 1);
}
@keyframes elasticBounce {
0%,
100% {
transform: translateY(0);
}
50% {
transform: translateY(-1.5rem);
}
}
.ca__fx-elasticSquash {
animation: elasticSquash var(--duration, 0.7s) ease-out both;
}
@keyframes elasticSquash {
0% {
transform: scaleY(1);
}
40% {
transform: scaleY(0.5) scaleX(1.3);
}
60% {
transform: scaleY(1.2) scaleX(0.9);
}
80% {
transform: scaleY(0.95) scaleX(1.05);
}
100% {
transform: scale(1);
}
}
.ca__fx-elasticIn {
animation: elasticIn var(--duration, 0.6s) ease-out both;
}
@keyframes elasticIn {
0% {
opacity: 0;
transform: scale(0.7);
}
50% {
opacity: 1;
transform: scale(1.1);
}
100% {
transform: scale(1);
}
}
.ca__fx-rubberPop {
animation: rubberPop var(--duration, 0.7s) ease-out both;
}
@keyframes rubberPop {
0% {
transform: scale(0.3);
}
40% {
transform: scale(1.25);
}
60% {
transform: scale(0.9);
}
80% {
transform: scale(1.05);
}
100% {
transform: scale(1);
}
}
.ca__fx-squishLift {
animation: squishLift var(--duration, 0.8s) ease-in-out both;
}
@keyframes squishLift {
0% {
transform: translateY(0) scaleY(1);
}
30% {
transform: translateY(-1.2rem) scaleY(1.3);
}
60% {
transform: translateY(0.5rem) scaleY(0.9);
}
100% {
transform: translateY(0) scaleY(1);
}
}
.ca__fx-flubberBounce {
animation: flubberBounce var(--duration, 1s) ease-in-out both;
}
@keyframes flubberBounce {
0% {
transform: scale(1, 1);
}
20% {
transform: scale(1.2, 0.8);
}
40% {
transform: scale(0.8, 1.2);
}
60% {
transform: scale(1.1, 0.9);
}
80% {
transform: scale(0.95, 1.05);
}
100% {
transform: scale(1, 1);
}
}
.ca__fx-boingScale {
animation: boingScale var(--duration, 0.9s) ease-out both;
}
@keyframes boingScale {
0% {
transform: scale(0.5);
}
30% {
transform: scale(1.3);
}
60% {
transform: scale(0.9);
}
100% {
transform: scale(1);
}
}
.ca__fx-slinkyDrop {
animation: slinkyDrop var(--duration, 1s) ease-in both;
}
@keyframes slinkyDrop {
0% {
transform: translateY(-120%);
scale: 1 0.8;
}
40% {
transform: translateY(20%) scale(1, 1.2);
}
60% {
transform: translateY(-10%) scale(1, 0.95);
}
100% {
transform: translateY(0) scale(1, 1);
}
}
.ca__fx-elasticBounce {
animation: elasticBounce 0.8s cubic-bezier(0.68, -0.55, 0.265, 1.55) both;
transform-origin: bottom center; /* Important for bouncing */
}
@keyframes elasticBounce {
0% {
transform: translateY(0) scale(1);
}
20% {
transform: translateY(-30px) scaleX(1.05) scaleY(0.95);
}
40% {
transform: translateY(0) scaleX(0.98) scaleY(1.02);
}
60% {
transform: translateY(-15px) scaleX(1.02) scaleY(0.98);
}
80% {
transform: translateY(0) scaleX(0.99) scaleY(1.01);
}
100% {
transform: translateY(0) scale(1);
}
}
.ca__fx-springyEffect {
animation: springyEffect 1s cubic-bezier(0.175, 0.885, 0.32, 1.275) both;
}
@keyframes springyEffect {
0% {
transform: scale(1);
}
25% {
transform: scale(1.1, 0.9);
}
50% {
transform: scale(0.95, 1.05);
}
75% {
transform: scale(1.05, 0.95);
}
100% {
transform: scale(1);
}
}
.ca__fx-jiggleTransform {
animation: jiggleTransform 0.7s ease-in-out forwards;
transform-origin: center;
}
@keyframes jiggleTransform {
0%,
100% {
transform: rotate(0deg) scale(1);
}
15% {
transform: rotate(-3deg) scale(1.02);
}
30% {
transform: rotate(3deg) scale(0.98);
}
45% {
transform: rotate(-2deg) scale(1.01);
}
60% {
transform: rotate(2deg) scale(0.99);
}
75% {
transform: rotate(-1deg) scale(1);
}
}
.ca__fx-stretchCollapse {
animation: stretchCollapse 0.9s cubic-bezier(0.68, -0.55, 0.265, 1.55) both;
transform-origin: center;
}
@keyframes stretchCollapse {
0% {
transform: scaleY(1);
}
25% {
transform: scaleY(1.3);
} /* Stretch */
50% {
transform: scaleY(0.7);
} /* Collapse */
75% {
transform: scaleY(1.1);
}
100% {
transform: scaleY(1);
}
}
.ca__fx-reboundMotion {
animation: reboundMotion 1s cubic-bezier(0.175, 0.885, 0.32, 1.275) both;
transform-origin: bottom center; /* For vertical rebound */
}
@keyframes reboundMotion {
0% {
transform: translateY(0);
}
50% {
transform: translateY(-50px);
} /* Move up */
100% {
transform: translateY(0);
} /* Rebound with overshoot */
}
.ca__fx-snapBackEase {
animation: snapBackEase 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55) both;
}
@keyframes snapBackEase {
0% {
transform: scale(0);
opacity: 0;
}
80% {
transform: scale(1.1);
opacity: 1;
}
100% {
transform: scale(1);
}
}
.ca__fx-flexiShrink {
animation: flexiShrink 0.6s cubic-bezier(0.68, -0.55, 0.265, 1.55) both;
}
@keyframes flexiShrink {
0% {
transform: scale(1);
}
50% {
transform: scale(0.8);
} /* Shrink */
75% {
transform: scale(1.05);
} /* Overshoot */
100% {
transform: scale(1);
}
}
.ca__fx-bouncyScale {
animation: bouncyScale 0.7s cubic-bezier(0, 0, 0.2, 1.4) both;
}
/* bouncyScale */
@keyframes bouncyScale {
0% {
transform: scale(0.5);
}
60% {
transform: scale(1.1);
}
80% {
transform: scale(0.95);
}
100% {
transform: scale(1);
}
}
.ca__fx-pulseElastic {
animation: pulseElastic 1.2s cubic-bezier(0.25, 0.46, 0.45, 0.94) infinite alternate; /* Infinite for pulsing */
}
@keyframes pulseElastic {
0%,
100% {
transform: scale(1);
}
50% {
transform: scale(1.1);
} /* Pulse out */
75% {
transform: scale(0.95);
} /* Slightly inward */
}
.ca__fx-rubber {
animation: rubber 0.8s ease-out;
}
@keyframes rubber {
0% {
transform: scale(1);
}
30% {
transform: scale(1.25, 0.75);
}
40% {
transform: scale(0.75, 1.25);
}
50% {
transform: scale(1.15, 0.85);
}
65% {
transform: scale(0.95, 1.05);
}
75% {
transform: scale(1.05, 0.95);
}
100% {
transform: scale(1);
}
}
.ca__fx-squishBoing {
animation-name: squishBoing;
transform-origin: bottom center;
}
@keyframes squishBoing {
0% {
transform: scale(1, 1);
}
25% {
transform: scale(1.1, 0.8);
} /* Squish down and slightly wider */
50% {
transform: scale(0.9, 1.2);
} /* Stretch up and slightly narrower */
75% {
transform: scale(1.05, 0.95);
} /* Overshoot slightly */
100% {
transform: scale(1, 1);
} /* Return to normal */
}
.ca__fx-rubberExpand {
animation-name: rubberExpand;
animation-timing-function: ease-out;
transform-origin: center;
will-change: transform;
}
@keyframes rubberExpand {
0% {
transform: scale(1);
}
30% {
transform: scaleX(1.3) scaleY(0.7);
}
60% {
transform: scaleX(0.9) scaleY(1.1);
}
100% {
transform: scale(1);
}
}
.ca__fx-rubberShrink {
animation-name: rubberShrink;
animation-timing-function: ease-in;
transform-origin: center;
will-change: transform, opacity;
}
@keyframes rubberShrink {
0% {
transform: scale(1);
}
50% {
transform: scaleX(1.1) scaleY(0.8);
}
100% {
transform: scale(0);
opacity: 0;
}
}
.ca__fx-matrixWave {
animation: matrixWave 1.5s infinite ease-in-out;
}
@keyframes matrixWave {
0% {
transform: translateY(0) scaleY(1);
filter: grayscale(0);
}
25% {
transform: translateY(-3px) scaleY(1.2);
}
50% {
transform: translateY(3px) scaleY(0.8);
filter: grayscale(1);
}
75% {
transform: translateY(-1px) scaleY(1.05);
filter: none;
}
100% {
transform: translateY(0) scaleY(1);
}
}
/**
* 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: t