/* Only opacity / transform for entrances. CSS animations always finish visible.
   Nothing is hidden by .js alone: a failed module leaves all content readable. */
@keyframes finrec-reveal{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
@keyframes finrec-header{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}
.js.motion-ready .brand,.js.motion-ready .primary-navigation,.js.motion-ready .header-access{animation:finrec-header 500ms var(--ease) both}
.js.motion-ready [data-reveal]{animation:finrec-reveal 600ms var(--ease) both}
.js.motion-ready [data-reveal="eyebrow"]{animation-delay:80ms}
.js.motion-ready [data-reveal="title-0"]{animation-delay:160ms}
.js.motion-ready [data-reveal="title-1"]{animation-delay:240ms}
.js.motion-ready [data-reveal="title-2"]{animation-delay:320ms}
.js.motion-ready [data-reveal="intro"]{animation-delay:400ms}
.js.motion-ready [data-reveal="callout"]{animation-delay:480ms}
.js.motion-ready [data-reveal="actions"]{animation-delay:560ms}
/* Keyboard users never wait for a control to become visible. */
.js.motion-ready .hero-actions:focus-within,.js.motion-ready .primary-navigation:focus-within,.js.motion-ready .header-access:focus-within,.js.motion-ready .brand:focus{animation:none}
@media(prefers-reduced-motion:reduce){
 html{scroll-behavior:auto}
 *,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
 .hero-orbit,.hero-disc{transform:none!important}
}
