/* =========================================================
   株式会社信源テーマ — アニメーションモジュール
   animations.css （v1.3.1）

   既存の .fade-up はそのまま維持し、本ファイルで
   より洗練されたスクロール演出とFVスライダーを提供します。
   すべて prefers-reduced-motion に対応。

   v1.3.1 修正:
   - FV背景ズームを @keyframes 方式に変更（全スライドで確実に動作）
   - スマホ用 @media を末尾に1つへ統合（カスケード崩れを解消）
   - スマホではキャッチコピーを強制表示（opacity:0 残留バグ修正）
   - スマホでロゴ透かしを非表示（右側の余白を解消）
   ========================================================= */

/* ---------------------------------------------------------
   共通イージング
   --------------------------------------------------------- */
:root {
  --anim-ease:      cubic-bezier(0.16, 1, 0.3, 1);   /* なめらかな減速 */
  --anim-ease-out:  cubic-bezier(0.33, 1, 0.68, 1);
}

/* =========================================================
   1. 見出しのマスク・リビール  [data-anim="reveal"]
   ========================================================= */
[data-anim="reveal"] {
  display: inline-block;
  overflow: hidden;
  vertical-align: top;
}
[data-anim="reveal"] > * {
  display: inline-block;
  transform: translateY(110%);
  transition: transform 0.9s var(--anim-ease);
  will-change: transform;
}
[data-anim="reveal"].is-inview > * {
  transform: translateY(0);
}
[data-anim="reveal"] > [data-line="1"] { transition-delay: 0.06s; }
[data-anim="reveal"] > [data-line="2"] { transition-delay: 0.16s; }
[data-anim="reveal"] > [data-line="3"] { transition-delay: 0.26s; }

/* 見出しブロック（c-heading）専用：英字→和文の順にリビール */
.c-heading[data-anim="heading"] .c-heading__en,
.c-heading[data-anim="heading"] .c-heading__jp {
  display: block;
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.7s var(--anim-ease),
              transform 0.8s var(--anim-ease);
}
.c-heading[data-anim="heading"] .c-heading__jp { transition-delay: 0.12s; }
.c-heading[data-anim="heading"].is-inview .c-heading__en,
.c-heading[data-anim="heading"].is-inview .c-heading__jp {
  opacity: 1;
  transform: translateY(0);
}
.c-heading[data-anim="heading"] .c-heading__jp::before {
  transform: translateX(-50%) scaleX(0);
  transition: transform 0.6s var(--anim-ease) 0.3s;
}
.c-heading[data-anim="heading"].c-heading--left .c-heading__jp::before {
  transform: scaleX(0);
  transform-origin: left;
}
.c-heading[data-anim="heading"].is-inview .c-heading__jp::before {
  transform: translateX(-50%) scaleX(1);
}
.c-heading[data-anim="heading"].c-heading--left.is-inview .c-heading__jp::before {
  transform: scaleX(1);
}

/* =========================================================
   2. 画像のマスク・スライドリビール  [data-anim="image"]
   clip-path を使わず overflow:hidden + transform のみ。
   Grid / lazy / 入れ子装飾と干渉しない安定方式。
   ========================================================= */
[data-anim="image"] {
  overflow: hidden;
}
[data-anim="image"] > img,
[data-anim="image"] > .anim-inner {
  display: block;
  width: 100%;
  height: auto;
}
[data-anim="image"].is-inview > img,
[data-anim="image"].is-inview > .anim-inner {
  animation: shingenImageRise 1.1s var(--anim-ease) both;
}
@keyframes shingenImageRise {
  from { transform: translateY(40px) scale(1.06); opacity: 0; }
  to   { transform: translateY(0) scale(1); opacity: 1; }
}

/* =========================================================
   3. FLOW接続線のスクロール連動ドロー
   ========================================================= */
