/* TurtleLuck shared motion layer (Ive spec, review/specs/motion.md). One easing; only transform, opacity, stroke-dashoffset animate.
   Hidden states only after JS sets html.mo-js. No JS / reduced motion: everything visible. */
:root{--mo-ease:cubic-bezier(.28,.11,.32,1);--mo-dur:700ms;--mo-y:24px;--mo-scale:.97}
html[data-motion="pro"]{--mo-dur:500ms;--mo-y:12px;--mo-scale:1}
html.mo-js [data-reveal]{opacity:0;transform:translate3d(0,var(--mo-y),0);transition:opacity var(--mo-dur) var(--mo-ease),transform var(--mo-dur) var(--mo-ease);transition-delay:var(--mo-d,0ms)}
html.mo-js [data-reveal="scale"]{transform:translate3d(0,var(--mo-y),0) scale(var(--mo-scale));transition-duration:900ms}
html[data-motion="pro"].mo-js [data-reveal="scale"]{transition-duration:var(--mo-dur)}
html.mo-js [data-reveal="fade"]{transform:none}
html.mo-js [data-reveal="row"]{transform:translate3d(0,8px,0);transition-duration:400ms}
html[data-motion="pro"].mo-js [data-reveal="row"]{transition-duration:var(--mo-dur)}
html.mo-js [data-reveal].mo-in{opacity:1;transform:none}
html.mo-js [data-reveal].mo-reset{transition:none!important}
html.mo-js [data-tier]{opacity:0;transition:opacity 400ms var(--mo-ease)}
html.mo-js [data-tier].mo-in{opacity:1}
/* statement lines brighten word by word with scroll (opacity only, JS writes it) */
html.mo-js .tl-w{opacity:.2}
@media (prefers-reduced-motion:reduce){html.mo-js [data-reveal],html.mo-js [data-tier],html.mo-js .tl-w{opacity:1!important;transform:none!important;transition:none!important}}
