/* ============================================================
   NN RENEWABLES — animations.css
   ============================================================ */

/* scroll reveal */
.rv{opacity:0;transform:translateY(34px);transition:opacity .8s cubic-bezier(.2,.7,.2,1),transform .8s cubic-bezier(.2,.7,.2,1)}
.rv-left{opacity:0;transform:translateX(-40px);transition:opacity .8s cubic-bezier(.2,.7,.2,1),transform .8s cubic-bezier(.2,.7,.2,1)}
.rv-right{opacity:0;transform:translateX(40px);transition:opacity .8s cubic-bezier(.2,.7,.2,1),transform .8s cubic-bezier(.2,.7,.2,1)}
.rv-scale{opacity:0;transform:scale(.92);transition:opacity .8s,transform .8s}
.rv.in,.rv-left.in,.rv-right.in,.rv-scale.in{opacity:1;transform:none}

/* hero line mask reveal */
.mask{display:block;overflow:hidden;padding-bottom:.08em;margin-bottom:-.08em}
.mask>span{display:block;transform:translateY(112%);animation:maskUp 1s cubic-bezier(.19,.8,.22,1) forwards}
.mask.d1>span{animation-delay:.12s}
.mask.d2>span{animation-delay:.26s}
.mask.d3>span{animation-delay:.4s}

/* keyframes */
@keyframes maskUp{to{transform:translateY(0)}}
@keyframes floatY{0%,100%{transform:translateY(0)}50%{transform:translateY(-11px)}}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.3}}
@keyframes pulseDot{0%{box-shadow:0 0 0 0 rgba(22,163,74,.6)}70%{box-shadow:0 0 0 12px rgba(22,163,74,0)}100%{box-shadow:0 0 0 0 rgba(22,163,74,0)}}
@keyframes waPulse{0%{transform:scale(1);opacity:.9}100%{transform:scale(1.35);opacity:0}}
@keyframes sunSpin{to{transform:rotate(360deg)}}
@keyframes cueDrop{0%{transform:scaleY(0);transform-origin:top}45%{transform:scaleY(1);transform-origin:top}55%{transform:scaleY(1);transform-origin:bottom}100%{transform:scaleY(0);transform-origin:bottom}}
@keyframes rippleGo{to{transform:translate(-50%,-50%) scale(24);opacity:0}}
@keyframes toastIn{from{opacity:0;transform:translateX(40px)}to{opacity:1;transform:none}}
@keyframes marquee{to{transform:translateX(-50%)}}
@keyframes kenburns{0%{transform:scale(1)}100%{transform:scale(1.09) translate(1.5%,-1.5%)}}
@keyframes shine{0%{transform:translateX(-120%) skewX(-18deg)}100%{transform:translateX(240%) skewX(-18deg)}}
@keyframes popIn{from{opacity:0;transform:translateY(20px) scale(.96)}to{opacity:1;transform:none}}

/* marquee trust ticker */
.ticker{background:var(--blue);color:#fff;overflow:hidden;position:relative;z-index:3}
.ticker-track{display:flex;width:max-content;animation:marquee 30s linear infinite}
.ticker:hover .ticker-track{animation-play-state:paused}
.ticker-track ul{display:flex;align-items:center;gap:0;padding:15px 0}
.ticker-track li{display:flex;align-items:center;gap:12px;padding:0 30px;font:600 13px var(--fd);letter-spacing:.18em;text-transform:uppercase;white-space:nowrap}
.ticker-track li i{color:var(--orange);font-size:14px}
.ticker-track li::after{content:"";width:6px;height:6px;background:rgba(255,255,255,.35);border-radius:50%;margin-left:30px}

/* ken burns on featured media */
.kb img{animation:kenburns 14s ease-in-out infinite alternate}

/* shimmer on primary CTA band buttons */
.shine{position:relative;overflow:hidden}
.shine::after{content:"";position:absolute;top:0;bottom:0;width:38%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.45),transparent);transform:translateX(-120%) skewX(-18deg);animation:shine 3.6s ease-in-out infinite}

/* counter glow */
.count{font-variant-numeric:tabular-nums}

/* reduced motion: kill everything gracefully */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  .rv,.rv-left,.rv-right,.rv-scale{opacity:1!important;transform:none!important}
  .mask>span{transform:none;animation:none}
  .ticker-track{animation:none;flex-wrap:wrap;width:100%}
  .kb img{animation:none}
}