@charset "UTF-8";

/* ==========================================================================
   1. 全体のスタイルと基本リセット
   ========================================================================== */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  background: #C61A0E;
  font-family: 'HigureGothic', sans-serif;
  overflow-x: hidden;
  user-select: none;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
}

/* ==========================================================================
   2. レイアウトコンテナ
   ========================================================================== */
.container {
    position: relative;
    width: 100%;
    height: 100vh;
    min-height: 700px;
    margin: 0 auto;
    overflow: hidden; 
}

/* ==========================================================================
   3. フォント設定
   ========================================================================== */
@font-face {
  font-family: 'HigureGothic';
  src: url('../assets/fonts/HigureGothic-Bold.woff2') format('woff2'),
       url('../assets/fonts/HigureGothic-Bold.woff')  format('woff');
  font-weight: normal;
  font-style: normal;
  font-display: swap;
}

/* ==========================================================================
   4. レイヤーの重ね順（z-index）
   ========================================================================== */
.under-baphomet  { z-index: 1;  } /* 背景バフォメット */
.layer-back      { z-index: 3;  } /* 背景 */
.fusuma-left, .fusuma-right { z-index: 2; } /* ふすま */
.layer-baphomet  { z-index: 4;  } /* バフォメット */
.layer-ground    { z-index: 5;  } /* 地面 */
.layer-character { z-index: 6;  } /* キャラクター */
.layer-effect1   { z-index: 7;  } /* エフェクト1 */
.layer-effect2   { z-index: 8;  } /* エフェクト2 */
.effect-move     { z-index: 9;  } /* 動くエフェクト */
.day-first, .day-last { z-index: 10; } /* 日付 */
.layer-logo      { z-index: 11; } /* ロゴ */
.credits         { z-index: 12; } /* クレジット */
.social          { z-index: 13; } /* ソーシャル */
footer           { z-index: 14; } /* フッター */

/* ==========================================================================
   5. メインビジュアル（背景レイヤー）
   ========================================================================== */
.main-visual {
  position: relative;
  width: 100%;
  height: 100vh;
  min-height: 700px;
  overflow: hidden;
}

/* レイヤーの基本スタイル */
.main-visual > div {
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  display: flex;
  justify-content: center;
  align-items: center;
}

.main-visual > div img {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  height: 100%;
  width: auto;
  object-fit: contain;
}

/* 共通の初期状態とアニメーション基準点 */
.main-visual img {
  opacity: 0;
  transform-origin: center center;
}

.main-visual .layer-baphomet img {
  animation: fadedown-baphomet var(--duration-baphomet) cubic-bezier(0.85, 0, 0.25, 1) var(--delay-baphomet) forwards;
  transform-style: preserve-3d;
}

.main-visual .layer-back img {
  animation: fadeIn-back var(--duration-back) cubic-bezier(0.45, 0, 0.25, 1) var(--delay-back) forwards;
}

.main-visual .layer-ground img {
  transform: translate(-50%, -50%) scale(2.0);
  animation: fadeup-ground var(--duration-ground) cubic-bezier(0.35, 0, 0.15, 1) var(--delay-ground) forwards;
}

.main-visual .layer-character img {
  animation: fadedown-character var(--duration-character) cubic-bezier(0.45, 0, 0.25, 1) var(--delay-character) forwards;
}

.main-visual .layer-logo img {
  animation: fadeIn-logo var(--duration-logo) cubic-bezier(0.45, 0, 0.25, 1) var(--delay-logo) forwards;
}

.main-visual .layer-effect1 img,
.main-visual .layer-effect2 img {
  animation: fadeIn-effect var(--duration-effect) ease var(--delay-effect) forwards;
}

/* エフェクトレイヤー */
.effect-move {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  opacity: 1;
}

.effect-move img {
  position: absolute;
  height: auto;
  opacity: 0;
}

/* 個別エフェクトの配置とアニメーション */
.effect-a img {
  width: clamp(60px, 10vw, 200px);
  left: 4vw;
  top: 20vh;
  transform: rotate(-20deg);
  animation: 
    fadeIn-effect var(--duration-effect) ease var(--delay-effect) forwards,
    rotate-a 10s cubic-bezier(0.76, 0, 0.24, 1) var(--delay-effect) infinite;
}

