/* Continuous hero motion with an inexpensive CSS fallback on every screen. */
.hero{isolation:isolate}
.hero>.shell{position:relative;z-index:1}
.hero:before{background-size:140% 140%!important;animation:fr-aurora 19s ease-in-out infinite alternate}
.hero:after{animation:fr-grid 36s linear infinite}
.hero-loop-field{position:absolute;inset:0;z-index:-1;overflow:hidden;pointer-events:none;opacity:.75}
.hero-loop-field i{position:absolute;display:block;border-radius:50%;will-change:transform,opacity}
.hero-loop-field .fr-glow-a{width:min(70vw,860px);aspect-ratio:1;right:-14%;top:-57%;background:radial-gradient(circle,#56c2ca49 0%,#3286a123 40%,transparent 72%);filter:blur(30px);animation:fr-drift-a 16s ease-in-out infinite alternate}
.hero-loop-field .fr-glow-b{width:min(65vw,770px);aspect-ratio:1;left:-25%;bottom:-105%;background:radial-gradient(circle,#9be4d526 0%,#1c718124 42%,transparent 75%);filter:blur(25px);animation:fr-drift-b 20s ease-in-out infinite alternate}
.hero-loop-field .fr-ring{width:min(56vw,700px);aspect-ratio:1;right:3%;top:4%;border:1px solid #a1e7e526;box-shadow:0 0 0 45px #97e4e409,0 0 0 110px #97e4e407;animation:fr-breathe 13s ease-in-out infinite}
.hero-loop-field .fr-orbit{width:11px;height:11px;right:24%;top:22%;background:#b9f6ea;box-shadow:0 0 12px 4px #94e7e9a3;animation:fr-orbit 17s linear infinite;transform-origin:-210px 155px}
.hero-loop-field .fr-orbit:nth-child(5){width:7px;height:7px;right:15%;top:47%;background:#93dbe8;opacity:.7;animation-duration:23s;animation-direction:reverse;transform-origin:-145px -85px}
.hero-loop-field .fr-sweep{width:140%;height:40%;left:-20%;top:25%;border-radius:0;background:linear-gradient(105deg,transparent 33%,#6fdfdd16 48%,transparent 61%);transform:rotate(-13deg);animation:fr-sweep 18s ease-in-out infinite}
.hero[data-banner="toolkit"] .fr-glow-a{background:radial-gradient(circle,#93d8d95c,#3c819e28 44%,transparent 75%)}
.hero[data-banner="expertise"] .fr-glow-a{background:radial-gradient(circle,#71bfa552,#4996ad22 40%,transparent 72%)}
.hero[data-banner="roadmap"] .fr-glow-a{background:radial-gradient(circle,#b5d7ee42,#398fa226 42%,transparent 72%)}
/* Continue the existing financial line art instead of allowing its first pass to stop. */
.hero .banner-visual{opacity:.38}
.hero .banner-visual .bv-trend{animation:fr-trace 10s ease-in-out infinite!important}
.hero .banner-visual .bv-bar{animation:fr-bar 4.5s var(--delay,0s) ease-in-out infinite alternate!important}
.hero .banner-visual .bv-halo{animation:bv-pulse 4.2s var(--delay,0s) ease-in-out infinite!important}
.hero .banner-visual .bv-doc-front{animation:bv-float 7s ease-in-out infinite!important}
.hero .banner-visual .bv-seal{animation:bv-float 6s .8s ease-in-out infinite!important}
.hero .banner-visual .bv-orbits{animation:bv-orbit 38s linear infinite!important}
.hero .banner-visual .bv-milestone{animation:fr-node 4s var(--delay,0s) ease-in-out infinite alternate!important}
.hero .banner-visual .bv-check{animation:fr-node 3.5s var(--delay,0s) ease-in-out infinite alternate!important}
/* Preserve the existing pause while the banner is off screen. */
.hero .banner-visual *{animation-play-state:paused!important}
.hero.banner-in-view .banner-visual *{animation-play-state:running!important}
.fx-tab-hidden .hero-loop-field *,.fx-tab-hidden .hero:before,.fx-tab-hidden .hero:after{animation-play-state:paused!important}
@keyframes fr-aurora{0%{background-position:0% 0%}50%{background-position:55% 45%}100%{background-position:100% 100%}}
@keyframes fr-grid{to{background-position:100px 70px}}
@keyframes fr-drift-a{from{transform:translate3d(-8%,8%,0) scale(.88)}to{transform:translate3d(10%,-8%,0) scale(1.18)}}
@keyframes fr-drift-b{from{transform:translate3d(8%,-7%,0) scale(1.04)}to{transform:translate3d(-10%,9%,0) scale(.9)}}
@keyframes fr-breathe{0%,100%{transform:scale(.92);opacity:.5}50%{transform:scale(1.12);opacity:.95}}
@keyframes fr-orbit{to{transform:rotate(360deg)}}
@keyframes fr-sweep{0%,100%{transform:translateX(-22%) rotate(-13deg);opacity:.12}50%{transform:translateX(18%) rotate(-13deg);opacity:.7}}
@keyframes fr-trace{0%,100%{stroke-dashoffset:1600;opacity:0}20%,66%{stroke-dashoffset:0;opacity:1}90%{stroke-dashoffset:-1600;opacity:0}}
@keyframes fr-bar{from{transform:scaleY(.58);opacity:.5}to{transform:scaleY(1);opacity:1}}
@keyframes fr-node{from{opacity:.35}to{opacity:1}}
@media(max-width:760px){
 .hero:before{background-size:170% 170%!important;animation-duration:14s}
 .hero-loop-field{opacity:.78}
 .hero-loop-field .fr-glow-a{width:125vw;right:-72%;top:-20%;filter:blur(12px);animation-duration:12s}
 .hero-loop-field .fr-glow-b{width:112vw;left:-60%;bottom:-25%;filter:blur(12px);animation-duration:15s}
 .hero-loop-field .fr-ring{width:105vw;right:-65%;top:23%;opacity:.42}
 .hero-loop-field .fr-orbit{right:0;top:40%;opacity:.65;transform-origin:-90px 45px}
 .hero-loop-field .fr-sweep{width:170%;left:-45%;top:42%;opacity:.42}
 .hero .banner-visual{opacity:.31;mask-image:linear-gradient(to right,transparent 5%,#000 70%)}
 .hero .banner-visual svg{right:-42%;width:135%;min-width:480px}
 .hero[data-banner] .hero-webgl{opacity:.55}
}
@media(max-width:460px){.hero .banner-visual{opacity:.28}.hero-loop-field .fr-ring{opacity:.28}.hero[data-banner] .hero-webgl{opacity:.48}}
@media(prefers-reduced-motion:reduce){.hero:before,.hero:after,.hero-loop-field *,.hero .banner-visual *{animation:none!important}.hero-loop-field .fr-orbit,.hero-loop-field .fr-sweep{display:none}.hero .banner-visual .bv-trend{stroke-dashoffset:0!important}}
