/* NOAT Motion System — STEP013
   Motion has hierarchy and meaning: feedback is fast, component state is calm,
   editorial reveals are deliberate. Transform/opacity only for reveal motion. */
:root{
  --motion-duration-instant:90ms;--motion-duration-fast:150ms;--motion-duration-base:220ms;--motion-duration-slow:420ms;--motion-duration-reveal:680ms;
  --motion-ease-standard:cubic-bezier(.2,.8,.2,1);--motion-ease-enter:cubic-bezier(.16,1,.3,1);--motion-ease-exit:cubic-bezier(.4,0,1,1);
  --motion-distance-sm:.5rem;--motion-distance-md:1.25rem;--motion-distance-lg:2rem;--motion-scale-enter:.985;
}
html{scroll-behavior:smooth;scroll-padding-top:5rem}

/* Progressive reveal: content stays visible without JS. JS adds .motion-ready. */
.motion-ready [data-reveal]{opacity:0;transform:translate3d(0,var(--motion-distance-md),0);transition:opacity var(--motion-duration-reveal) var(--motion-ease-enter),transform var(--motion-duration-reveal) var(--motion-ease-enter);transition-delay:var(--reveal-delay,0ms);will-change:opacity,transform}
.motion-ready [data-reveal="fade"]{transform:none}.motion-ready [data-reveal="up"]{transform:translate3d(0,var(--motion-distance-md),0)}.motion-ready [data-reveal="left"]{transform:translate3d(var(--motion-distance-lg),0,0)}.motion-ready [data-reveal="right"]{transform:translate3d(calc(var(--motion-distance-lg) * -1),0,0)}.motion-ready [data-reveal="scale"]{transform:scale(var(--motion-scale-enter))}
.motion-ready [data-reveal].is-revealed{opacity:1;transform:none;will-change:auto}
[data-reveal-stagger]>*{--reveal-delay:calc(var(--reveal-index,0) * 70ms)}

/* Intentional hover primitives. Never make essential information hover-only. */
.motion-lift,.motion-media{transition:transform var(--motion-duration-base) var(--motion-ease-standard),box-shadow var(--motion-duration-base) var(--motion-ease-standard),border-color var(--motion-duration-base) var(--motion-ease-standard)}
@media (hover:hover) and (pointer:fine){.motion-lift:hover{transform:translateY(-3px)}.motion-media:hover{transform:scale(1.015)}}
.motion-press:active{transform:scale(.985)}

/* State helpers for panels/overlays added by later phases. */
.motion-fade{animation:noat-fade-in var(--motion-duration-base) var(--motion-ease-enter) both}.motion-enter{animation:noat-enter var(--motion-duration-slow) var(--motion-ease-enter) both}
@keyframes noat-fade-in{from{opacity:0}to{opacity:1}}@keyframes noat-enter{from{opacity:0;transform:translateY(var(--motion-distance-sm))}to{opacity:1;transform:none}}

/* Accessibility contract: motion becomes effectively immediate, not hidden. */
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.motion-ready [data-reveal]{opacity:1!important;transform:none!important;transition:none!important;will-change:auto!important}.motion-lift,.motion-media,.motion-press{transition:none!important;transform:none!important}.motion-fade,.motion-enter{animation:none!important}}

/* CMS ULTRA STEP003 · restrained CAD precision motion for the homepage hero */
.hero-cad-overlay{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:2;opacity:.58;mix-blend-mode:screen}
.hero-cad-overlay svg{width:100%;height:100%;display:block}
.hero-cad-overlay .cad-line{fill:none;stroke:currentColor;stroke-width:.75;vector-effect:non-scaling-stroke;stroke-dasharray:7 10;animation:noatCadTrace 13s linear infinite}
.hero-cad-overlay .cad-line--slow{stroke-dasharray:2 15;animation-duration:22s;animation-direction:reverse;opacity:.55}
.hero-cad-overlay .cad-node{fill:currentColor;opacity:.8;animation:noatCadNode 4.8s ease-in-out infinite}
.hero-cad-overlay .cad-cross{fill:none;stroke:currentColor;stroke-width:.55;opacity:.42;vector-effect:non-scaling-stroke}
@keyframes noatCadTrace{to{stroke-dashoffset:-170}}
@keyframes noatCadNode{0%,100%{opacity:.28}50%{opacity:.9}}
@media (prefers-reduced-motion:reduce){.hero-cad-overlay .cad-line,.hero-cad-overlay .cad-node{animation:none}.hero-cad-overlay{opacity:.32}}