.effect-b img {
  width: clamp(40px, 7vw, 150px);
  right: 3vw;
  top: 0vh;
  transform: rotate(15deg);
  animation: 
    fadeIn-effect var(--duration-effect) ease var(--delay-effect) forwards,
    rotate-b 7s cubic-bezier(0.76, 0, 0.24, 1) infinite;
}

.effect-c img {
  width: clamp(20px, 4vw, 80px);
  right: 5vw;
  bottom: 32vh;
  transform: rotate(-10deg);
  animation: 
    fadeIn-effect var(--duration-effect) ease var(--delay-effect) forwards,
    rotate-c 9s cubic-bezier(0.76, 0, 0.24, 1) infinite;
}

.effect-d img {
  width: clamp(40px, 7vw, 150px);
  left: 0vw;
  bottom: 16vh;
  transform: rotate(25deg) scaleX(-1);
  animation: 
    fadeIn-effect var(--duration-effect) ease var(--delay-effect) forwards,
    rotate-d 6s cubic-bezier(0.76, 0, 0.24, 1) infinite;
}

.effect-e img {
  width: clamp(30px, 6vw, 120px);
  right: 22vw;
  top: 88vh;
  transform: rotate(10deg);
  animation: 
    fadeIn-effect var(--duration-effect) ease var(--delay-effect) forwards,
    rotate-e 12s cubic-bezier(0.76, 0, 0.24, 1) infinite;
}

.under-visual {
  opacity: 1;
}

.under-visual img {
  position: absolute;
  top: -20%;
  left: 50%;
  width: 110%;
  transform: translateX(-50%);
  filter: blur(8px) opacity(0.75);
  object-fit: cover;
}

/* ==========================================================================
  6. 前景要素（テキスト、UI）
  ========================================================================== */

/* ふすま */
.fusuma-left,
.fusuma-right {
  position: fixed;
  top: 0;
  width: 50vw;
  height: 100vh;
  background: #C61A0E;
  transform: scale(1.1);
}

.fusuma-left {
  left: 0;
  animation: 
    fusuma-color-change 2.5s cubic-bezier(0.4, 0, 0.2, 1) var(--delay-baphomet) forwards,
    slideOutLeft var(--duration-fusuma) cubic-bezier(0.7, 0, 0.3, 1) var(--delay-fusuma) forwards;
}

.fusuma-right {
  right: 0;
  animation: 
    fusuma-color-change 2.5s cubic-bezier(0.4, 0, 0.2, 1) var(--delay-baphomet) forwards,
    slideOutRight var(--duration-fusuma) cubic-bezier(0.7, 0, 0.3, 1) var(--delay-fusuma) forwards;
}

/* 日付表示：中央 */
.day-first {
  position: absolute;
  top: 50vh;
  left: 50%;
  transform: translate(-50%, -50%);
  opacity: 0;
  animation: 
    blink-flash var(--duration-day-first) var(--delay-day-first) forwards,
    fadeOut var(--duration-day-first-fadeout) var(--delay-day-first-fadeout) forwards;
}

.day-first .yyyymmdd {
  color: white;
  font-family: "dela-gothic-one", sans-serif;
  font-size: clamp(48px, 12vw, 144px);
  white-space: nowrap;
}

/* 日付表示：左右 */
.day-last {
  position: absolute;
  top: 50%;
  left: 0;
  right: 0;
  transform: translateY(-50%);
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0 -2rem;
  pointer-events: none;
  overflow: hidden;
}

.day-last .mm,
.day-last .dd {
  width: clamp(1rem, 20vw, 25vw);
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: clamp(0.5rem, 22vw, 28vw);
  font-family: "dela-gothic-one", sans-serif;
  letter-spacing: -0.08em;
  line-height: 1;
  pointer-events: auto;
  color: transparent;
  -webkit-text-stroke: 3px #fff;
  opacity: 0;
}

.day-last .mm {
  animation: cutInRight var(--duration-day-last) cubic-bezier(0.45, 0, 0.25, 1) var(--delay-day-last) forwards;
}

.day-last .dd {
  animation: cutInLeft var(--duration-day-last) cubic-bezier(0.45, 0, 0.25, 1) var(--delay-day-last) forwards;
  margin-right: 1.3rem;
}