.flow__list[data-anim="flowline"] {
  position: relative;
}
.flow__list[data-anim="flowline"]::before {
  content: "";
  position: absolute;
  left: 64px;
  top: 40px;
  bottom: 40px;
  width: 2px;
  background: var(--c-gray-line);
  z-index: 0;
}
.flow__list[data-anim="flowline"]::after {
  content: "";
  position: absolute;
  left: 64px;
  top: 40px;
  width: 2px;
  height: 0;
  background: linear-gradient(180deg, var(--c-blue-bright), var(--c-navy));
  z-index: 0;
  transition: height 0.2s linear;
}
.flow__list[data-anim="flowline"].is-active::after {
  height: calc((100% - 80px) * var(--flow-progress, 0));
}
.flow__list[data-anim="flowline"] .flow-step:not(:last-child)::after {
  display: none;
}
.flow__list[data-anim="flowline"] .flow-step {
  position: relative;
  z-index: 1;
}
.flow__list[data-anim="flowline"] .flow-step .flow-step__num strong {
  transition: transform 0.5s var(--anim-ease), color 0.4s ease;
}
.flow__list[data-anim="flowline"] .flow-step.is-reached .flow-step__num strong {
  transform: scale(1.12);
  color: var(--c-blue-bright);
}

/* =========================================================
   4. カードの時間差登場  [data-anim="rise"]
   ========================================================= */
[data-anim="rise"] {
  opacity: 0;
  transform: translateY(40px) scale(0.98);
  transition: opacity 0.7s var(--anim-ease),
              transform 0.8s var(--anim-ease);
  transition-delay: calc(var(--i, 0) * 0.09s);
  will-change: opacity, transform;
}
[data-anim="rise"].is-inview {
  opacity: 1;
  transform: translateY(0) scale(1);
}

/* ホバー時の微チルト（カード共通） */
.reason-card,
.biz-card,
.job-card {
  transition: transform 0.4s var(--anim-ease),
              box-shadow 0.4s var(--anim-ease);
}
.tilt-card {
  transform-style: preserve-3d;
  transition: transform 0.18s var(--anim-ease-out),
              box-shadow 0.4s var(--anim-ease);
}

/* =========================================================
   5. ページ上端のスクロールプログレスバー
   ========================================================= */
.scroll-progress {
  position: fixed;
  top: 0;
  left: 0;
  height: 3px;
  width: 100%;
  transform: scaleX(0);
  transform-origin: left;
  background: linear-gradient(90deg, var(--c-blue-bright), var(--c-navy));
  z-index: 1001;
  pointer-events: none;
  will-change: transform;
}

/* =========================================================
   6. ファーストビュー 横スライダー
   front-page.php の .mv--slider 構造に対応。
   ========================================================= */

/* スライダーのルート */
.mv--slider {
  position: relative;
  min-height: 100vh;
  width: 100%;
  max-width: 100%;
  overflow: hidden;
}

/* 横並びトラック（JSが translateX で移動） */
.mv-slider__track {
  position: absolute;
  inset: 0;
  display: flex;
  width: 100%;
  height: 100%;
  transition: transform 0.8s var(--anim-ease);
  will-change: transform;
}

/* 各スライド：トラック幅の等分 */
.mv-slide {
  position: relative;
  flex: 0 0 100%;
  width: 100%;
  height: 100%;
  overflow: hidden;
}

/* スライド背景画像。@keyframes でゆっくりズーム（Ken Burns風）
   is-active が付いた瞬間に確実に発火するため、
   どのスライドでも・初回でもズームする */
.mv-slide__bg {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center;
  transform: scale(1.06);
}
.mv-slide.is-active .mv-slide__bg {
  animation: shingenKenBurns 7s ease-out forwards;
}
@keyframes shingenKenBurns {
  from { transform: scale(1.06); }
  to   { transform: scale(1.14); }
}

/* コピーのある左下だけを締めるグラデーション
   （写真は明るいまま・文字部分のみ可読性を確保） */
.mv-slide__overlay {
  position: absolute;
  inset: 0;
	opacity:0.4;
  z-index: 1;
  background:
    linear-gradient(
      72deg,
      rgba(6, 24, 47, 0.80) 0%,
      rgba(6, 24, 47, 0.46) 36%,
      rgba(6, 24, 47, 0.08) 66%,
      rgba(6, 24, 47, 0.00) 100%
    );
}

