/* animations.css — progressive enhancement. Content visible without JS. */
@keyframes heroZoom{from{transform:scale(1.14)}to{transform:scale(1.02)}}
@keyframes mq{to{transform:translateX(-50%)}}
@keyframes cue{0%{top:-40%}100%{top:110%}}
@keyframes fadeUp{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:none}}
@keyframes maskIn{from{clip-path:inset(8% 5% 8% 5%);opacity:.4}to{clip-path:inset(0 0 0 0);opacity:1}}
@keyframes lineGrow{from{transform:scaleX(0)}to{transform:scaleX(1)}}

/* page entrance */
.page-enter{animation:fadeUp .9s cubic-bezier(.22,.61,.21,1) both}
.page-enter.d1{animation-delay:.08s}.page-enter.d2{animation-delay:.18s}
.page-enter.d3{animation-delay:.3s}.page-enter.d4{animation-delay:.42s}

/* scroll reveals: only hidden when JS active */
html.js .rv{opacity:0;transform:translateY(30px);transition:opacity .9s cubic-bezier(.22,.61,.21,1),transform .9s cubic-bezier(.22,.61,.21,1)}
html.js .rv.in{opacity:1;transform:none}
html.js .rv-img{clip-path:inset(6% 4% 6% 4%);opacity:.35;transition:clip-path 1.1s cubic-bezier(.22,.61,.21,1),opacity 1.1s}
html.js .rv-img.in{clip-path:inset(0 0 0 0);opacity:1}
html.js .rv-line{transform:scaleX(0);transform-origin:left;transition:transform 1.1s cubic-bezier(.22,.61,.21,1)}
html.js .rv-line.in{transform:scaleX(1)}
.stagger>*{transition-delay:calc(var(--i,0)*.09s)}

/* parallax prefers transform only */
[data-parallax]{will-change:transform}

/* magnetic + tilt affordance */
.magnetic{transition:transform .35s cubic-bezier(.22,.61,.21,1)}
.tilt{transform-style:preserve-3d;transition:transform .5s cubic-bezier(.22,.61,.21,1)}

@media(prefers-reduced-motion:reduce){
  html.js .rv,html.js .rv-img{opacity:1;transform:none;clip-path:none}
  .marquee-track,.hero-media img,.scroll-cue i::after{animation:none !important}
}
