/* ==========================================================================
Fine-grained micro-interactions. All motion is opt-out via prefers-reduced-motion.
==========================================================================*/

/* --- Scroll reveal (toggled via .is-in by IntersectionObserver) --- */
[data-reveal]{
opacity:0;
transform:translateY(22px);
transition: opacity var(--t-slow) var(--e-out),
transform var(--t-slow) var(--e-out);
}

[data-reveal].is-in {
opacity:1;
transform:none;
}

/*Stagger children inside a grid */
[data-reveal-stagger]> * {
opacity:0;
transform: translateY(18px);
transition:opacity var(--t-base) var(--e-out),
transform var(--t-base) var(--e-out);
transition-delay:calc(var(--i,0) * 70ms);
}

[data-reveal-stagger].is-in> *{
opacity: 1;
transform: none;
}

/*--- Hero entrance ---*/
@keyframes
rise{
from{opacity:0;transform: translateY(26px);}
to{opacity: 1; transform:none;}
}

.hero__title
.line{
animation: rise var(--t-slow) var(--e-out) both;
}

.hero__title
.line:nth-child(1) { animation-delay:60ms;}
.hero__title
.line:nth-child(2) { animation-delay:150ms; }

.hero__lead { animation: rise var(--t-slow) var(--e-out) 240ms both; }
.hero__cta{animation: rise var(--t-slow) var(--e-out) 330ms both;}
.hero__stats{animation:rise var(--t-slow) var(--e-out) 420ms both;}

/*--- 3D stage idle drift (paused while the pointer drives it) --- */
@keyframes
drift{
0%{transform:rotateX(-14deg) rotateY(18deg); }
50%{transform:rotateX(-9deg) rotateY(27deg); }
100%{transform:rotateX(-14deg) rotateY(18deg);}
}

.stage__scene[data-idle="true"]{
animation: drift 13s ease-in-out infinite;
}

/*Floating plates give the scene depth*/
@keyframes
bob{
0%,100%{ translate: 0 0; }
50% { translate:0-12px; }
}

.stage__plate--a{ animation: bob 6.5s ease-in-out infinite;}
.stage__plate--b{ animation: bob 7.5s ease-in-out infinite 0.6s;}
.stage__plate--c { animation:bob 8.5s ease-in-out infinite 1.2s;}

/*--- Nav shadow on scroll ---*/
.nav[data-scrolled="true"]{
background: rgba(11,11, 18,0.94);
box-shadow: 0 12px 32px -18px rgba(0, 0, 0, 0.9);
}

/* --- Underline sweep on mega-menu triggers ---*/
.nav__link::after{
content:"";
position: absolute;
left:var(--sp-2);
right:var(--sp-2);
bottom:4px;
height:2px;
background: var(--c-lime);
transform: scaleX(0);
transform-origin: left;
transition:transform var(--t-base) var(--e-out);
}

.nav__link:hover::after,
.nav__link[aria-expanded="true"]::after{ transform:scaleX(1);}

@media
(prefers-reduced-motion: reduce){
[data-reveal],
[data-reveal-stagger] >*{
opacity: 1;
transform:none;
transition:none;
}

.hero__title
.line,
.hero__lead,
.hero__cta,
.hero__stats,
.stage__scene[data-idle="true"],
.stage__plate--a,
.stage__plate--b,
.stage__plate--c{animation:none; }

.nav__link::after{transition:none; }
}
