/* text fx */
.tfx .w {
  display: inline-block;
  white-space: nowrap;
  vertical-align: baseline;
  padding-bottom: 0.22em;
  margin-bottom: -0.22em;
  overflow: visible;
}
.tfx .u {
  display: inline-block;
  vertical-align: baseline;
  padding-bottom: 0.22em;
  margin-bottom: -0.22em;
  padding-top: 0.08em;
  margin-top: -0.08em;
  overflow: visible;
  will-change: transform, opacity, filter;
  backface-visibility: hidden;
}

/* --- BlurText ------------------------------------------------------------
   from: blur(10px) · opacity 0 · y -50%  →  blur(5px) · .5 · y 5%  →  0  */
.tfx--blur .u { opacity: 0; filter: blur(10px); transform: translate3d(0, -0.5em, 0); }
.tfx--blur.from-bottom .u { transform: translate3d(0, 0.5em, 0); }

.is-in .tfx--blur .u,
.is-out .tfx--blur .u {
  animation: tfxBlur 0.75s cubic-bezier(0.25, 1, 0.5, 1) both;
  animation-delay: calc(var(--d0, 0ms) + var(--i) * var(--stagger, 140ms));
}
.is-in .tfx--blur.from-bottom .u,
.is-out .tfx--blur.from-bottom .u { animation-name: tfxBlurUp; }

@keyframes tfxBlur {
  0% { opacity: 0; filter: blur(10px); transform: translate3d(0, -0.5em, 0); }
  50% { opacity: 0.5; filter: blur(5px); transform: translate3d(0, 0.05em, 0); }
  100% { opacity: 1; filter: blur(0); transform: none; }
}
@keyframes tfxBlurUp {
  0% { opacity: 0; filter: blur(10px); transform: translate3d(0, 0.5em, 0); }
  50% { opacity: 0.5; filter: blur(5px); transform: translate3d(0, -0.05em, 0); }
  100% { opacity: 1; filter: blur(0); transform: none; }
}

/* --- FoldText -------------------------------------------------------------
   Üst menteşeden katlanan harfler; katlanma sırasında kırışık gölgesi. */
.tfx--fold .w { perspective: 700px; overflow: visible; }
.tfx--fold .u { opacity: 0; transform-origin: 50% 0%; transform: rotateX(-92deg); }

.is-in .tfx--fold .u,
.is-out .tfx--fold .u {
  animation: tfxFold 0.95s cubic-bezier(0.2, 0.85, 0.25, 1) both;
  animation-delay: calc(var(--d0, 0ms) + var(--i) * var(--stagger, 45ms));
}

@keyframes tfxFold {
  0% { opacity: 0; transform: rotateX(-92deg) translateZ(0); filter: brightness(0.35); }
  35% { opacity: 1; }
  68% { transform: rotateX(14deg); filter: brightness(1.18); }
  100% { opacity: 1; transform: rotateX(0); filter: brightness(1); }
}

/* --- StaggeredText --------------------------------------------------------
   Harfler bulunduğu kenardan kayarak, bulanıklıktan netleşerek dizilir. */
.tfx--stagger .u { opacity: 0; transform: translate3d(var(--sx, -0.6em), 0.55em, 0); filter: blur(8px); }

.is-in .tfx--stagger .u,
.is-out .tfx--stagger .u {
  animation: tfxStagger 0.8s cubic-bezier(0.16, 1, 0.3, 1) both;
  animation-delay: calc(var(--d0, 0ms) + var(--i) * var(--stagger, 28ms));
}

@keyframes tfxStagger {
  0% { opacity: 0; transform: translate3d(var(--sx, -0.6em), 0.55em, 0); filter: blur(8px); }
  60% { opacity: 1; filter: blur(0); }
  100% { opacity: 1; transform: none; filter: blur(0); }
}

/* --- ScrollReveal ---------------------------------------------------------
   Opaklık / blur / rotasyon JS tarafından scroll ilerlemesine bağlanır. */
.tfx--reveal { transform-origin: 0% 50%; will-change: transform; }
.tfx--reveal .u { opacity: 0.1; filter: blur(4px); transition: none; }

/* --- Shared: subtitle + eyebrow line ------------------------------------ */
.fx-sub {
  opacity: 0;
  filter: blur(8px);
  transform: translate3d(0, 0.6rem, 0);
  transition: opacity 0.9s var(--ease-out), filter 0.9s var(--ease-out), transform 0.9s var(--ease-out);
}
.is-in .fx-sub,
.is-out .fx-sub {
  opacity: 1;
  filter: blur(0);
  transform: none;
  transition-delay: var(--sub-delay, 0.65s);
}

@media (prefers-reduced-motion: reduce) {
  .tfx .u { animation: none !important; opacity: 1 !important; transform: none !important; filter: none !important; }
  .fx-sub { opacity: 1; filter: none; transform: none; }
}
