@charset "utf-8";

/*up,down,left,right,transform1,transform2の共通設定
（待機中の設定）
---------------------------------------------------------------------------*/
.up,
.down,
.left,
.right,
.transform1,
.transform2 {
  position: relative;
  opacity: 0; /*透明度（透明の状態）*/
}

/*up,down,left,right,transform1,transform2の共通設定
（要素が見えたら実行するアクションの設定）
---------------------------------------------------------------------------*/
.upstyle,
.downstyle,
.leftstyle,
.rightstyle,
.transform1style,
.transform2style {
  opacity: 1; /*透明度（色が100%出た状態）*/
  transition: 0.7s 0.4s; /*1sはアニメーションの実行時間1.5秒。0.5sは0.5秒遅れてスタートする指定。*/
}

/*upスタイル。下から上にフェードインしてくるスタイル
---------------------------------------------------------------------------*/
/*待機中の設定*/
.up {
  bottom: -20px; /*基準値の下20pxの場所からスタート*/
}

/*要素が見えたら実行するアクション*/
.upstyle {
  bottom: 0px; /*基準値まで戻す*/
}

/*downスタイル。上から下にフェードインしてくるスタイル
---------------------------------------------------------------------------*/
/*待機中の設定*/
.down {
  top: -20px; /*基準値の上20pxの場所からスタート*/
}

/*要素が見えたら実行するアクション*/
.downstyle {
  top: 0px; /*基準値まで戻す*/
}

/*leftスタイル。左からフェードインしてくるスタイル
---------------------------------------------------------------------------*/
/*待機中の設定*/
.left {
  left: -20px; /*基準値より左に100pxの場所からスタート*/
}

/*要素が見えたら実行するアクション*/
.leftstyle {
  left: 0px; /*基準値まで戻す*/
}

/*rightスタイル。右からフェードインしてくるスタイル
---------------------------------------------------------------------------*/
/*待機中の設定*/
.right {
  right: -20px; /*基準値より右に100pxの場所からスタート*/
}

/*要素が見えたら実行するアクション*/
.rightstyle {
  right: 0px; /*基準値まで戻す*/
}

/*transform1スタイル。その場で回転するスタイル
---------------------------------------------------------------------------*/
/*待機中の設定*/
.transform1 {
  transform: scaleX(0); /*幅を0%でスタート*/
}

/*要素が見えたら実行するアクション*/
.transform1style {
  transform: scaleX(1); /*幅を100%に戻す*/
}

/*transform2スタイル。倒れた状態から起き上がるスタイル
---------------------------------------------------------------------------*/
/*待機中の設定*/
.transform2 {
  transform: perspective(400px) translateZ(-70px) rotateX(50deg);
}

/*要素が見えたら実行するアクション*/
.transform2style {
  transform: perspective(400px) translateZ(0px) rotateX(0deg);
}

/*blurスタイル。ぼかしで出現するスタイル。
---------------------------------------------------------------------------*/
/*待機中の設定*/
.blur {
  opacity: 0;
  filter: blur(10px);
  transform: translateZ(0) scale(1.02);
  transform-origin: center center;
  will-change: transform, opacity, filter;
  backface-visibility: hidden;
  flex-shrink: 0;
}

/*要素が見えたら実行するアクション*/
.blurstyle {
  opacity: 1;
  filter: blur(0);
  transform: translateZ(0) scale(1);
  transition: transform 1s ease-out 0.5s, opacity 1s ease-out 0.5s,
    filter 1s ease-out 0.5s;
}

/*transform3スタイル。小さなサイズから原寸大になるスタイル
---------------------------------------------------------------------------*/
/*キーフレーム（アニメーション）設定*/
@keyframes transform3 {
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.05);
  }
  70% {
    transform: scale(0.99);
  }
  100% {
    transform: scale(1);
  }
}

/*待機中の設定*/
.transform3 {
  transform: scale(0);
}

