/* HERO PARALLAX — scroll-driven via CSS custom property */
.hh{transform:translateY(calc(var(--hsp,0) * -60px));will-change:transform}
.hc{transform:translateY(calc(var(--hsp,0) * -110px));will-change:transform}
.hscr{transform:translateX(-50%) translateY(calc(var(--hsp,0) * -30px));opacity:max(0, calc(1 - var(--hsp,0) * 4));will-change:transform,opacity}
.hbg{transform:translateY(calc(var(--hsp,0) * -25px));will-change:transform}

/* DIRECTIONAL REVEALS */
.rv-l{opacity:0;transform:translateX(-72px) rotate(-0.8deg);transition:opacity 1s var(--eo),transform 1.1s var(--eo)}
.rv-l.vi{opacity:1;transform:translateX(0) rotate(0)}
.rv-r{opacity:0;transform:translateX(72px) rotate(0.8deg);transition:opacity 1s var(--eo),transform 1.1s var(--eo)}
.rv-r.vi{opacity:1;transform:translateX(0) rotate(0)}
.rv-s{opacity:0;transform:scale(.88);transition:opacity .9s var(--eo),transform 1s var(--eo)}
.rv-s.vi{opacity:1;transform:scale(1)}

/* DEVICE FLY-IN — replaces the static .mp/.mtb/.mpl initial state */
.dev-l{opacity:0;transform:translateX(-130px) rotateY(28deg) rotateZ(-2deg);transition:opacity 1s var(--eo),transform 1.3s var(--eo)}
.dev-l.vi{opacity:1;transform:translateX(0) rotateY(-2deg) rotateZ(0)}
.dev-l.vi:hover{transform:translateY(-8px) rotateY(-2deg)}
.dev-c{opacity:0;transform:translateY(110px) scale(.9);transition:opacity 1s .18s var(--eo),transform 1.3s .18s var(--eo)}
.dev-c.vi{opacity:1;transform:translateY(0) scale(1)}
.dev-c.vi:hover{transform:translateY(-8px) rotateY(1deg)}
.dev-r{opacity:0;transform:translateX(130px) rotateY(-28deg) rotateZ(2deg);transition:opacity 1s .35s var(--eo),transform 1.3s .35s var(--eo)}
.dev-r.vi{opacity:1;transform:translateX(0) rotateY(3deg) rotateZ(0)}
.dev-r.vi:hover{transform:translateY(-8px) rotateY(3deg)}

/* SECTION TITLE STAGGER — label + heading + desc */
.rv-hd{opacity:0;transform:translateY(48px);transition:opacity .9s var(--eo),transform .9s var(--eo)}
.rv-hd.vi{opacity:1;transform:translateY(0)}

/* CARD SCALE-UP */
.rv-sc{opacity:0;transform:translateY(40px) scale(.94);transition:opacity .85s var(--eo),transform .95s var(--eo)}
.rv-sc.vi{opacity:1;transform:translateY(0) scale(1)}
