/* Modern motion layer shared by dashboard, ECU analysis and DTC analysis pages. */
html[data-motion='on'] .nx-reveal{opacity:0;transform:translate3d(0,18px,0) scale(.985);will-change:opacity,transform}
html[data-motion='on'] .nx-reveal.nx-visible{opacity:1;transform:none;animation:nx-reveal-up .62s cubic-bezier(.2,.75,.25,1) both;animation-delay:calc(var(--motion-order,0) * 65ms)}
html[data-motion='on'] .reference-dashboard .ref-banner{animation:nx-banner-in .72s cubic-bezier(.18,.8,.25,1) both}
html[data-motion='on'] .reference-dashboard .ref-banner-image{animation:nx-image-drift 16s ease-in-out infinite alternate}
html[data-motion='on'] .reference-dashboard .ref-action-primary{animation:nx-accent-breathe 3.5s ease-in-out infinite}
html[data-motion='on'] .reference-dashboard .ref-metric-icon svg{animation:nx-icon-pulse 3.4s ease-in-out infinite}
html[data-motion='on'] :is(.ecu-workbench,.dtc-workspace,.dtc-hero,.ecu-hero){position:relative;overflow:hidden}
html[data-motion='on'] :is(.ecu-workbench,.dtc-workspace,.dtc-hero,.ecu-hero)::after{content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient(115deg,transparent 20%,color-mix(in srgb,var(--nx-accent,var(--accent,#58dd42)) 8%,transparent),transparent 80%);transform:translateX(-100%);animation:nx-scan-line 7s ease-in-out infinite}
html[data-motion='on'] :is(.ecu-drop,.dtc-drop,.file-drop-field,.upload-box){animation:nx-drop-glow 4s ease-in-out infinite}
html[data-motion='on'] :is(.ecu-action,.ecu-download,.dtc-action,.dtc-submit):hover{animation:nx-button-pop .35s ease both}
@keyframes nx-reveal-up{from{opacity:0;transform:translate3d(0,18px,0) scale(.985)}to{opacity:1;transform:none}}
@keyframes nx-banner-in{from{opacity:0;transform:scale(1.025)}to{opacity:1;transform:none}}
@keyframes nx-image-drift{from{transform:scale(1.01) translateX(-.5%)}to{transform:scale(1.045) translateX(.7%)}}
@keyframes nx-accent-breathe{0%,100%{box-shadow:0 6px 18px rgba(var(--nx-glow,88,221,66),.08)}50%{box-shadow:0 8px 26px rgba(var(--nx-glow,88,221,66),.24)}}
@keyframes nx-icon-pulse{0%,100%{transform:scale(1);opacity:.88}50%{transform:scale(1.08);opacity:1}}
@keyframes nx-scan-line{0%,55%{transform:translateX(-100%);opacity:0}65%{opacity:1}90%,100%{transform:translateX(100%);opacity:0}}
@keyframes nx-drop-glow{0%,100%{box-shadow:0 0 0 0 rgba(var(--nx-glow,88,221,66),0)}50%{box-shadow:0 0 0 4px rgba(var(--nx-glow,88,221,66),.07)}}
@keyframes nx-button-pop{0%{transform:translateY(0)}50%{transform:translateY(-2px)}100%{transform:translateY(0)}}
@media(prefers-reduced-motion:reduce){html[data-motion='on'] *,html[data-motion='on'] *::before,html[data-motion='on'] *::after{animation:none!important;transition:none!important}html[data-motion='on'] .nx-reveal{opacity:1!important;transform:none!important}}