/*要素が見えたら実行するアクション*/
.transform3style {
  animation: transform3 0.8s ease-out 0.5s both;
}

/*bounceスタイル。大きくなってぎゅっと縮むスタイル
---------------------------------------------------------------------------*/
.bounce {
  opacity: 0;
  transform: scale(0.5);
}

.bouncestyle {
  opacity: 1;
  animation: bounceIn 0.8s ease-out forwards;
}

@keyframes bounceIn {
  0% { transform: scale(0.5); }
  60% { transform: scale(1.2); }
  80% { transform: scale(0.95); }
  100% { transform: scale(1); }
}

/*shakeスタイル。横にブルンと揺れるスタイル
---------------------------------------------------------------------------*/
.shake {
  opacity: 0;
}

.shakestyle {
  opacity: 1;
  animation: shake 0.7s ease-out;
}

@keyframes shake {
  0% { transform: translateX(0); }
  20% { transform: translateX(-5px); }
  40% { transform: translateX(5px); }
  60% { transform: translateX(-3px); }
  80% { transform: translateX(3px); }
  100% { transform: translateX(0); }
}

/*fadefloatスタイル。ふわっとフェード＋微妙に浮くスタイル
---------------------------------------------------------------------------*/
.fadefloat {
  opacity: 0;
  transform: translateY(10px);
}

.fadefloatstyle {
  opacity: 1;
  transform: translateY(0);
  transition: 0.9s ease-out;
}

/*rotateinスタイル。くるっと1回転スタイル
---------------------------------------------------------------------------*/
.rotatein {
  opacity: 0;
  transform: rotate(-90deg);
}

.rotateinstyle {
  opacity: 1;
  transform: rotate(0deg);
  transition: 0.8s ease-out;
}

/*slidein-fastスタイル。左からビュッとスライド着地
---------------------------------------------------------------------------*/
.slidefast {
  opacity: 0;
  transform: translateX(-50px);
}

.slidefaststyle {
  opacity: 1;
  transform: translateX(0);
  transition: 0.4s ease-out;
}

/*pop-glowスタイル。スッと拡大して光る
---------------------------------------------------------------------------*/
.popglow {
  opacity: 0;
  transform: scale(0.8);
}

.popglowstyle {
  opacity: 1;
  transform: scale(1);
  filter: drop-shadow(0 0 8px rgba(255,255,255,0.5));
  transition: 0.6s ease-out;
}

/*grow-upスタイル。下から生えてくる
---------------------------------------------------------------------------*/
.growup {
  opacity: 0;
  transform: scaleY(0);
  transform-origin: bottom;
}

.growupstyle {
  opacity: 1;
  transform: scaleY(1);
  transition: 0.6s ease-out;
}

/*spinzoomスタイル。ゆっくり回転しながら拡大
---------------------------------------------------------------------------*/
.spinzoom {
  opacity: 0;
  transform: scale(0.7) rotate(-10deg);
}

.spinzoomstyle {
  opacity: 1;
  transform: scale(1) rotate(0deg);
  transition: 0.7s ease-out;
}

/*colorfadeスタイル。色が変化しながらフェードイン
---------------------------------------------------------------------------*/
.colorfade {
  opacity: 0;
  filter: hue-rotate(90deg);
}

.colorfadestyle {
  opacity: 1;
  filter: hue-rotate(0);
  transition: 1s ease-out;
}

/*bg-expandスタイル。背景がふわっと広がる
---------------------------------------------------------------------------*/
.bgexpand {
  opacity: 0;
  background-size: 0%;
}

.bgexpandstyle {
  opacity: 1;
  background-size: 100%;
  transition: 1s ease-out;
}

/*bubbleスタイル。泡のように弾ける
---------------------------------------------------------------------------*/
.bubble {
  opacity: 0;
  transform: scale(0.3);
}

.bubblestyle {
  opacity: 1;
  animation: bubbleIn 0.6s ease-out forwards;
}

