/* ============================================================
   NEiGHBOR FLOW — site-wide FX (v2)
   Loaded via <link> after each page's inline <style>, so these
   rules override the per-page reveal/stagger defaults.
   ============================================================ */

/* Reveal-on-scroll — blur clears + translate up + fade */
.reveal{
  opacity:0;
  transform: translate3d(0, 32px, 0);
  filter: blur(8px);
  transition:
    opacity 1.05s cubic-bezier(.2,.7,.2,1),
    transform 1.05s cubic-bezier(.2,.7,.2,1),
    filter .8s cubic-bezier(.2,.7,.2,1);
  will-change: opacity, transform, filter;
}
.reveal.in{ opacity:1; transform:none; filter:none; }

/* Stagger — children sequentially with subtle blur */
.stagger > *{
  opacity:0;
  transform: translate3d(0, 28px, 0);
  filter: blur(6px);
  transition:
    opacity .9s cubic-bezier(.2,.7,.2,1),
    transform .9s cubic-bezier(.2,.7,.2,1),
    filter .7s cubic-bezier(.2,.7,.2,1);
  will-change: opacity, transform, filter;
}
.stagger.in > *:nth-child(1){ transition-delay: 0s }
.stagger.in > *:nth-child(2){ transition-delay: .07s }
.stagger.in > *:nth-child(3){ transition-delay: .14s }
.stagger.in > *:nth-child(4){ transition-delay: .21s }
.stagger.in > *:nth-child(5){ transition-delay: .28s }
.stagger.in > *:nth-child(6){ transition-delay: .35s }
.stagger.in > *:nth-child(7){ transition-delay: .42s }
.stagger.in > *:nth-child(8){ transition-delay: .49s }
.stagger.in > *:nth-child(9){ transition-delay: .56s }
.stagger.in > *:nth-child(n+10){ transition-delay: .63s }
.stagger.in > *{ opacity:1; transform:none; filter:none }

/* For very large grids (works page, member detail Works section) — skip the stagger entirely */
.works-page-grid.stagger > *,
.works-page-grid > *,
.member-works-grid.stagger > *,
.member-works-grid > *{
  opacity: 1 !important;
  transform: none !important;
  filter: none !important;
  transition-delay: 0s !important;
}

/* Inline reveal-from-side — subtle horizontal slide for editorial blocks */
.reveal-x{
  opacity:0;
  transform: translate3d(-26px, 0, 0);
  filter: blur(6px);
  transition:
    opacity 1s cubic-bezier(.2,.7,.2,1),
    transform 1s cubic-bezier(.2,.7,.2,1),
    filter .7s ease;
}
.reveal-x.in{ opacity:1; transform:none; filter:none }

/* Section-title mask reveal — characters slide up from below an invisible line,
   with a subtle skew that resolves to vertical. */
.fx-mask-text{
  display: inline-block;
  vertical-align: bottom;
}
.fx-mask-text .char-mask{
  display: inline-block;
  overflow: hidden;
  vertical-align: bottom;
  line-height: .92;
  padding-bottom: .14em;
  margin-bottom: -.14em;
}
.fx-mask-text .char{
  display: inline-block;
  transform: translate3d(0, 110%, 0) skewY(6deg);
  transform-origin: 0 100%;
  transition: transform 1s cubic-bezier(.7, 0, .2, 1);
  will-change: transform;
}
.reveal.in .fx-mask-text .char,
.fx-mask-text.in .char{
  transform: translate3d(0, 0, 0) skewY(0);
}

@media (prefers-reduced-motion: reduce){
  .reveal, .reveal-x, .stagger > *{
    opacity:1 !important;
    transform:none !important;
    filter:none !important;
    transition:none !important;
  }
  .fx-mask-text .char{ transform:none !important; transition:none !important }
}
