/* Shared by the public landing page and every web page backdrop. */
.zp-landing-effects{position:fixed;inset:0;pointer-events:none;z-index:0;overflow:hidden}.zp-landing-effects[hidden]{display:none}.zp-landing-effects i{display:none}
.zp-landing-effects{opacity:var(--landing-effect-opacity,.4)}
[data-landing-animation=astra]>.zp-landing-effects i{display:block;position:absolute;width:5px;height:5px;border-radius:50%;background:var(--landing-accent);opacity:.28;box-shadow:0 0 16px var(--landing-accent);animation:zpParticleFloat var(--duration) ease-in-out var(--delay) infinite alternate}
[data-landing-animation=grid]>.zp-landing-effects::before{content:"";position:absolute;inset:-64px;background-image:linear-gradient(color-mix(in srgb,var(--landing-accent) 15%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--landing-accent) 15%,transparent) 1px,transparent 1px);background-size:48px 48px;animation:zpGridShift 18s linear infinite}
@keyframes zpParticleFloat{from{transform:translate3d(-12px,18px,0);opacity:.14}to{transform:translate3d(32px,-42px,0);opacity:.5}}
@keyframes zpGridShift{to{transform:translate3d(48px,48px,0)}}
[data-landing-animation=astra]>.zp-landing-effects i{animation-duration:calc(var(--duration) * var(--landing-speed,1));opacity:.7}
[data-landing-animation=grid]>.zp-landing-effects::before{animation-duration:calc(18s * var(--landing-speed,1))}
[data-landing-animation=aurora]>.zp-landing-effects::before,[data-landing-animation=aurora]>.zp-landing-effects::after{content:"";position:absolute;inset:-30%;background:conic-gradient(from 40deg at 50% 50%,transparent,var(--landing-accent),transparent 40%,#22d3ee,transparent 70%);filter:blur(50px);animation:zpAuroraFlow calc(30s * var(--landing-speed,1)) ease-in-out infinite alternate}
[data-landing-animation=aurora]>.zp-landing-effects::after{animation-direction:alternate-reverse;transform:rotate(120deg);opacity:.6}
[data-landing-animation=orbs]>.zp-landing-effects i:nth-child(-n+6){display:block;position:absolute;width:clamp(80px,18vw,260px);aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at 35% 35%,color-mix(in srgb,var(--landing-accent) 35%,white),var(--landing-accent) 50%,transparent 72%);filter:blur(8px);animation:zpOrbFloat calc(var(--duration) * var(--landing-speed,1)) ease-in-out var(--delay) infinite alternate}
[data-landing-animation=waves]>.zp-landing-effects::before,[data-landing-animation=waves]>.zp-landing-effects::after{content:"";position:absolute;left:-25%;bottom:-72%;width:150%;height:110%;border-radius:44%;background:linear-gradient(45deg,var(--landing-accent),transparent);animation:zpWaveRoll calc(28s * var(--landing-speed,1)) linear infinite}
[data-landing-animation=waves]>.zp-landing-effects::after{bottom:-65%;border-radius:40%;opacity:.55;animation-direction:reverse;animation-duration:calc(36s * var(--landing-speed,1))}
[data-landing-animation=stars]>.zp-landing-effects i{display:block;position:absolute;width:3px;height:3px;border-radius:50%;background:var(--landing-accent);box-shadow:0 0 8px 2px var(--landing-accent);animation:zpStarTwinkle calc(6s * var(--landing-speed,1)) ease-in-out var(--delay) infinite alternate}
[data-landing-animation=stars]>.zp-landing-effects i:nth-child(3n){width:5px;height:5px}
[data-landing-animation=mesh]>.zp-landing-effects::before{content:"";position:absolute;inset:-25%;background:radial-gradient(ellipse at 20% 25%,var(--landing-accent),transparent 55%),radial-gradient(ellipse at 80% 30%,#a78bfa,transparent 50%),radial-gradient(ellipse at 40% 80%,#2dd4bf,transparent 55%);filter:blur(35px);animation:zpMeshDrift calc(24s * var(--landing-speed,1)) ease-in-out infinite alternate}
@keyframes zpAuroraFlow{from{transform:translate3d(-6%,-4%,0) rotate(-12deg) scale(.9)}to{transform:translate3d(8%,5%,0) rotate(25deg) scale(1.1)}}
@keyframes zpOrbFloat{from{transform:translate3d(-30px,20px,0) scale(.8)}to{transform:translate3d(45px,-60px,0) scale(1.1)}}
@keyframes zpWaveRoll{to{transform:rotate(360deg)}}
@keyframes zpStarTwinkle{from{opacity:.15;transform:scale(.6)}to{opacity:1;transform:scale(1.2)}}
@keyframes zpMeshDrift{from{transform:translate3d(-6%,-4%,0) scale(.9)}to{transform:translate3d(7%,6%,0) scale(1.15)}}
/* Four bounded CSS layers keep the Stitch canvas independent of page content. */
.zp-stitch-ribbon{display:none}
[data-landing-animation=stitch]>.zp-landing-effects{isolation:isolate}
[data-landing-animation=stitch]>.zp-landing-effects::before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at 4% 62%,color-mix(in srgb,var(--landing-accent) 20%,transparent),transparent 50%),radial-gradient(ellipse at 98% 26%,color-mix(in srgb,var(--landing-secondary) 18%,transparent),transparent 48%)}
[data-landing-animation=stitch]>.zp-landing-effects .zp-stitch-ribbon{display:block;position:absolute;left:-24%;top:10%;width:78%;height:105%;border:clamp(36px,7vw,110px) solid transparent;border-left-color:var(--landing-accent);border-top-color:color-mix(in srgb,var(--landing-accent) 65%,transparent);border-radius:48% 52% 62% 38% / 56% 40% 60% 44%;filter:blur(var(--landing-blur,36px));transform-origin:56% 50%;animation:zpStitchFlow calc(26s * var(--landing-speed,1)) linear calc(var(--ribbon-index) * -6s) infinite var(--landing-motion-direction,alternate);scale:var(--landing-scale,1);opacity:.8}
[data-landing-animation=stitch]>.zp-landing-effects .zp-stitch-ribbon:nth-of-type(2){left:52%;top:-32%;width:76%;height:110%;border-left-color:var(--landing-secondary);border-top-color:color-mix(in srgb,var(--landing-secondary) 70%,transparent);rotate:155deg;opacity:.75}
[data-landing-animation=stitch]>.zp-landing-effects .zp-stitch-ribbon:nth-of-type(3){left:-8%;top:56%;width:105%;height:72%;border-left-color:var(--landing-secondary);border-top-color:color-mix(in srgb,var(--landing-accent) 80%,transparent);rotate:-35deg;opacity:.55}
[data-landing-animation=stitch]>.zp-landing-effects .zp-stitch-ribbon:nth-of-type(4){left:65%;top:42%;width:58%;height:85%;rotate:90deg;opacity:.45}
@keyframes zpStitchFlow{0%{transform:translate3d(-6%,3%,0) rotate(0deg)}25%{transform:translate3d(5%,-7%,0) rotate(90deg)}50%{transform:translate3d(10%,4%,0) rotate(180deg)}75%{transform:translate3d(-2%,8%,0) rotate(270deg)}100%{transform:translate3d(-6%,3%,0) rotate(360deg)}}
.zp-animation-paused>.zp-landing-effects i,.zp-animation-paused>.zp-landing-effects .zp-stitch-ribbon,.zp-animation-paused>.zp-landing-effects::before,.zp-animation-paused>.zp-landing-effects::after{animation-play-state:paused}
@media(max-width:600px){[data-landing-animation=stitch]>.zp-landing-effects .zp-stitch-ribbon{width:115%;height:80%;left:-65%;top:18%;border-width:48px;filter:blur(min(var(--landing-blur,36px),30px))}[data-landing-animation=stitch]>.zp-landing-effects .zp-stitch-ribbon:nth-of-type(2){left:45%;top:-12%}[data-landing-animation=stitch]>.zp-landing-effects .zp-stitch-ribbon:nth-of-type(3){left:-10%;top:65%}[data-landing-animation=stitch]>.zp-landing-effects .zp-stitch-ribbon:nth-of-type(4){left:65%;top:60%}}
@media(prefers-reduced-motion:reduce){.zp-landing-effects i,.zp-landing-effects .zp-stitch-ribbon,.zp-landing-effects::before,.zp-landing-effects::after{animation:none!important}}

@media print{.zp-landing-effects{display:none!important}}
