/*=========================================
NOVEATECH
ANIMATIONS
=========================================*/


/* KEYFRAMES */


@keyframes marquee{

from{ transform:translateX(0); }

to{ transform:translateX(-50%); }

}



@keyframes spin{

from{ transform:rotate(0deg); }

to{ transform:rotate(360deg); }

}



@keyframes pulseDot{

0%,100%{ opacity:1; transform:scale(1); }

50%{ opacity:.4; transform:scale(1.3); }

}



@keyframes barPulse{

0%,100%{ transform:scaleY(.6); opacity:.7; }

50%{ transform:scaleY(1); opacity:1; }

}



@keyframes floatY{

0%,100%{ transform:translateY(0); }

50%{ transform:translateY(-14px); }

}



@keyframes floatParticle{

0%{ transform:translate(0,0); opacity:0; }

10%{ opacity:.6; }

90%{ opacity:.6; }

100%{ transform:translate(var(--dx,40px),var(--dy,-120px)); opacity:0; }

}



@keyframes shimmer{

0%{ background-position:-200% 0; }

100%{ background-position:200% 0; }

}



@keyframes fadeInUp{

from{ opacity:0; transform:translateY(28px); }

to{ opacity:1; transform:translateY(0); }

}



@keyframes fadeInScale{

from{ opacity:0; transform:scale(.92); }

to{ opacity:1; transform:scale(1); }

}



@keyframes drawLine{

from{ width:0; }

to{ width:100%; }

}



/*=========================================
SCROLL REVEAL
=========================================*/


.reveal{

opacity:0;

transform:translateY(32px);

transition:opacity .8s cubic-bezier(.16,1,.3,1), transform .8s cubic-bezier(.16,1,.3,1);

}



.reveal.in{

opacity:1;

transform:translateY(0);

}



.reveal-left{

opacity:0;

transform:translateX(-40px);

transition:opacity .8s cubic-bezier(.16,1,.3,1), transform .8s cubic-bezier(.16,1,.3,1);

}



.reveal-left.in{

opacity:1;

transform:translateX(0);

}



.reveal-right{

opacity:0;

transform:translateX(40px);

transition:opacity .8s cubic-bezier(.16,1,.3,1), transform .8s cubic-bezier(.16,1,.3,1);

}



.reveal-right.in{

opacity:1;

transform:translateX(0);

}



.reveal-scale{

opacity:0;

transform:scale(.88);

transition:opacity .7s cubic-bezier(.16,1,.3,1), transform .7s cubic-bezier(.16,1,.3,1);

}



.reveal-scale.in{

opacity:1;

transform:scale(1);

}



/* stagger delays for grids/lists */


.stagger .reveal:nth-child(1),
.stagger .reveal-scale:nth-child(1){ transition-delay:.05s; }

.stagger .reveal:nth-child(2),
.stagger .reveal-scale:nth-child(2){ transition-delay:.15s; }

.stagger .reveal:nth-child(3),
.stagger .reveal-scale:nth-child(3){ transition-delay:.25s; }

.stagger .reveal:nth-child(4),
.stagger .reveal-scale:nth-child(4){ transition-delay:.35s; }

.stagger .reveal:nth-child(5),
.stagger .reveal-scale:nth-child(5){ transition-delay:.45s; }

.stagger .reveal:nth-child(6),
.stagger .reveal-scale:nth-child(6){ transition-delay:.55s; }



/*=========================================
AMBIENT / DECORATIVE MOTION
=========================================*/


.tech-card{

animation:floatY 6s ease-in-out infinite;

}



.particle{

animation:floatParticle linear infinite;

}



.badge-live span{

animation:pulseDot 1.6s ease-in-out infinite;

}



/* tilt targets (JS sets rotation via inline transform) */


.tilt{

transition:transform .15s ease-out;

will-change:transform;

}



/* magnetic buttons (JS sets translate via inline transform) */


.magnetic{

transition:transform .25s cubic-bezier(.16,1,.3,1);

}



/*=========================================
LOADING SKELETON (counters before JS runs)
=========================================*/


.count-up{

display:inline-block;

}



/*=========================================
REDUCED MOTION + TOUCH GUARDS
=========================================*/


@media (hover:none), (pointer:coarse){

.hero-glow{ display:none; }

.tilt{ transform:none !important; }

}



@media (prefers-reduced-motion: reduce){

*{

animation-duration:.001ms !important;

animation-iteration-count:1 !important;

transition-duration:.001ms !important;

scroll-behavior:auto !important;

}

.reveal,
.reveal-left,
.reveal-right,
.reveal-scale{

opacity:1 !important;

transform:none !important;

}

}
