/* Common animation timing */
.animated-section {
  animation-duration: 0.7s;
  animation-fill-mode: both;
  animation-timing-function: ease-out;
}

/* FadeIn */
@keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
.fadeIn {
  animation-name: fadeIn;
}

/* FadeInUp */
@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translate3d(0, 20px, 0);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
.fadeInUp {
  animation-name: fadeInUp;
}

/* FadeInDown */
@keyframes fadeInDown {
  from {
    opacity: 0;
    transform: translate3d(0, -20px, 0);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
.fadeInDown {
  animation-name: fadeInDown;
}

/* FadeInLeft */
@keyframes fadeInLeft {
  from {
    opacity: 0;
    transform: translate3d(-20px, 0, 0);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
.fadeInLeft {
  animation-name: fadeInLeft;
}

/* FadeInRight */
@keyframes fadeInRight {
  from {
    opacity: 0;
    transform: translate3d(20px, 0, 0);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
.fadeInRight {
  animation-name: fadeInRight;
}

/* SlideInUp */
@keyframes slideInUp {
  from {
    transform: translate3d(0, 100%, 0);
    visibility: visible;
  }
  to {
    transform: translate3d(0, 0, 0);
  }
}
.slideInUp {
  animation-name: slideInUp;
}

/* SlideInDown */
@keyframes slideInDown {
  from {
    transform: translate3d(0, -100%, 0);
    visibility: visible;
  }
  to {
    transform: translate3d(0, 0, 0);
  }
}
.slideInDown {
  animation-name: slideInDown;
}

/* SlideInLeft */
@keyframes slideInLeft {
  from {
    transform: translate3d(-100%, 0, 0);
    visibility: visible;
  }
  to {
    transform: translate3d(0, 0, 0);
  }
}
.slideInLeft {
  animation-name: slideInLeft;
}

/* SlideInRight */
@keyframes slideInRight {
  from {
    transform: translate3d(100%, 0, 0);
    visibility: visible;
  }
  to {
    transform: translate3d(0, 0, 0);
  }
}
.slideInRight {
  animation-name: slideInRight;
}

/* ZoomIn */
@keyframes zoomIn {
  from {
    opacity: 0;
    transform: scale3d(0.3, 0.3, 0.3);
  }
  50% {
    opacity: 1;
  }
  to {
    transform: scale3d(1, 1, 1);
  }
}
.zoomIn {
  animation-name: zoomIn;
}

/* BounceIn */
@keyframes bounceIn {
  from,
  20%,
  40%,
  60%,
  80%,
  to {
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }
  0% {
    opacity: 0;
    transform: scale3d(0.3, 0.3, 0.3);
  }
  20% {
    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);
  }
  100% {
    opacity: 1;
    transform: scale3d(1, 1, 1);
  }
}
.bounceIn {
  animation-name: bounceIn;
}

/* FlipInX */
@keyframes flipInX {
  from {
    transform: perspective(400px) rotateX(90deg);
    opacity: 0;
  }
  40% {
    transform: perspective(400px) rotateX(-20deg);
  }
  60% {
    transform: perspective(400px) rotateX(10deg);
    opacity: 1;
  }
  80% {
    transform: perspective(400px) rotateX(-5deg);
  }
  to {
    transform: perspective(400px);
  }
}
.flipInX {
  animation-name: flipInX;
}

/* Rotation in from center */
@keyframes rotateIn {
  from {
    transform-origin: center;
    transform: rotate(-200deg);
    opacity: 0;
  }
  to {
    transform-origin: center;
    transform: rotate(0deg);
    opacity: 1;
  }
}
.rotateIn {
  animation-name: rotateIn;
  animation-duration: 0.7s;
  animation-fill-mode: both;
  animation-timing-function: ease-out;
}

/* ZigZag Slide In */
@keyframes zigzagIn {
  0% {
    opacity: 0;
    transform: translateX(-100%) translateY(0);
  }
  25% {
    transform: translateX(-75%) translateY(-25px);
  }
  50% {
    opacity: 1;
    transform: translateX(-50%) translateY(25px);
  }
  75% {
    transform: translateX(-25%) translateY(-25px);
  }
  100% {
    transform: translateX(0) translateY(0);
  }
}
.zigzagIn {
  animation-name: zigzagIn;
  animation-duration: 0.8s;
  animation-fill-mode: both;
  animation-timing-function: ease-out;
}

/* Rotate & Zoom In */
@keyframes rotateZoomIn {
  from {
    opacity: 0;
    transform: rotate(-180deg) scale(0);
  }
  to {
    opacity: 1;
    transform: rotate(0deg) scale(1);
  }
}
.rotateZoomIn {
  animation-name: rotateZoomIn;
  animation-duration: 0.8s;
  animation-fill-mode: both;
  animation-timing-function: ease-out;
}

/* Swing In (like a pendulum) */
@keyframes swingIn {
  20% {
    transform: rotate(15deg);
  }
  40% {
    transform: rotate(-10deg);
  }
  60% {
    transform: rotate(5deg);
  }
  80% {
    transform: rotate(-5deg);
  }
  100% {
    transform: rotate(0deg);
    opacity: 1;
  }
}
.swingIn {
  opacity: 0;
  animation-name: swingIn;
  animation-duration: 0.7s;
  animation-fill-mode: forwards;
  animation-timing-function: ease-out;
}

/* Bounce Rotate In */
@keyframes bounceRotateIn {
  0% {
    opacity: 0;
    transform: rotate(-360deg) scale(0);
  }
  60% {
    opacity: 1;
    transform: rotate(15deg) scale(1.1);
  }
  80% {
    transform: rotate(-10deg) scale(0.95);
  }
  100% {
    transform: rotate(0deg) scale(1);
  }
}
.bounceRotateIn {
  animation-name: bounceRotateIn;
  animation-duration: 0.8s;
  animation-fill-mode: both;
  animation-timing-function: ease-out;
}

/* Slide Zigzag Up */
@keyframes slideZigzagUp {
  0% {
    transform: translateY(100%) translateX(0);
    opacity: 0;
  }
  25% {
    transform: translateY(75%) translateX(25px);
  }
  50% {
    opacity: 1;
    transform: translateY(50%) translateX(-25px);
  }
  75% {
    transform: translateY(25%) translateX(25px);
  }
  100% {
    transform: translateY(0) translateX(0);
  }
}
.slideZigzagUp {
  animation-name: slideZigzagUp;
  animation-duration: 0.8s;
  animation-fill-mode: both;
  animation-timing-function: ease-out;
}

/* FlipInY */
@keyframes flipInY {
  from {
    transform: perspective(400px) rotateY(90deg);
    opacity: 0;
  }
  40% {
    transform: perspective(400px) rotateY(-20deg);
  }
  60% {
    transform: perspective(400px) rotateY(10deg);
    opacity: 1;
  }
  80% {
    transform: perspective(400px) rotateY(-5deg);
  }
  to {
    transform: perspective(400px);
  }
}
.flipInY {
  animation-name: flipInY;
  animation-duration: 0.7s;
  animation-fill-mode: both;
  animation-timing-function: ease-out;
}

/* === Added Animations Below === */

/* Pulse (scale up and down) */
@keyframes pulse {
  0%,
  100% {
    transform: scale(1);
    opacity: 1;
  }
  50% {
    transform: scale(1.1);
    opacity: 0.5;
  }
}
.pulse {
  animation-name: pulse;
}

/* Rotate In Left */
@keyframes rotateInLeft {
  from {
    transform-origin: left center;
    transform: rotate(-90deg);
    opacity: 0;
  }
  to {
    transform-origin: left center;
    transform: rotate(0);
    opacity: 1;
  }
}
.rotateInLeft {
  animation-name: rotateInLeft;
}

/* Rotate In Right */
@keyframes rotateInRight {
  from {
    transform-origin: right center;
    transform: rotate(90deg);
    opacity: 0;
  }
  to {
    transform-origin: right center;
    transform: rotate(0);
    opacity: 1;
  }
}
.rotateInRight {
  animation-name: rotateInRight;
}

/* Swing (like a pendulum swing) */
@keyframes swing {
  20% {
    transform: rotate(15deg);
  }
  40% {
    transform: rotate(-10deg);
  }
  60% {
    transform: rotate(5deg);
  }
  80% {
    transform: rotate(-5deg);
  }
  100% {
    transform: rotate(0deg);
  }
}
.swing {
  animation-name: swing;
  animation-duration: 1s;
  animation-fill-mode: both;
}

/* Bounce In Down */
@keyframes bounceInDown {
  0%,
  60%,
  75%,
  90%,
  100% {
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }
  0% {
    opacity: 0;
    transform: translate3d(0, -3000px, 0);
  }
  60% {
    opacity: 1;
    transform: translate3d(0, 25px, 0);
  }
  75% {
    transform: translate3d(0, -10px, 0);
  }
  90% {
    transform: translate3d(0, 5px, 0);
  }
  100% {
    transform: translate3d(0, 0, 0);
  }
}
.bounceInDown {
  animation-name: bounceInDown;
}

/* Bounce In Up */
@keyframes bounceInUp {
  0%,
  60%,
  75%,
  90%,
  100% {
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }
  0% {
    opacity: 0;
    transform: translate3d(0, 3000px, 0);
  }
  60% {
    opacity: 1;
    transform: translate3d(0, -20px, 0);
  }
  75% {
    transform: translate3d(0, 10px, 0);
  }
  90% {
    transform: translate3d(0, -5px, 0);
  }
  100% {
    transform: translate3d(0, 0, 0);
  }
}
.bounceInUp {
  animation-name: bounceInUp;
}

/* Shake */
@keyframes shake {
  10%,
  90% {
    transform: translateX(-5px);
  }
  20%,
  80% {
    transform: translateX(5px);
  }
  30%,
  50%,
  70% {
    transform: translateX(-10px);
  }
  40%,
  60% {
    transform: translateX(10px);
  }
}
.shake {
  animation-name: shake;
  animation-duration: 0.82s;
  animation-timing-function: ease-in-out;
  animation-fill-mode: both;
}

/* Wobble */
@keyframes wobble {
  0% {
    transform: none;
  }
  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);
  }
  100% {
    transform: none;
  }
}
.wobble {
  animation-name: wobble;
  animation-duration: 1s;
  animation-fill-mode: both;
}

/* Roll In */
@keyframes rollIn {
  from {
    opacity: 0;
    transform: translateX(-100%) rotate(-120deg);
  }
  to {
    opacity: 1;
    transform: translateX(0) rotate(0deg);
  }
}
.rollIn {
  animation-name: rollIn;
}

/* Light Speed In */
@keyframes lightSpeedIn {
  from {
    transform: translateX(100%) skewX(-30deg);
    opacity: 0;
  }
  60% {
    transform: translateX(-20%) skewX(20deg);
    opacity: 1;
  }
  80% {
    transform: translateX(0%) skewX(-5deg);
    opacity: 1;
  }
  to {
    transform: translateX(0) skewX(0deg);
    opacity: 1;
  }
}
.lightSpeedIn {
  animation-name: lightSpeedIn;
  animation-timing-function: ease-out;
  animation-duration: 0.7s;
  animation-fill-mode: both;
}

/* Zoom In Rotate */
@keyframes zoomInRotate {
  from {
    opacity: 0;
    transform: scale(0) rotate(-180deg);
  }
  to {
    opacity: 1;
    transform: scale(1) rotate(0);
  }
}
.zoomInRotate {
  animation-name: zoomInRotate;
}

/* Swing Scale */
@keyframes swingScale {
  0% {
    transform: scale(1) rotate(0deg);
  }
  50% {
    transform: scale(1.2) rotate(10deg);
  }
  100% {
    transform: scale(1) rotate(0deg);
  }
}
.swingScale {
  animation-name: swingScale;
  animation-duration: 1s;
  animation-fill-mode: both;
}

/* Flip In Big */
@keyframes flipInBig {
  0% {
    transform: perspective(400px) rotateY(90deg) scale(0.3);
    opacity: 0;
  }
  100% {
    transform: perspective(400px) rotateY(0deg) scale(1);
    opacity: 1;
  }
}
.flipInBig {
  animation-name: flipInBig;
  animation-duration: 0.8s;
  animation-fill-mode: both;
}

/* Zoom Out */
@keyframes zoomOut {
  from {
    opacity: 0;
    transform: scale(10);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}
.zoomOut {
  animation-name: zoomOut;
  animation-duration: 0.7s;
  animation-fill-mode: both;
}

/* Flip Out */
@keyframes flipOut {
  0% {
    transform: scale(1) rotateY(0deg);
  }
  30% {
    transform: scale(1) rotateY(360deg);
  }
  65% {
    transform: scale(1) rotateY(0deg);
  }
  100% {
    transform: scale(1) rotateY(360deg);
  }
}
.flipOut {
  animation-name: flipOut;
  animation-duration: 3s;
  animation-fill-mode: both;
}

/* Fade Out */
@keyframes fadeOut {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
.fadeOut {
  animation-name: fadeOut;
  animation-duration: 1s;
  animation-fill-mode: forwards;
}
@keyframes rotateZoomOut {
  0% {
    opacity: 0;
    transform: scale(10) rotate(0deg);
  }
  100% {
    opacity: 1;
    transform: scale(1) rotate(360deg);
  }
}

.rotateZoomOut {
  animation-name: rotateZoomOut;
  animation-duration: 1.5s;
  animation-fill-mode: both;
  animation-timing-function: ease-out;
}
