/* Glow Horizon — adapted from ahammed.bashar9 / 21st.dev.
   Original React source retained under references/glow-horizon.
   Entry on every document load. No scroll listener or persistent visit flag. */
:root{--hero-enter-ease:cubic-bezier(.23,1,.32,1)}
.home-campaign .campaign-hero{isolation:isolate;position:relative}
.glow-horizon{position:absolute;top:0;left:0;width:100%;height:490px;overflow:hidden;pointer-events:none;z-index:0;opacity:.7}
.glow-horizon-motion{position:absolute;width:100%;height:100%;isolation:isolate;transform:translateY(-50%);animation:horizon-enter 2s var(--hero-enter-ease) both}
.glow-arc{position:absolute;inset:0;border-radius:100%;pointer-events:none}
.glow-edge{background:#fff;box-shadow:0 -4px 23px #ffffffb5;transform:scale(1.32);animation:horizon-edge 2s var(--hero-enter-ease) 1.2s both}
.glow-cyan{background:#02dbf3;filter:blur(31px);transform:scale(1.20);animation:horizon-cyan 2s var(--hero-enter-ease) .6s both}
.glow-blue{background:#001ab9;filter:blur(21px);transform:scale(1.24);animation:horizon-blue 2s var(--hero-enter-ease) both}
.glow-surface{background:#f3f5fa;filter:blur(51px);transform:scale(1.20);animation:horizon-surface 2s var(--hero-enter-ease) both}
.home-campaign .campaign-hero-grid,.home-campaign .campaign-baseline{position:relative;z-index:1}
.home-campaign .campaign-copy>.campaign-kicker,.home-campaign .campaign-copy>h1,.home-campaign .campaign-copy>p,.home-campaign .campaign-actions,.home-campaign .campaign-proof{animation:glow-content-enter .8s var(--hero-enter-ease) both}
.home-campaign .campaign-copy>.campaign-kicker{animation-delay:.1s}.home-campaign .campaign-copy>h1{animation-delay:.18s}.home-campaign .campaign-copy>p{animation-delay:.26s}.home-campaign .campaign-actions{animation-delay:.34s}.home-campaign .campaign-proof{animation-delay:.42s}
@keyframes horizon-enter{from{opacity:0;transform:translateY(-100%) scaleY(1.5)}to{opacity:1;transform:translateY(-50%) scaleY(1)}}
@keyframes horizon-edge{from{opacity:0;transform:scale(1.32)}to{opacity:1;transform:scale(1.32)}}
@keyframes horizon-cyan{from{transform:translateY(-40%) scale(1.20)}to{transform:translateY(0) scale(1.20)}}
@keyframes horizon-blue{from{transform:translateY(-40%) scale(1.24)}to{transform:translateY(0) scale(1.24)}}
@keyframes horizon-surface{from{transform:translateY(-40%) scale(1.20)}to{transform:translateY(0) scale(1.20)}}
@keyframes glow-content-enter{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}
@keyframes glow-panel-enter{from{opacity:0;transform:translateY(24px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}
@media(max-width:650px){.glow-horizon{height:370px;width:160%;left:-30%;opacity:.5}}
@media(prefers-reduced-motion:reduce){.home-campaign .glow-horizon-motion,.home-campaign .glow-arc,.home-campaign .campaign-copy>.campaign-kicker,.home-campaign .campaign-copy>h1,.home-campaign .campaign-copy>p,.home-campaign .campaign-actions,.home-campaign .campaign-proof{animation:none!important}.glow-horizon{opacity:.3}}

/* A quiet gravitational field pulls the site's star motif into the hero. */
.hero-vortex{position:absolute;z-index:0;inset:auto 0 -48px;height:390px;overflow:hidden;pointer-events:none;perspective:700px;opacity:.92}
.vortex-grid{position:absolute;left:50%;bottom:-120px;width:150%;height:430px;transform:translateX(-50%) rotateX(67deg);transform-origin:center bottom;border-radius:50%;background:repeating-radial-gradient(ellipse at center,transparent 0 27px,rgba(0,26,185,.11) 28px 29px),repeating-conic-gradient(from 0deg,rgba(2,139,220,.12) 0 1deg,transparent 1deg 10deg);mask-image:linear-gradient(to top,#000 25%,rgba(0,0,0,.8) 58%,transparent 94%)}
.vortex-well{position:absolute;left:50%;bottom:8px;width:390px;height:112px;transform:translateX(-50%);border-radius:50%;background:radial-gradient(ellipse at center,#01030f 0 31%,#020921 36%,#001ab9 48%,rgba(2,219,243,.48) 52%,rgba(2,139,220,.12) 63%,transparent 72%);filter:drop-shadow(0 0 30px rgba(2,139,220,.28))}
.vortex-well i{position:absolute;inset:50%;width:520px;height:142px;border:1px solid rgba(2,139,220,.2);border-radius:50%;transform:translate(-50%,-50%)}
.vortex-well i:nth-child(2){width:650px;height:184px;border-color:rgba(0,26,185,.14)}
.vortex-well i:nth-child(3){width:790px;height:226px;border-color:rgba(2,139,220,.1)}
.vortex-well b{position:absolute;left:50%;top:50%;width:86px;height:22px;border-radius:50%;background:#00020a;box-shadow:0 0 20px 8px rgba(0,26,185,.2),0 0 38px 12px rgba(2,219,243,.12);transform:translate(-50%,-50%)}
.vortex-stars span{position:absolute;left:50%;top:50%;color:#078edc;font-size:var(--size);line-height:1;text-shadow:0 0 12px rgba(2,219,243,.65);opacity:0;animation:vortex-pull var(--duration) linear infinite;animation-delay:var(--delay);transform:translate(var(--x),var(--y)) scale(1)}
.vortex-stars span:nth-child(1){--x:-540px;--y:-90px;--size:18px;--duration:9s;--delay:-1s}.vortex-stars span:nth-child(2){--x:510px;--y:-118px;--size:14px;--duration:11s;--delay:-7s}.vortex-stars span:nth-child(3){--x:-420px;--y:30px;--size:12px;--duration:8s;--delay:-5s}.vortex-stars span:nth-child(4){--x:390px;--y:-22px;--size:16px;--duration:10s;--delay:-3s}.vortex-stars span:nth-child(5){--x:-300px;--y:-145px;--size:10px;--duration:12s;--delay:-8s}.vortex-stars span:nth-child(6){--x:270px;--y:-150px;--size:13px;--duration:9s;--delay:-6s}.vortex-stars span:nth-child(7){--x:-650px;--y:-15px;--size:11px;--duration:13s;--delay:-4s}.vortex-stars span:nth-child(8){--x:625px;--y:12px;--size:17px;--duration:12s;--delay:-10s}.vortex-stars span:nth-child(9){--x:-190px;--y:-72px;--size:9px;--duration:8s;--delay:-2s}.vortex-stars span:nth-child(10){--x:165px;--y:-68px;--size:12px;--duration:10s;--delay:-9s}.vortex-stars span:nth-child(11){--x:-470px;--y:-180px;--size:13px;--duration:11s;--delay:-5s}.vortex-stars span:nth-child(12){--x:455px;--y:-175px;--size:10px;--duration:9s;--delay:-4s}
@keyframes vortex-pull{
 0%{opacity:0;transform:translate(var(--x),var(--y)) scale(1) rotate(0deg)}
 10%{opacity:.82}
 48%{opacity:.8;transform:translate(var(--mid),calc(var(--y) + 92px)) scale(.88) rotate(30deg)}
 76%{opacity:.74;transform:translate(var(--bend),calc(var(--y) + 155px)) scale(.58) rotate(105deg)}
 90%{opacity:.58;transform:translate(var(--inner),150px) scale(.34) rotate(165deg)}
 100%{opacity:0;transform:translate(0,120px) scale(.08) rotate(235deg)}
}
.vortex-stars span:nth-child(1){--bend:-260px;--inner:-92px}.vortex-stars span:nth-child(2){--bend:245px;--inner:86px}
.vortex-stars span:nth-child(3){--bend:-205px;--inner:-72px}.vortex-stars span:nth-child(4){--bend:190px;--inner:66px}
.vortex-stars span:nth-child(5){--bend:-150px;--inner:-52px}.vortex-stars span:nth-child(6){--bend:138px;--inner:48px}
.vortex-stars span:nth-child(7){--bend:-310px;--inner:-108px}.vortex-stars span:nth-child(8){--bend:300px;--inner:104px}
.vortex-stars span:nth-child(9){--bend:-92px;--inner:-32px}.vortex-stars span:nth-child(10){--bend:80px;--inner:28px}
.vortex-stars span:nth-child(11){--bend:-225px;--inner:-78px}.vortex-stars span:nth-child(12){--bend:218px;--inner:76px}
.vortex-stars span:nth-child(1){--mid:-425px}.vortex-stars span:nth-child(2){--mid:402px}.vortex-stars span:nth-child(3){--mid:-332px}.vortex-stars span:nth-child(4){--mid:310px}
.vortex-stars span:nth-child(5){--mid:-236px}.vortex-stars span:nth-child(6){--mid:214px}.vortex-stars span:nth-child(7){--mid:-505px}.vortex-stars span:nth-child(8){--mid:486px}
.vortex-stars span:nth-child(9){--mid:-146px}.vortex-stars span:nth-child(10){--mid:126px}.vortex-stars span:nth-child(11){--mid:-370px}.vortex-stars span:nth-child(12){--mid:356px}
.vortex-stars span:nth-child(13){--x:-590px;--y:-150px;--mid:-462px;--bend:-285px;--inner:-98px;--size:11px;--duration:10.5s;--delay:-8.8s}
.vortex-stars span:nth-child(14){--x:575px;--y:-82px;--mid:452px;--bend:278px;--inner:96px;--size:15px;--duration:12.5s;--delay:-2.2s}
.vortex-stars span:nth-child(15){--x:-350px;--y:-205px;--mid:-274px;--bend:-168px;--inner:-58px;--size:9px;--duration:8.8s;--delay:-6.7s}
.vortex-stars span:nth-child(16){--x:330px;--y:-190px;--mid:258px;--bend:158px;--inner:55px;--size:12px;--duration:9.8s;--delay:-4.1s}
.vortex-stars span:nth-child(17){--x:-250px;--y:-35px;--mid:-196px;--bend:-120px;--inner:-42px;--size:14px;--duration:11.2s;--delay:-9.5s}
.vortex-stars span:nth-child(18){--x:235px;--y:-48px;--mid:184px;--bend:113px;--inner:39px;--size:10px;--duration:8.4s;--delay:-1.4s}
.vortex-stars span:nth-child(19){--x:-690px;--y:-105px;--mid:-540px;--bend:-332px;--inner:-114px;--size:10px;--duration:13.2s;--delay:-11.1s}
.vortex-stars span:nth-child(20){--x:675px;--y:-145px;--mid:528px;--bend:324px;--inner:112px;--size:13px;--duration:12.8s;--delay:-7.4s}
.vortex-stars span:nth-child(21){--x:-455px;--y:-20px;--mid:-356px;--bend:-218px;--inner:-76px;--size:16px;--duration:10.2s;--delay:-3.6s}
.vortex-stars span:nth-child(22){--x:438px;--y:-12px;--mid:342px;--bend:210px;--inner:73px;--size:9px;--duration:9.2s;--delay:-5.3s}
.vortex-stars span:nth-child(23){--x:-130px;--y:-170px;--mid:-102px;--bend:-62px;--inner:-22px;--size:8px;--duration:7.8s;--delay:-6.1s}
.vortex-stars span:nth-child(24){--x:118px;--y:-135px;--mid:92px;--bend:57px;--inner:20px;--size:11px;--duration:8.9s;--delay:-2.9s}
.home-campaign .campaign-hero-grid{z-index:2}.home-campaign .campaign-copy{position:relative;z-index:2}
@media(max-width:650px){.hero-vortex{height:300px;bottom:-36px;opacity:.72}.vortex-grid{width:220%;height:320px}.vortex-well{width:250px;height:78px}.vortex-well i{width:340px;height:98px}.vortex-well i:nth-child(2){width:450px;height:132px}.vortex-well i:nth-child(3){width:560px;height:166px}}
@media(prefers-reduced-motion:reduce){.vortex-stars span{animation:none;opacity:.45}.vortex-stars span:nth-child(n+7){display:none}.vortex-grid{opacity:.65}}

/* Keep the complete well inside the hero and strengthen its perspective mesh. */
.hero-vortex{bottom:0;height:460px}
.vortex-grid{bottom:-20px;height:470px;background:repeating-radial-gradient(ellipse at center,transparent 0 25px,rgba(0,26,185,.19) 26px 28px),repeating-conic-gradient(from 0deg,rgba(2,139,220,.21) 0 1deg,transparent 1deg 8deg);mask-image:linear-gradient(to top,#000 18%,rgba(0,0,0,.94) 64%,transparent 98%)}
.vortex-well{bottom:60px}
.vortex-well i{border-color:rgba(2,139,220,.3)}
.vortex-well i:nth-child(2){border-color:rgba(0,26,185,.22)}
.vortex-well i:nth-child(3){border-color:rgba(2,139,220,.16)}
@media(max-width:650px){.hero-vortex{bottom:0;height:350px}.vortex-grid{bottom:-12px;height:350px}.vortex-well{bottom:44px}}

/* The reference gains motion by changing the depth of the whole perspective plane. */
.vortex-grid{animation:vortex-depth 6s cubic-bezier(.77,0,.175,1) infinite alternate;will-change:transform,opacity}
.vortex-well{animation:vortex-core 4.8s cubic-bezier(.77,0,.175,1) infinite alternate;will-change:transform,filter}
.vortex-well i:first-child{animation:vortex-ring 5.6s linear infinite}
.vortex-well i:nth-child(2){animation:vortex-ring 7.2s linear infinite reverse}
@keyframes vortex-depth{0%{opacity:.66;transform:translateX(-50%) rotateX(70deg) translateY(5%) scale(.94)}100%{opacity:1;transform:translateX(-50%) rotateX(62deg) translateY(-2%) scale(1.08)}}
@keyframes vortex-core{0%{transform:translateX(-50%) scale(.96);filter:drop-shadow(0 0 22px rgba(2,139,220,.2))}100%{transform:translateX(-50%) scale(1.04);filter:drop-shadow(0 0 42px rgba(2,139,220,.38))}}
@keyframes vortex-ring{to{transform:translate(-50%,-50%) rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.vortex-grid,.vortex-well,.vortex-well i{animation:none!important}.vortex-grid{opacity:.82;transform:translateX(-50%) rotateX(66deg)}}
.vortex-well i{animation:none!important}

/* Light well: depth comes from the mesh and glow, without a dark disk. */
.vortex-well{background:radial-gradient(ellipse at center,rgba(255,255,255,.88) 0 31%,rgba(234,247,252,.82) 36%,rgba(0,26,185,.2) 48%,rgba(2,219,243,.3) 54%,rgba(2,139,220,.08) 63%,transparent 72%)}
.vortex-well b{display:none}

/* Native kinetic funnel: canvas supplies curved lines and pointer deformation. */
.vortex-canvas{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:0;opacity:.88;mask-image:radial-gradient(ellipse 76% 78% at 50% 70%,#000 42%,rgba(0,0,0,.78) 70%,transparent 100%)}
.vortex-well{display:none}
.vortex-stars{z-index:1}
@media(max-width:650px){.vortex-canvas{opacity:.68;mask-image:radial-gradient(ellipse 94% 78% at 50% 72%,#000 38%,rgba(0,0,0,.72) 68%,transparent 100%)}}
@media(max-width:650px){.vortex-stars span:nth-child(n+17){display:none}}

/* Let the perspective arcs finish behind the overlapping dashboard. */
.home-campaign .campaign-hero{overflow:visible}
.home-campaign .hero-vortex{height:550px;bottom:-90px}
@media(max-width:650px){.home-campaign .hero-vortex{height:410px;bottom:-60px}}
/* Restore the mesh dimensions from the version before the dashboard extension. */
.home-campaign .campaign-hero{overflow:hidden}
.home-campaign .hero-vortex{height:460px;bottom:0}
@media(max-width:650px){.home-campaign .hero-vortex{height:350px;bottom:0}}

/* Extend only the drawing surface; JS keeps the original 460/350px geometry. */
.home-campaign .campaign-hero{overflow:visible}
.home-campaign .hero-vortex{height:550px;bottom:-90px}
@media(max-width:650px){.home-campaign .hero-vortex{height:410px;bottom:-60px}}

/* Keep the decorative horizon inside the viewport without clipping its vertical continuation. */
.home-campaign .campaign-hero{overflow-x:clip}
