/* =========================================================
   動画MV（ブレインフォレスト風・青ベース）＋ ローディング ＋ COMFORTズーム
   index.html 専用。style.css の後に読み込む。
   ========================================================= */
/* ローディング明けにスクロールバーが出て画面がガクっと横にずれるのを防ぐ：
   スクロールバーは最初から常に出しておく（ローディング中は body 側で高さを切って動かさない） */
html{overflow-y:scroll}
body.is-loading{overflow:hidden;height:100vh}

/* ===== ローディング ===== */
.ld{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(120% 120% at 50% 40%, #2f66e0 0%, #1f56cf 55%, #1a49b4 100%);
  transition:transform 1.05s cubic-bezier(.76,0,.24,1), opacity .6s ease .35s}
.ld.is-out{transform:translateY(-100%);opacity:0;pointer-events:none}
.ld__catch{font-family:"Noto Sans JP",sans-serif;font-weight:700;font-size:clamp(20px,3.2vw,38px);
  letter-spacing:.08em;color:#fff;white-space:nowrap;text-shadow:0 2px 30px rgba(63,134,240,.35)}
/* 青の地はそのまま。文字の出方と差し色だけ少しポップに（2026-09-30） */
.ld__in{position:relative;padding:28px 44px}
.ld__catch .c{display:inline-block;opacity:0;transform:translateY(18px) scale(.4);transform-origin:50% 90%}
.ld__catch .c.is-in{animation:ldPop .55s cubic-bezier(.3,1.5,.5,1) both}
@keyframes ldPop{0%{opacity:0;transform:translateY(18px) scale(.4)}
  55%{opacity:1;transform:translateY(-4px) scale(1.18)}
  78%{transform:translateY(0) scale(.94)}100%{opacity:1;transform:none}}
/* 画面全体に小さな図形を散らし、順番にぽんと出てふわふわ揺れる（中央の文字帯は避けて配置） */
.ld__shapes{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.ld__sh{position:absolute;left:var(--x);top:var(--y);width:var(--s);height:var(--s);margin:calc(var(--s)/-2) 0 0 calc(var(--s)/-2);
  opacity:0;transform:scale(0) rotate(var(--r))}
.ld__sh--dot{border-radius:50%;background:var(--c)}
.ld__sh--ring{border-radius:50%;border:4px solid var(--c);box-sizing:border-box}
.ld__sh--sq{border-radius:22%;background:var(--c)}
.ld__sh--tri{background:var(--c);clip-path:polygon(50% 6%,96% 90%,4% 90%)}
.ld.is-go .ld__sh{animation:ldDot .55s cubic-bezier(.3,1.6,.5,1) var(--d) forwards, ldBob 2.4s ease-in-out calc(var(--d) + .55s) infinite}
@keyframes ldDot{0%{opacity:0;transform:scale(0) rotate(var(--r))}60%{opacity:.95;transform:scale(1.35) rotate(var(--r))}100%{opacity:.95;transform:scale(1) rotate(var(--r))}}
@keyframes ldBob{0%,100%{opacity:.95;transform:translateY(0) rotate(var(--r))}50%{opacity:.95;transform:translateY(-8px) rotate(calc(var(--r) + 12deg))}}
@media (max-width:768px){.ld__sh{width:calc(var(--s)*.6);height:calc(var(--s)*.6);margin:calc(var(--s)*-.3) 0 0 calc(var(--s)*-.3)}}
/* 文字の後、PRIMES のロゴが左下から右上へ斜めに通り過ぎる（2026-10-01 斉藤様ご要望） */
.ld__logo{position:absolute;left:50%;top:50%;width:clamp(240px,38vw,620px);height:auto;z-index:2;pointer-events:none;
  opacity:0;transform:translate(-50%,-50%) rotate(-16deg) translateX(-110vw)}
.ld.is-sweep .ld__logo{animation:ldSweep 1.4s linear forwards}
/* 速く入って中央でゆっくり通過し、また速く抜ける（中央で一瞬ロゴが読める） */
@keyframes ldSweep{
  0%{opacity:1;transform:translate(-50%,-50%) rotate(-16deg) translateX(-110vw);animation-timing-function:cubic-bezier(.2,.7,.4,1)}
  35%{transform:translate(-50%,-50%) rotate(-16deg) translateX(-6vw);animation-timing-function:linear}
  65%{transform:translate(-50%,-50%) rotate(-16deg) translateX(6vw);animation-timing-function:cubic-bezier(.6,0,.8,.3)}
  100%{opacity:1;transform:translate(-50%,-50%) rotate(-16deg) translateX(110vw)}}
/* ロゴが入ってくると同時に文字がすっと消える */
.ld.is-sweep .ld__catch{transition:opacity .3s ease .2s;opacity:0}
/* 進捗バー：細い線 → 角丸の太めのバー（コーラル→イエロー） */
.ld__bar{position:absolute;left:0;bottom:0;height:5px;width:0;border-radius:0 5px 5px 0;
  background:linear-gradient(90deg,#ff6f5e,#ffc93c);transition:width 2.9s cubic-bezier(.4,0,.2,1)}
@media (prefers-reduced-motion:reduce){
  .ld__catch .c.is-in{animation:none;opacity:1;transform:none}
  .ld__sh{opacity:.95;transform:none;animation:none!important}
  .ld__logo{display:none}
}

/* ===== MV ===== */
/* ※ MV(.mvx) は index.html で <main> の外に置く。.main{overflow:hidden} 配下だと position:sticky が壊れるため */
/* 2026-09-15: 白フェード廃止。MV は 100vh の「固定背景」になり、
   後続の <main> がカードのように上へ覆い被さって出てくる（パララックス付き）。
   .mvx 自身を sticky にする（body が containing block なので最後まで貼り付く）。 */
.mvx{position:sticky;top:0;height:100vh;z-index:0;background:#eef2f8}
.mvx__sticky{position:relative;height:100%;overflow:hidden;isolation:isolate}
.mvx__video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0;
  filter:none;display:block;pointer-events:none}     /* Blender ローポリCG動画 (img/mv-city.mp4) */
/* 紙のグレイン（映像素材由来のノイズ感を再現） */
.mvx__paper{position:absolute;inset:0;z-index:1;pointer-events:none;opacity:.16;mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  background-size:170px 170px;animation:mvxGrain .8s steps(6) infinite}
@keyframes mvxGrain{0%{background-position:0 0}16%{background-position:-40px 24px}33%{background-position:28px -32px}
  50%{background-position:-24px 42px}66%{background-position:44px 10px}83%{background-position:-34px -22px}100%{background-position:0 0}}
/* 青を基調に、段々色づいて流れていく背景(2026-08-28 齋藤様ご要望)。
   色の周回はCGの1ループ(CYCLE_T)に同期させるため、mvwebgl.js が毎フレーム
   background-color を更新する(CSSアニメだとCGとズレるためJS駆動) */
.mvx__tint{position:absolute;inset:0;z-index:1;background-color:#1f56cf;mix-blend-mode:color}
/* 動画版: 動画の色をそのまま見せる。可読性は文字側（白フチ＋ハイライト帯）で担保するため
   シェードはごく薄いヴェールに留める(2026-09-15 齋藤様「もう少し明るく」) */
.mvx__shade{position:absolute;inset:0;z-index:2;display:none;
  background:linear-gradient(100deg, rgba(20,28,60,.16) 0%, rgba(20,28,60,.07) 45%, rgba(20,28,60,0) 72%)}
.mvx__grain{position:absolute;inset:0;z-index:2;
  background:radial-gradient(120% 120% at 72% 16%, rgba(255,255,255,.10), rgba(255,255,255,0) 45%)}

.mvx__inner{position:relative;z-index:3;height:100%;display:flex;flex-direction:column;justify-content:center;
  padding-left:clamp(20px,4vw,72px);padding-right:24px;will-change:opacity}
/* --- 英字は脇役（小さく・広いトラッキング・白） --- */
.mvx__big{font-family:"Oswald",sans-serif;font-weight:500;line-height:1;letter-spacing:.34em;color:#fff;
  font-size:clamp(12px,1.35vw,19px);margin:0 0 clamp(14px,1.8vw,24px);
}
.mvx__big .row{display:inline-block;margin-right:.5em}
.mvx__future{display:inline-block;color:#ffd36b;-webkit-text-fill-color:#ffd36b;
  transform:none!important}

/* --- 日本語コピーが主役 --- */
.mvx__jp{font-family:"Noto Sans JP",sans-serif;font-weight:900;line-height:1.28;
  font-size:clamp(28px,4.6vw,64px);letter-spacing:.01em;color:#fff;margin:0;
  text-shadow:0 0 14px rgba(12,21,48,.28)}
.mvx__jp .ln{display:block}
/* 白抜き角丸ハイライト帯（コーラル／イエロー） */
.mvx__hl{font-style:normal;display:inline-block;padding:.02em .28em .08em;border-radius:.42em;
  color:#fff;-webkit-text-fill-color:#fff;text-shadow:0 1px 0 rgba(0,0,0,.14);
  background:#ff6f5e;box-shadow:0 8px 22px rgba(255,111,94,.32);margin:0 .08em}
.mvx__hl--y{background:#ffc93c;color:#20306b;-webkit-text-fill-color:#20306b;
  text-shadow:none;box-shadow:0 8px 22px rgba(255,201,60,.35)}

/* --- 登場: 下から scale .6 → 1.15 → 1 のオーバーシュートでポップイン --- */
.mvx .pop{opacity:0;transform:translateY(10px)}
.mvx.is-ready .pop{animation:mvxPop 1.1s ease-out var(--d,0s) both}
@keyframes mvxPop{
  0%{opacity:0;transform:translateY(10px)}
  100%{opacity:1;transform:translateY(0)}
}

.scroll-hint{position:absolute;left:50%;bottom:8px;transform:translateX(-50%);z-index:4;color:#fff;
  font-size:11px;letter-spacing:.2em;font-family:"Oswald",sans-serif;opacity:.85;display:flex;flex-direction:column;align-items:center;gap:8px;transition:opacity .4s}
.scroll-hint::after{content:"";width:1px;height:42px;background:linear-gradient(#fff,transparent);animation:mvxSH 1.8s ease-in-out infinite}
.mvx.is-zoom .scroll-hint{opacity:0}
@keyframes mvxSH{0%{transform:scaleY(0);transform-origin:top}45%{transform:scaleY(1);transform-origin:top}55%{transform:scaleY(1);transform-origin:bottom}100%{transform:scaleY(0);transform-origin:bottom}}

/* .mvx__fill（白/青フェード）は 2026-09-15 に廃止（DOM ごと削除） */

/* ===== main = MV の上に乗り上がってくる白カード ===== */
.main{position:relative;z-index:1;background:#fff;
  border-radius:28px 28px 0 0;
  box-shadow:0 -14px 40px rgba(20,32,72,.16);
  will-change:transform}
.footer{position:relative;z-index:1}   /* MV より前面に（MV が sticky で最後まで残るため） */

/* ===== About: 青→白へ徐々に変化／文字は青。グラデは文字に被らないよう上部だけ（40vh）で白へ ===== */
.about--land{position:relative;background:#fff;padding-top:46vh}
.about--land::before{content:"";position:absolute;left:0;right:0;top:0;height:40vh;z-index:0;pointer-events:none;
  background:linear-gradient(180deg, #1c2b6e 0%, #2a47a0 30%, #6e92d8 60%, #c5d4f0 84%, rgba(255,255,255,0) 100%)}
.about--land .about__inner{position:relative;z-index:1}
.about--land .about__label{color:#2c438e}
.about--land .about__title{color:#1c2b6e}
.about--land .about__text{color:#33489a}
.about--land .en-head__b{color:rgba(28,43,110,.16)}
.about--land .more-btn{background:var(--c-blue-500)}
.about--land .more-btn__txt{color:#fff}   /* 会社概要ボタンの文字を白に */

/* PC：最後のカットで旗(画面上から約30〜50%)とコピーが重ならないよう、コピーを下寄せ（2026-09-25） */
@media (min-width:769px){
  .mvx__inner{justify-content:flex-end;padding-bottom:12vh}
}
@media (max-width:768px){
  .mvx{height:100vh}
  .main{border-radius:20px 20px 0 0}
  .mvx__big{font-size:11px;letter-spacing:.3em}
  /* iPhone Safari は 100vh がツールバーの下まで含み、下端の SCROLL が隠れてコピーに寄って見えるので、
     見えている高さ(svh)で組む。コピー位置は従来どおり */
  .mvx,.mvx__sticky{height:100svh}
  .mvx__inner{justify-content:flex-end;padding-bottom:14svh}
  .scroll-hint::after{height:26px}
  .mvx__jp{font-size:clamp(19px,6.5vw,34px)}
  .mvx__jp .ln{white-space:nowrap}   /* 1行目「都市の快適空間を実現する、」を途中で折り返さない */
  .about--land{padding-top:42vh}
  .about--land::before{height:36vh}
}

@media (prefers-reduced-motion:reduce){
  .ld__catch .c{opacity:1;transform:none}
  .mvx__future{transform:none!important}
  .mvx .pop,.mvx.is-ready .pop{opacity:1!important;transform:none!important;animation:none!important}
  .main{transform:none!important}
}