/* スライド内のコピー領域 */
.mv-slide__inner {
  position: absolute;
  inset: 0;
  z-index: 2;
  display: flex;
  align-items: center;
}
.mv-slide__inner .l-container { width: var(--container-w); }

/* スライド内コピーの登場：active のときだけ表示
   行マスク＋スライドアップ */
.mv-slide .mv__label,
.mv-slide .mv__title .mv-line > span {
  opacity: 0;
  transform: translateY(40px);
  transition: opacity 0.8s var(--anim-ease),
              transform 0.9s var(--anim-ease);
}
.mv-slide .mv__title .mv-line { display: block; overflow: hidden; }
.mv-slide.is-active .mv__label,
.mv-slide.is-active .mv__title .mv-line > span {
  opacity: 1;
  transform: translateY(0);
}
.mv-slide.is-active .mv__label { transition-delay: 0.25s; }
.mv-slide.is-active .mv__title .mv-line:nth-child(1) > span { transition-delay: 0.38s; }
.mv-slide.is-active .mv__title .mv-line:nth-child(2) > span { transition-delay: 0.50s; }

/* コピー文字に影 — 明るい背景でも輪郭を保つ */
.mv-slide .mv__title,
.mv-slide .mv__label {
  text-shadow: 0 2px 14px rgba(0, 0, 0, 0.45);
}

/* 共通の固定要素（サブコピー＋ボタン）。スライドの上に常時表示 */
.mv-slider__fixed {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 12%;
  z-index: 3;
  pointer-events: none;
}
.mv-slider__fixed .l-container { width: var(--container-w); }
.mv-slider__fixed .mv__sub,
.mv-slider__fixed .mv__actions { pointer-events: auto; }
.mv-slider__fixed .mv__sub {
  text-shadow: 0 2px 12px rgba(0, 0, 0, 0.5);
}

/* ロゴ透かし（スライダーでは控えめに） */
.mv--slider .mv__logo-watermark {
  position: absolute;
  right: -4%;
  top: 30%;
  width: min(46vw, 560px);
  height: auto;
  z-index: 2;
  opacity: 0.5;
  pointer-events: none;
}

/* 前後ボタン */
.mv-slider__arrow {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 4;
  width: 54px;
  height: 54px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.16);
  border: 1.5px solid rgba(255, 255, 255, 0.55);
  backdrop-filter: blur(4px);
  transition: background-color 0.3s var(--anim-ease),
              transform 0.3s var(--anim-ease);
}
.mv-slider__arrow svg { width: 22px; height: 22px; stroke: #fff; }
.mv-slider__arrow:hover {
  background: var(--c-blue);
  border-color: var(--c-blue);
}
.mv-slider__arrow--prev { left: 26px; }
.mv-slider__arrow--next { right: 26px; }
.mv-slider__arrow--prev:hover { transform: translateY(-50%) translateX(-3px); }
.mv-slider__arrow--next:hover { transform: translateY(-50%) translateX(3px); }

/* ドット（現在位置インジケータ） */
.mv-slider__dots {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 5%;
  z-index: 4;
  display: flex;
  justify-content: center;
  gap: 12px;
}
.mv-slider__dot {
  width: 36px;
  height: 4px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.35);
  border: none;
  cursor: pointer;
  transition: background-color 0.3s var(--anim-ease),
              width 0.3s var(--anim-ease);
}
.mv-slider__dot:hover { background: rgba(255, 255, 255, 0.6); }
.mv-slider__dot.is-active {
  width: 52px;
  background: var(--c-blue);
}

/* =========================================================
   7. タブレット調整（max-width: 900px）
   ========================================================= */
@media (max-width: 900px) {
  .mv-slider__arrow { width: 44px; height: 44px; }
  .mv-slider__arrow svg { width: 18px; height: 18px; }
  .mv-slider__arrow--prev { left: 12px; }
  .mv-slider__arrow--next { right: 12px; }
  .mv-slider__fixed { bottom: 14%; }
  .mv--slider .mv__logo-watermark { opacity: 0.40; width: 60vw; }
}

