/* preloader */
.tc-preloader{
  position:fixed; inset:0; z-index:99999;
  display:none;
  flex-direction:column; align-items:center; justify-content:center; gap:14px;
  background:var(--white);
}
.tc-js .tc-preloader{ display:flex; } /* JS無効時は出さない */

.tc-preloader__stage{ position:relative; width:140px; height:140px;
  display:flex; align-items:flex-end; justify-content:center; }
.tc-preloader__chara{ width:clamp(96px,16vw,124px); height:auto;
  animation: tcCharaIn .55s cubic-bezier(.2,.8,.3,1) both, tcFloat 3.6s ease-in-out .55s infinite; }
.tc-preloader__shadow{ position:absolute; bottom:2px; left:50%; width:72px; height:12px;
  background:rgba(0,120,80,.14); border-radius:50%; transform:translateX(-50%); filter:blur(1px); z-index:-1; }
.tc-preloader__text{ color:#009967; font-weight:700; letter-spacing:.09em; font-size:14px; }
.tc-preloader__text span{ opacity:.25; animation:tcBlink 1.3s steps(1) infinite; }
.tc-preloader__text span:nth-child(2){ animation-delay:.22s }
.tc-preloader__text span:nth-child(3){ animation-delay:.44s }

@keyframes tcCharaIn{ from{opacity:0; transform:translateY(10px) scale(.96);} to{opacity:1; transform:none;} }
@keyframes tcFloat{ 0%,100%{transform:translateY(0);} 50%{transform:translateY(-5px);} }
@keyframes tcBlink{ 0%{opacity:1} 50%,100%{opacity:.25} }

body.tc-loading{ overflow:hidden; }

/* FV 初期状態（JS有効時のみ） */
.tc-js #brx-content{ opacity:0; }
.tc-js #brx-header{ opacity:0; will-change:opacity, top; }
.tc-js #brxe-dmdsut,
.tc-js #brxe-frshhb,
.tc-js #brxe-vvpezw{ opacity:0; }

/* 対象要素に .flow_animation を付与 */
@keyframes tcFloatY{ 0%,100%{ transform:translateY(0);} 50%{ transform:translateY(-4px);} }
.flow_animation{ animation: tcFloatY 5s ease-in-out infinite; }
.flow_animation.flow_delay{ animation-delay:-2.5s; } /* 位相ずらし */

@media (prefers-reduced-motion:reduce){
  .tc-preloader__chara,.tc-preloader__text span{ animation:none!important; }
  .flow_animation{ animation:none!important; }
  .tc-js #brx-content,.tc-js #brx-header,
  .tc-js #brxe-dmdsut,.tc-js #brxe-frshhb,.tc-js #brxe-vvpezw{ opacity:1!important; transform:none!important; }
}