/* buildcontrol — Scroll-reveal animation.

   Driven by `animation` rather than `transition` on purpose. Several revealed
   elements (.mod-card, .how-step, .cap, .cs-card) declare their own `transition`
   shorthand for their hover lift, which replaced the reveal's transition and
   left opacity snapping from 0 to 1 with no fade. `animation` is a separate
   property, so the entrance and the hover effect no longer compete.

   The `backwards` fill mode holds the opening frame through the stagger delay
   and then stops applying once the entrance has played, which leaves `transform`
   free for the hover lift afterwards. The keyframe deliberately declares only
   `from`, so each element animates towards its own resting style rather than
   being forced to `transform:none`. */
@media (prefers-reduced-motion: no-preference){
  .rv{opacity:0}
  .rv.in{opacity:1;animation:rv-in .6s cubic-bezier(.2,.7,.3,1) backwards}

  /* stagger direct children of grids WITHOUT tagging them */
  .rv-stag > *{opacity:0}
  .rv-stag.in > *{opacity:1;animation:rv-in .55s cubic-bezier(.2,.7,.3,1) backwards}
  .rv-stag.in > *:nth-child(1){animation-delay:.05s}
  .rv-stag.in > *:nth-child(2){animation-delay:.12s}
  .rv-stag.in > *:nth-child(3){animation-delay:.19s}
  .rv-stag.in > *:nth-child(4){animation-delay:.26s}
  .rv-stag.in > *:nth-child(5){animation-delay:.33s}
  .rv-stag.in > *:nth-child(6){animation-delay:.40s}

  @keyframes rv-in{from{opacity:0;transform:translateY(20px)}}
}