/* クレジット */
.credits {
  position: fixed;
  left: clamp(15px, 3vw, 30px);
  bottom: clamp(15px, 3vh, 30px);
  color: white;
  font-family: 'HigureGothic', sans-serif;
  font-size: clamp(14px, 2.5vw, 20px);
  text-align: left;
  filter: drop-shadow(0 0 5px #C61A0E);
  opacity: 0;
  animation: slideInFromLeft var(--duration-credits) cubic-bezier(0.4, 0, 0.2, 1) var(--delay-credits) forwards;
}

.social {
  position: fixed;
  right: clamp(15px, 3vw, 30px);
  bottom: clamp(10px, 2.5vh, 20px);
  display: flex;
  align-items: center;
  gap: clamp(10px, 2vw, 20px);
  filter: drop-shadow(0 0 5px #C61A0E);
}

.social .icon-youtube svg {
  width: clamp(40px, 6vw, 60px);
  height: clamp(40px, 6vw, 60px);
}

.social .icon-x svg {
  width: clamp(24px, 4vw, 36px);
  height: clamp(24px, 4vw, 36px);
}

.social svg {
  fill: #ffffff;
  transition: transform 0.3s ease-in-out;
}

.social a:hover svg {
  transform: translateY(-5px) scale(1.1);
}

/* ==========================================================================
   7. フッター
   ========================================================================== */
footer {
  position: absolute;
  bottom: 7px;
  left: 0;
  right: 0;
  text-align: center;
  color: rgba(255, 255, 255, 0.7);
  font-size: 12px;
}

/* ==========================================================================
  8. エフェクトアニメーション（回転）
  ========================================================================== */
@keyframes rotate-a {
  from { transform: rotate(-20deg); }
  to   { transform: rotate(700deg); }
}

@keyframes rotate-b {
  from { transform: rotate(15deg); }
  to   { transform: rotate(735deg); }
}

@keyframes rotate-c {
  from { transform: rotate(10deg); }
  to   { transform: rotate(730deg); }
}

@keyframes rotate-d {
  from { transform: rotate(-10deg); }
  to   { transform: rotate(710deg); }
}

@keyframes rotate-e {
  from { transform: rotate(25deg) scaleX(-1); }
  to   { transform: rotate(745deg) scaleX(-1); }
}

/* ==========================================================================
   9. アニメーションタイミング設定
   ========================================================================== */
:root {
  /* 各アニメーションの長さ */
  --duration-day-first: 1.7s;
  --duration-day-first-fadeout: 0.3s;
  --duration-baphomet: 3.5s;
  --duration-back: 0.5s;
  --duration-ground: 1.85s;
  --duration-character: 1.65s;
  --duration-logo: 2.5s;
  --duration-day-last: 1.0s;
  --duration-effect: 0.5s;
  --duration-fusuma: 1.5s;
  --duration-credits: 1.2s;

  /* 各アニメーションの開始遅延時間 */
  --delay-start: 1s;
  --delay-day-first: var(--delay-start);
  --delay-baphomet: calc(var(--delay-day-first) + 1.0s);
  --delay-day-first-fadeout: calc(var(--delay-baphomet) + 1.1s);
  --delay-back: calc(var(--delay-day-first-fadeout) + 2.15s);
  --delay-ground: calc(var(--delay-baphomet) + 2.05s);
  --delay-character: calc(var(--delay-ground) + 0.2s);
  --delay-logo: calc(var(--delay-character) + 1.22s);
  --delay-day-last: calc(var(--delay-logo) + 2.13s);
  --delay-fusuma: calc(var(--delay-logo) + 1.77s);
  --delay-effect: calc(var(--delay-day-last) + 1.5s);
  --delay-credits: calc(var(--delay-day-last) + 1.3s);
}

/* ==========================================================================
   10. 出現アニメーション
   ========================================================================== */
@keyframes blink-flash {
  0% {
    transform: translate(-50%, -50%);
    opacity: 0;
  }
  8% {
    transform: translate(-50%, -50%);
    opacity: 1;
  }
  100% {
    transform: translate(-50%, -50%);
    opacity: 1
  }
}

@keyframes fadeup-ground {
  0% {
    transform: translate(-50%, -50%) translateY(10px) scale(4.0);
    opacity: 0;
  }
  82% {
    transform: translate(-50%, -50%) translateY(-500px) scale(4.0);
    opacity: 1;
  }
  100% {
    opacity: 1;
    transform: translate(-50%, -50%) translateY(0) scale(2.0);
  }
}

@keyframes fadedown-baphomet {
  0% {
    transform: translate(-50%, -50%) translateY(-50%) scale(1.8);
    width: 55.6%;
    height: auto;
    opacity: 0;
  } 
  70% {
    transform: translate(-50%, -50%) translateY(50%) scale(1.8);
    width: 55.6%;
    height: auto;
    opacity: 1;
  }
  100% {
    transform: translate(-50%, -50%) translateY(0%) scale(1);
    width: auto;
    height: 100%;
    opacity: 1;
  }
}

@keyframes fadedown-character {
  0% {
    transform: translate(-50%, -50%) translateY(1100px) scale(1.8);
    opacity: 0;
  }
  82% {
    opacity: 1;
    transform: translate(-50%, -50%) translateY(-200px) scale(1.8);
  }
  100% {
    opacity: 1;
    transform: translate(-50%, -35%) translateY(0) scale(0.9);
  }
}

@keyframes fadeIn-back {
  0% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}

@keyframes fadeIn-logo {
  0% {
    transform: translate(-50%, -50%) scale(1.6);
    opacity: 0;
    filter: blur(10px);
  }
  35% {
    opacity: 1;
    filter: blur(0px);
  }
  95% {
    transform: translate(-50%, -50%) scale(1.8);
    opacity: 1;
  }
  98% {
    transform: translate(-50%, -50%) scale(1);
    opacity: 1;
  }
  99% {
    transform: translate(-50%, -50%) scale(1.1);
    opacity: 1;
  }
  100% {
    transform: translate(-50%, -50%) scale(1);
    opacity: 1;
  }
}

@keyframes fadeIn-effect {
  0% {
    opacity: 0;
  }
  100% {
    opacity: 1;
  }
}

@keyframes fadeOut {
  to {
    opacity: 0;
  }
}

@keyframes cutInLeft {
  from {
    opacity: 0;
    transform: translateX(-50vw);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes cutInRight {
  from {
    opacity: 0;
    transform: translateX(50vw);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes slideOutLeft {
  to {
    transform: translateX(-100%);
  }
}

@keyframes slideOutRight {
  to {
    transform: translateX(100%);
  }
}

@keyframes slideInFromLeft {
  from {
    opacity: 0;
    transform: translateX(-50px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes fusuma-color-change {
  0% {
    background: #C61A0E;
  }
  100% {
    background: #000000;
  }
}

/* ==========================================================================
   11. レスポンシブスタイル（メディアクエリ）
   ========================================================================== */
@media (max-width: 1050px) {
  .day-last {
    top: 5%;
  }
  @keyframes fadedown-baphomet {
    0% {
      transform: translate(-50%, -50%) translateY(-70%) scale(1.5);
      width: 66.7%;
      height: auto;
      opacity: 0;
    }
    70% {
      transform: translate(-50%, -50%) translateY(30%) scale(1.5);
      width: 66.7%;
      height: auto;
      opacity: 1;
    }
    100% {
      transform: translate(-50%, -50%) translateY(-3%) scale(1.0);
      width: auto;
      height: 100%;
      opacity: 1;
    }
  }
}

@media (max-width: 450px) {
  html, body {
    overflow-y: auto;
    overflow-x: hidden;
    max-width: 100vw;
  }

  .container {
    height: calc(100vh + 150px);
    min-height: calc(650px + 150px);
    overflow-x: hidden;
    overflow-y: visible;
    max-width: 100vw;
  }

  .main-visual {
    height: 100vh;
    min-height: 650px;
  }

  .main-visual .layer-logo img {
      width: 120%;
  }

  .main-visual .layer-ground img {
    transform: scale(1.1);
  }

  .main-visual .layer-character img {
    transform: scale(0.8);
  }

  .fusuma-left, .fusuma-right {
    background:#C61A0E;
  }

  .fusuma-left {
    animation: slideOutLeft var(--duration-fusuma) cubic-bezier(0.7, 0, 0.3, 1) var(--delay-fusuma) forwards;
  }

  .fusuma-right {
    animation: slideOutRight var(--duration-fusuma) cubic-bezier(0.7, 0, 0.3, 1) var(--delay-fusuma) forwards;
  }

  .day-first {
    width: 80vw;
    text-align: center;
  }
  
  .day-first .yyyymmdd {
    color: white;
    font-family: "dela-gothic-one", sans-serif;
    font-size: clamp(32px, 10vw, 144px);
    white-space: nowrap;
    width: 100%;
    display: block;
    line-height: 1;
  }

  .day-last {
    top: 90%;
  }

  .credits {
    position: absolute;
    width: 100%;
    left: 0;
    top: calc(100vh + 10px);
    text-align: center;
    transform: none;
    opacity: 0;
    animation: slideInFromLeft var(--duration-credits) cubic-bezier(0.4, 0, 0.2, 1) var(--delay-credits) forwards;
  }
  
  .social {
    position: absolute;
    width: 100%;
    left: 0;
    top: calc(100vh + 100px);
    justify-content: center;
    transform: none;
    gap: 20px;
  }

  /* スマホ用アニメーション調整 */

  :root {
    /* 各アニメーションの長さ */
    --duration-day-first: 1.7s;
    --duration-day-first-fadeout: 0.3s;
    --duration-baphomet: 3.5s;
    --duration-back: 0.5s;
    --duration-ground: 1.85s;
    --duration-character: 1.65s;
    --duration-logo: 2.5s;
    --duration-day-last: 1.0s;
    --duration-effect: 0.5s;
    --duration-fusuma: 1.5s;
    --duration-credits: 1.2s;
  
    /* 各アニメーションの開始遅延時間 */
    --delay-start: 1s;
    --delay-day-first: var(--delay-start);
    --delay-baphomet: calc(var(--delay-day-first) + 1.0s);
    --delay-day-first-fadeout: calc(var(--delay-baphomet) + 1.1s);
    --delay-back: calc(var(--delay-day-first-fadeout) + 2.15s);
    --delay-ground: calc(var(--delay-baphomet) + 2.05s);
    --delay-character: calc(var(--delay-ground) + 0.2s);
    --delay-logo: calc(var(--delay-character) + 1.22s);
    --delay-effect: calc(var(--delay-logo) + 1.77s);
    --delay-credits: calc(var(--delay-logo) + 1.77s);
  }
  
  @keyframes fadedown-baphomet {
    0% {
      transform: translate(-45%, -50%) translateY(-70%) scale(1.5);
      opacity: 0;
    }
    70% {
      transform: translate(-45%, -50%) translateY(30%) scale(1.5);
      opacity: 1;
    }
    100% {
      transform: translate(-50%, -50%) translateY(-8%) scale(0.8);
      opacity: 1;
    }
  }

  @keyframes fadeup-ground {
    0% {
      transform: translate(-50%, -50%) translateY(10px) scale(3);
      opacity: 0;
    }
    82% {
      transform: translate(-50%, -50%) translateY(-500px) scale(3);
      opacity: 1;
    }
    100% {
      opacity: 1;
      transform: translate(-50%, -50%) translateY(0) scale(1);
    }
  }
  
  @keyframes fadedown-character {
    0% {
      transform: translate(-30%, -50%) translateY(1100px) scale(1.6);
      opacity: 0;
    }
    82% {
      opacity: 1;
      transform: translate(-30%, -50%) translateY(-200px) scale(1.6);
    }
    100% {
      opacity: 1;
      transform: translate(-50%, -35%) translateY(0%) scale(0.7);
    }
  }
  @keyframes fadeIn-logo {
    0% {
      transform: translate(-50%, -50%) scale(1);
      opacity: 0;
      filter: blur(10px);
    }
    35% {
      opacity: 1;
      filter: blur(0px);
    }
    100% {
      transform: translate(-50%, -50%) scale(1);
      opacity: 1;
    }
  }
  @keyframes cutInLeft {
    from {
      opacity: 0;
      transform: translateX(-50vw);
    }
    to {
      opacity: 0;
      transform: translateX(0);
    }
  }
  
  @keyframes cutInRight {
    from {
      opacity: 0;
      transform: translateX(50vw);
    }
    to {
      opacity: 0;
      transform: translateX(0);
    }
  }
}

