/* Opt-in desktop entrances. JavaScript annotates ordinary content only; the
   hero, scroll stages, initiative slots and Upcoming sequence remain separate.
   Keyframes leave existing transitions and saved individual `translate` intact. */
@media (min-width:1025px) and (prefers-reduced-motion:no-preference){
  body.home-floating-nav [data-home-entrance]:where(:not(.is-content-entered):not(.is-content-instant)){
    opacity:0;
    transform:translate3d(0,24px,0);
  }
  body.home-floating-nav [data-home-entrance="card"]:where(:not(.is-content-entered):not(.is-content-instant)){
    opacity:1;
    transform:translate3d(0,calc(100% + 24px),0);
  }
  body.home-floating-nav .intro-cards:has([data-home-entrance="card"]){overflow:clip}
  /* Multi-row cards need their own temporary clip so a sliding first row
     cannot paint over the second. Their stationary grid is the IO trigger. */
  body.home-floating-nav :where(.spa2030-priority)[data-home-entrance="card"]:where(:not(.is-content-entered):not(.is-content-instant)){
    clip-path:inset(0 0 100% 0);
  }
  /* Clip only during the animation, not while awaiting intersection. An empty
     initial clip must never prevent the media frame from entering the observer. */

  body.home-floating-nav [data-home-entrance].is-content-entered{
    animation-name:spa-home-content-text-in;
    animation-duration:900ms;
    animation-timing-function:cubic-bezier(.22,1,.36,1);
    animation-delay:var(--content-enter-delay,0ms);
    animation-iteration-count:1;
    /* Keep the start pose during its stagger, then release animation styles
       after arrival so link hover and the normal media outline remain intact. */
    animation-fill-mode:backwards;
  }
  body.home-floating-nav [data-home-entrance="card"].is-content-entered{
    opacity:1;
    animation-name:spa-home-content-card-in;
    animation-duration:1100ms;
  }
  body.home-floating-nav :where(.spa2030-priority)[data-home-entrance="card"].is-content-entered{
    animation-name:spa-home-content-grid-card-in;
  }
  body.home-floating-nav [data-home-entrance="media"].is-content-entered{
    animation-name:spa-home-content-media-in;
    animation-duration:1100ms;
  }

  /* Never hide a keyboard destination or clip its focus ring, including while
     an entrance is queued. No transition declarations override the site UI. */
  body.home-floating-nav [data-home-entrance].is-content-instant,
  body.home-floating-nav [data-home-entrance]:focus,
  body.home-floating-nav [data-home-entrance]:focus-within{
    opacity:1;
    transform:none;
    clip-path:none;
    animation:none;
  }

  @keyframes spa-home-content-text-in{
    from{opacity:0;transform:translate3d(0,24px,0)}
    to{opacity:1;transform:translate3d(0,0,0)}
  }
  @keyframes spa-home-content-card-in{
    from{transform:translate3d(0,calc(100% + 24px),0)}
    to{transform:translate3d(0,0,0)}
  }
  @keyframes spa-home-content-grid-card-in{
    from{transform:translate3d(0,calc(100% + 24px),0);clip-path:inset(0 0 calc(100% + 24px) 0)}
    to{transform:translate3d(0,0,0);clip-path:inset(0)}
  }
  @keyframes spa-home-content-media-in{
    from{opacity:0;transform:translate3d(0,24px,0);clip-path:inset(0 0 100% 0)}
    to{opacity:1;transform:translate3d(0,0,0);clip-path:inset(0 0 0 0)}
  }
}
