/*!
 * Minimal WOW.js entrance-animation subset — replaces animate.min.css (71.9 KiB -> ~1.5 KiB).
 *
 * Only includes the 6 animation names actually used in this project: fadeIn, fadeInUp,
 * fadeInLeft, fadeInRight, zoomIn, lightSpeedIn. Regenerate/extend if a new `wow <name>`
 * class is added in src/.
 *
 * Deliberately transform-only (no opacity). Two reasons:
 *  1. `transform` is paint-only and excluded from Chrome's CLS calculation, while opacity/
 *     layout changes are not — this is why animate.css was causing CLS regressions.
 *  2. An element mid-opacity-transition reads as a faint/low-contrast color to accessibility
 *     scanners (axe/Lighthouse) if they snapshot the page mid-animation. Transform-only
 *     animations keep text at full opacity (full contrast) the instant WOW.js reveals the
 *     element via visibility:hidden -> visible, so there's no timing-dependent failure mode.
 */
.animated {
    animation-duration: 0.6s;
    animation-fill-mode: both;
}

@keyframes fadeIn {
    from { transform: scale3d(0.96, 0.96, 0.96); }
    to   { transform: scale3d(1, 1, 1); }
}
.fadeIn { animation-name: fadeIn; }

@keyframes fadeInUp {
    from { transform: translate3d(0, 40px, 0); }
    to   { transform: translate3d(0, 0, 0); }
}
.fadeInUp { animation-name: fadeInUp; }

@keyframes fadeInLeft {
    from { transform: translate3d(-40px, 0, 0); }
    to   { transform: translate3d(0, 0, 0); }
}
.fadeInLeft { animation-name: fadeInLeft; }

@keyframes fadeInRight {
    from { transform: translate3d(40px, 0, 0); }
    to   { transform: translate3d(0, 0, 0); }
}
.fadeInRight { animation-name: fadeInRight; }

@keyframes zoomIn {
    from { transform: scale3d(0.7, 0.7, 0.7); }
    to   { transform: scale3d(1, 1, 1); }
}
.zoomIn { animation-name: zoomIn; animation-duration: 0.5s; }

@keyframes lightSpeedIn {
    from { transform: translate3d(60px, 0, 0) skewX(-20deg); }
    60%  { transform: skewX(10deg); }
    80%  { transform: skewX(-3deg); }
    to   { transform: translate3d(0, 0, 0); }
}
.lightSpeedIn { animation-name: lightSpeedIn; animation-duration: 0.7s; animation-timing-function: ease-out; }
