.hero-section{position:relative;overflow:hidden}.hero-effects-canvas{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1}.hero-section>.relative{position:relative;z-index:10}@keyframes float{0%,100%{transform:translateY(0)rotate(0)}33%{transform:translateY(-10px)rotate(1deg)}66%{transform:translateY(-5px)rotate(-1deg)}}@keyframes pulse{0%,100%{opacity:.6;transform:scale(1)}50%{opacity:1;transform:scale(1.1)}}@keyframes dash{to{stroke-dashoffset:-20}}@keyframes data-flow{0%{transform:translateX(0);opacity:0}10%{opacity:1}90%{opacity:1}100%{transform:translateX(400px);opacity:0}}@keyframes data-return{0%{transform:translateX(0);opacity:0}10%{opacity:1}90%{opacity:1}100%{transform:translateX(-400px);opacity:0}}@keyframes upload{0%{transform:translateY(0);opacity:0}10%{opacity:1}90%{opacity:1}100%{transform:translateY(-100px);opacity:0}}@keyframes download{0%{transform:translateY(0);opacity:0}10%{opacity:1}90%{opacity:1}100%{transform:translateY(100px);opacity:0}}.animate-float{animation:float 6s ease-in-out infinite}.animate-pulse{animation:pulse 3s ease-in-out infinite}.animate-dash{animation:dash 20s linear infinite}.animate-data-flow{animation:data-flow 4s ease-in-out infinite}.animate-data-return{animation:data-return 4s ease-in-out infinite}.animate-upload{animation:upload 3s ease-in-out infinite}.animate-download{animation:download 3s ease-in-out infinite}@media(prefers-reduced-motion:reduce){.hero-effects-canvas,.animate-float,.animate-pulse,.animate-dash,.animate-data-flow,.animate-data-return,.animate-upload,.animate-download{animation:none !important}}.hero-effects-canvas{will-change:transform;backface-visibility:hidden;perspective:1000px}@media(max-width:768px){.hero-effects-canvas{opacity:.7}}@media(max-width:480px){.hero-effects-canvas{opacity:.5}}