@keyframes bubbleIn {
  0% { transform: scale(0.3); }
  70% { transform: scale(1.1); }
  100% { transform: scale(1); }
}

/*snowareaスタイル。雪が背景に降る）
---------------------------------------------------------------------------*/
.snowarea { position: relative; overflow: hidden; }
.snow {
  position: absolute;
  top: -20px;
  background: white;
  border-radius: 50%;
  opacity: 0.8;
  animation: snowFall linear forwards;
}

@keyframes snowFall {
  100% { transform: translateY(200px); opacity: 0; }
}

/*wipe-leftスタイル。ズバーッと左から現れる
---------------------------------------------------------------------------*/
.wipeleft {
  opacity: 0;
  clip-path: inset(0 100% 0 0);
}

.wipeleftstyle {
  opacity: 1;
  clip-path: inset(0 0 0 0);
  transition: 0.8s ease-out;
}

/*tilt-inスタイル。下から伸びるように入る。
---------------------------------------------------------------------------*/
.tiltin {
  opacity: 0;
  transform: translateY(20px) rotateX(15deg);
}

.tiltinstyle {
  opacity: 1;
  transform: translateY(0) rotateX(0);
  transition: 0.8s ease-out;
}

/*flashスタイル。スターのように光が点滅
---------------------------------------------------------------------------*/
.flash {
  opacity: 0;
}

.flashstyle {
  opacity: 1;
  animation: flash 1.2s ease-out;
}

@keyframes flash {
  0% { opacity: 0; }
  50% { opacity: 1; }
  100% { opacity: 1; }
}

/*stretchxスタイル。スターのように光が点滅
---------------------------------------------------------------------------*/
.stretchx {
  opacity: 0;
  transform: scaleX(0);
}

.stretchxstyle {
  opacity: 1;
  transform: scaleX(1);
  transition: 0.6s ease-out;
}

/*stretchyスタイル。スターのように光が点滅
---------------------------------------------------------------------------*/
.stretchy {
  opacity: 0;
  transform: scaleY(0);
}

.stretchystyle {
  opacity: 1;
  transform: scaleY(1);
  transition: 0.6s ease-out;
}

/*sharpenスタイル。だんだんフォーカスが合う
---------------------------------------------------------------------------*/
.sharpen {
  opacity: 0;
  filter: blur(6px);
}

.sharpenstyle {
  opacity: 1;
  filter: blur(0);
  transition: 0.8s ease-out;
}

/*flip3dスタイル。カードが立体で回転
---------------------------------------------------------------------------*/
.flip3d {
  opacity: 0;
  transform: rotateY(-90deg);
  transform-origin: left center;
}

.flip3dstyle {
  opacity: 1;
  transform: rotateY(0deg);
  transition: 0.8s ease-out;
}

/*wave-bgスタイル。背景の波アニメーション
---------------------------------------------------------------------------*/
.wave-bg {
  position: relative;
  overflow: hidden;
}

.wave-bg::before {
  content: "";
  position: absolute;
  inset: 0;
  background: url('images/wave.svg') repeat-x;
  animation: waveMove 8s linear infinite;
  opacity: 0.4;
}

@keyframes waveMove {
  0% { background-position-x: 0; }
  100% { background-position-x: 1000px; }
}

/*sprayスタイル。スプレー風エフェクト
---------------------------------------------------------------------------*/
.spray {
  position: relative;
  opacity: 0;
}

.spraystyle {
  opacity: 1;
}

.spray-particle {
  position: absolute;
  width: 4px;
  height: 4px;
  background: rgba(255,255,255,0.8);
  border-radius: 50%;
  animation: spray-move 0.7s ease-out forwards;
  pointer-events: none;
}

@keyframes spray-move {
  to {
    transform: translate(
      calc(var(--dx) * 1px),
      calc(var(--dy) * 1px)
    );
    opacity: 0;
  }
}