.lds-ellipsis {
    display: inline-block;
    position: relative;
    width: 80px;
    height: 80px;
  }
  .lds-ellipsis div {
    position: absolute;
    top: 33px;
    width: 13px;
    height: 13px;
    border-radius: 50%;
    background: rgb(0, 0, 0);
    animation-timing-function: cubic-bezier(0, 1, 1, 0);
  }
  .lds-ellipsis div:nth-child(1) {
    left: 8px;
    animation: lds-ellipsis1 0.6s infinite;
  }
  .lds-ellipsis div:nth-child(2) {
    left: 8px;
    animation: lds-ellipsis2 0.6s infinite;
  }
  .lds-ellipsis div:nth-child(3) {
    left: 32px;
    animation: lds-ellipsis2 0.6s infinite;
  }
  .lds-ellipsis div:nth-child(4) {
    left: 56px;
    animation: lds-ellipsis3 0.6s infinite;
  }
  @keyframes lds-ellipsis1 {
    0% {
      transform: scale(0);
    }
    100% {
      transform: scale(1);
    }
  }
  @keyframes lds-ellipsis3 {
    0% {
      transform: scale(1);
    }
    100% {
      transform: scale(0);
    }
  }
  @keyframes lds-ellipsis2 {
    0% {
      transform: translate(0, 0);
    }
    100% {
      transform: translate(24px, 0);
    }
  }

  @-webkit-keyframes swing {
    20% {
        -webkit-transform: rotate(15deg);
        transform: rotate(15deg)
    }

    40% {
        -webkit-transform: rotate(-10deg);
        transform: rotate(-10deg)
    }

    60% {
        -webkit-transform: rotate(5deg);
        transform: rotate(5deg)
    }

    80% {
        -webkit-transform: rotate(-5deg);
        transform: rotate(-5deg)
    }

    to {
        -webkit-transform: rotate(0deg);
        transform: rotate(0deg)
    }
}
:root {
  --animate-duration: 1s;
  --animate-delay: 1s;
  --animate-repeat: 1
}
.animated {
  -webkit-animation-duration: 1s;
  animation-duration: 1s;
  -webkit-animation-duration: var(--animate-duration);
  animation-duration: var(--animate-duration);
  -webkit-animation-fill-mode: both;
  animation-fill-mode: both
}

.animated.repeat-3 {
  -webkit-animation-iteration-count: 3;
  animation-iteration-count: 3;
  -webkit-animation-iteration-count: calc(var(--animate-repeat)*3);
  animation-iteration-count: calc(var(--animate-repeat)*3)
}
.animated.flip {
  -webkit-backface-visibility: visible;
  backface-visibility: visible;
  -webkit-animation-name: flip;
  animation-name: flip
}
.animated.infinite {
  -webkit-animation-iteration-count: infinite;
  animation-iteration-count: infinite
}

@keyframes swing {
  20% {
      -webkit-transform: rotate(15deg);
      transform: rotate(15deg)
  }

  40% {
      -webkit-transform: rotate(-10deg);
      transform: rotate(-10deg)
  }

  60% {
      -webkit-transform: rotate(5deg);
      transform: rotate(5deg)
  }

  80% {
      -webkit-transform: rotate(-5deg);
      transform: rotate(-5deg)
  }

  to {
      -webkit-transform: rotate(0deg);
      transform: rotate(0deg)
  }
}

.swing {
  -webkit-transform-origin: top center;
  transform-origin: top center;
  -webkit-animation-name: swing;
  animation-name: swing
}

@keyframes heartBeat {
  0% {
      -webkit-transform: scale(1);
      transform: scale(1)
  }

  14% {
      -webkit-transform: scale(1.3);
      transform: scale(1.3)
  }

  28% {
      -webkit-transform: scale(1);
      transform: scale(1)
  }

  42% {
      -webkit-transform: scale(1.3);
      transform: scale(1.3)
  }

  70% {
      -webkit-transform: scale(1);
      transform: scale(1)
  }
}
@-webkit-keyframes heartBeat {
  0% {
      -webkit-transform: scale(1);
      transform: scale(1)
  }

  14% {
      -webkit-transform: scale(1.3);
      transform: scale(1.3)
  }

  28% {
      -webkit-transform: scale(1);
      transform: scale(1)
  }

  42% {
      -webkit-transform: scale(1.3);
      transform: scale(1.3)
  }

  70% {
      -webkit-transform: scale(1);
      transform: scale(1)
  }
}

.animate__heartBeat {
  -webkit-animation-name: heartBeat;
  animation-name: heartBeat;
  -webkit-animation-duration: 1.3s;
  animation-duration: 1.3s;
  -webkit-animation-duration: calc(var(--animate-duration)*1.3);
  animation-duration: calc(var(--animate-duration)*1.3);
  -webkit-animation-timing-function: ease-in-out;
  animation-timing-function: ease-in-out
}


.skeleton {
  position: relative;
  overflow: hidden;
  background: #dddddd;
}

.skeleton.animate::after{
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, transparent, #ffffff, transparent);
  animation: shimmer 1.5s infinite;
}

@keyframes shimmer {
  100% { transform: translateX(100%); }
}