/* =========================================================
   8. スマホ最適化（max-width: 600px）
   スライダーを「縦1枚表示」に切り替える。
   絶対配置をやめ通常フローにすることで、
   キャッチコピーとサブコピーの重なりを原理的に防ぐ。
   ※このブロックはファイル末尾付近にまとめて配置すること。
   ========================================================= */
@media (max-width: 600px) {

  /* --- スライダー全体：高さは中身ぶんに --- */
  .mv--slider {
    min-height: 0;
    width: 100%;
    max-width: 100%;
    overflow: hidden;
    /* ↓ 子要素（track / fixed / dots）を縦に積む */
    display: flex;
    flex-direction: column;
  }
.mv-slider__track,
  .mv-slider__fixed,
  .mv-slider__dots {
    width: 100%;
    max-width: 100%;
    flex: 0 0 auto;
  }
  /* --- トラック：絶対配置・横並びを解除 --- */
  .mv-slider__track {
    position: static;
    display: block;
    width: 100%;
    height: auto;
    transform: none !important;   /* JSの translateX を無効化 */
  }

  /* --- スライド：アクティブな1枚だけ表示 --- */
  .mv-slide {
    display: none;
    position: relative;
    width: 100%;
    height: auto;
  }
  .mv-slide.is-active { display: block; }

  /* 背景・オーバーレイはスライド内に絶対配置で敷く */
  .mv-slide__bg,
  .mv-slide__overlay {
    position: absolute;
    inset: 0;
  }
  /* スマホは縦構図のため上下グラデで均一に締める */
  .mv-slide__overlay {
    background:
      linear-gradient(
        180deg,
        rgba(6, 24, 47, 0.35) 0%,
        rgba(6, 24, 47, 0.55) 50%,
        rgba(6, 24, 47, 0.82) 100%
      );
  }

  /* --- コピー領域：絶対配置をやめ通常フローに --- */
  .mv-slide__inner {
    position: relative;
    display: block;
    padding: 24vh 0 30px;
  }

  /* ★最重要：スマホではコピーを常に表示する
     （登場演出の opacity:0 が残るバグを打ち消す） */
  .mv-slide .mv__label,
  .mv-slide .mv__title .mv-line > span {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }

  /* --- サブコピー＋ボタン：通常フローでキャッチの下に --- */
  .mv-slider__fixed {
    position: relative;
    left: auto;
    right: auto;
    bottom: auto;
    margin-top: 20px;
    padding-bottom: 36px;
  }

  /* --- 操作UI：矢印は隠す（スワイプに集約） --- */
  .mv-slider__arrow { display: none; }

  /* ドットはスライド下に通常配置 */
  .mv-slider__dots {
    position: relative;
    left: auto;
    right: auto;
    bottom: auto;
    padding: 16px 0 26px;
  }
  /* スクロール表示はスマホでは省略 */
  .mv--slider .mv__scroll { display: none; }
}

/* =========================================================
   9. reduced-motion 対応
   「視差効果を減らす」設定の端末ではすべて即時表示
   ========================================================= */
@media (prefers-reduced-motion: reduce) {

  /* スクロール演出 */
  [data-anim="reveal"] > *,
  .c-heading[data-anim="heading"] .c-heading__en,
  .c-heading[data-anim="heading"] .c-heading__jp,
  [data-anim="rise"] {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
  [data-anim="image"] > img,
  [data-anim="image"] > .anim-inner {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
  }
  .c-heading[data-anim="heading"] .c-heading__jp::before {
    transform: translateX(-50%) scaleX(1) !important;
  }
  .c-heading[data-anim="heading"].c-heading--left .c-heading__jp::before {
    transform: scaleX(1) !important;
  }
  .scroll-progress { display: none; }
  .tilt-card { transform: none !important; }

  /* スライダー：ズーム・トラック遷移を無効化（切替は瞬時） */
  .mv-slider__track { transition: none !important; }
  .mv-slide__bg {
    animation: none !important;
    transform: scale(1.04) !important;
  }
  .mv-slide .mv__label,
  .mv-slide .mv__title .mv-line > span {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
}