.nut-animate {
  .nut-ani-container {
    display: inline-block;
  }

  /* Animation css */
  [class*='nut-animate-'] {
    animation-duration: 0.5s;
    animation-timing-function: ease-out;
    animation-fill-mode: both;
  }

  //抖动
  .nut-animate-shake {
    animation-name: shake;
  }

  //心跳
  .nut-animate-ripple {
    animation-name: ripple;
  }

  // 漂浮

  .nut-animate-float {
    position: relative;
    animation-name: float-pop;
  }

  //呼吸灯
  .nut-animate-breath {
    animation-name: breath;
    animation-duration: 2700ms;
    animation-timing-function: ease-in-out;
    animation-direction: alternate;
  }

  //右侧向左侧划入
  .nut-animate-slide-right {
    animation-name: slide-right;
  }

  //右侧向左侧划入
  .nut-animate-slide-left {
    animation-name: slide-left;
  }

  //上面向下面划入
  .nut-animate-slide-top {
    animation-name: slide-top;
  }

  //下面向上面划入
  .nut-animate-slide-bottom {
    animation-name: slide-bottom;
  }

  .nut-animate-jump {
    transform-origin: center center;
    animation: jump 0.7s linear;
  }

  //循环
  .loop {
    animation-iteration-count: infinite;
  }

  //抖动动画
  @keyframes shake {
    0%,
    100% {
      transform: translateX(0);
    }

    10% {
      transform: translateX(-9px);
    }

    20% {
      transform: translateX(8px);
    }

    30% {
      transform: translateX(-7px);
    }

    40% {
      transform: translateX(6px);
    }

    50% {
      transform: translateX(-5px);
    }

    60% {
      transform: translateX(4px);
    }

    70% {
      transform: translateX(-3px);
    }

    80% {
      transform: translateX(2px);
    }

    90% {
      transform: translateX(-1px);
    }
  }

  //心跳
  @keyframes ripple {
    0% {
      //box-shadow: 0 0.5em 0.5em rgba(0, 0, 0, 0.4);
      transform: scale(1);
    }
    50% {
      //box-shadow: 0 1em 1em rgba(0, 0, 0, 0.4);
      transform: scale(1.1);
    }
  }

  //呼吸
  @keyframes breath {
    0% {
      transform: scale(1);
    }
    50% {
      transform: scale(1.1);
    }
    100% {
      transform: scale(1);
    }
  }

  //右侧向左侧划入
  @keyframes slide-right {
    0% {
      opacity: 0;
      transform: translateX(100%);
    }

    100% {
      opacity: 1;
      transform: translateX(0);
    }
  }
  //左侧向右侧划入
  @keyframes slide-left {
    0% {
      opacity: 0;
      transform: translateX(-100%);
    }

    100% {
      opacity: 1;
      transform: translateX(0);
    }
  }
  //上面向下面划入
  @keyframes slide-top {
    0% {
      opacity: 0;
      transform: translateY(-100%);
    }

    100% {
      opacity: 1;
      transform: translateY(0);
    }
  }
  //下面向上面划入
  @keyframes slide-bottom {
    0% {
      opacity: 0;
      transform: translateY(100%);
    }

    100% {
      opacity: 1;
      transform: translateY(0);
    }
  }
  // 漂浮 float
  @keyframes float-pop {
    0% {
      top: 0px;
    }

    25% {
      top: 1px;
    }

    50% {
      top: 4px;
    }

    75% {
      top: 1px;
    }

    100% {
      top: 0px;
    }
  }

  //跳跃
  @keyframes jump {
    0% {
      animation-timing-function: ease-in;
      transform: rotate(0deg) translateY(0);
    }
    25% {
      animation-timing-function: ease-out;
      transform: rotate(10deg) translateY(20 * 1px);
    }
    50% {
      animation-timing-function: ease-in;
      transform: rotate(0deg) translateY(-10 * 1px);
    }
    75% {
      animation-timing-function: ease-out;
      transform: rotate(-10deg) translateY(20 * 1px);
    }
    100% {
      animation-timing-function: ease-in;
      transform: rotate(0deg) translateY(0);
    }
  }

  .nut-animate-twinkle {
    position: relative;
    &::after,
    &::before {
      width: 60 * 1px;
      height: 60 * 1px;
      content: '';
      box-sizing: border-box;
      border: 4 * 1px solid rgba(255, 255, 255, 0.6);
      position: absolute;
      border-radius: calc(60 / 2) * 1px;
      right: 50%;
      margin-top: calc(-30 / 2) * 1px;
      margin-right: calc(-60 / 2) * 1px;
      z-index: 1;
      transform: scale(0);
      animation: twinkle 2s ease-out infinite;
    }

    &::after {
      animation-delay: 0.4s;
    }
  }

  // 水波
  @keyframes twinkle {
    0% {
      transform: scale(0);
    }
    20% {
      opacity: 1;
    }
    50%,
    100% {
      transform: scale(1.4);
      opacity: 0;
    }
  }

  .nut-animate-flicker {
    position: relative;
    overflow: hidden;

    &::after {
      width: 100 * 1px;
      height: 60 * 1px;
      position: absolute;
      left: 0;
      top: 0;
      opacity: 0.73;
      content: '';
      background-image: linear-gradient(106deg, rgba(232, 224, 255, 0) 24%, #e8e0ff 91%);
      animation: flicker 1.5s linear infinite;
      transform: skewX(-20deg);
      filter: blur(3 * 1px);
    }
  }

  @keyframes flicker {
    0% {
      transform: translateX(-100 * 1px) skewX(-20deg);
    }
    40%,
    100% {
      transform: translateX(150 * 1px) skewX(-20deg);
    }
  }
}
