/* Generated by motion-apply.mjs -- DO NOT EDIT BY HAND. Source: _motion/motion.json
 * Non-destructive motion overlay (ADR 0026). Tier-1 CSS motion only here;
 * tier-2 runtime hooks live in site.motion.js. Reduced-motion guarded.
 */
:root{
  --mo-fast:90ms; --mo-base:180ms; --mo-slow:320ms;
  --mo-ease-spring:linear(0, 0.017, 0.063, 0.132, 0.216, 0.309, 0.408, 0.507, 0.603, 0.694, 0.777, 0.852, 0.917, 0.972, 1.018, 1.054, 1.082, 1.101, 1.113, 1.12, 1.121, 1.118, 1.111, 1.102, 1.092, 1.08, 1.068, 1.056, 1.045, 1.034, 1.024, 1.016, 1.008, 1.002, 0.997, 0.992, 0.989, 0.987, 0.986, 0.985, 0.985, 0.986, 0.987, 0.988, 0.989, 0.991, 0.992, 0.994, 0.995, 0.996);            /* EXPRESSIVE spring, settle 583ms */
  --mo-ease-out:cubic-bezier(0.22,1,0.36,1);
  --mo-rise:16px;
}

/* Reduced-motion guard (the ONLY place !important is permitted -- a11y reset). */
@media (prefers-reduced-motion: reduce){
  html.mo-js .mo-reveal,
  html.mo-js .mo-stagger > *{ opacity:1 !important; transform:none !important; transition:none !important; }
  [class*="mo-"]{ animation:none !important; }
}

/* Scroll-reveal utilities. Hidden state applies ONLY when site.motion.js has
 * added html.mo-js -- so no-JS visitors always see content (no-JS-safe). */
@media (prefers-reduced-motion: no-preference){
  html.mo-js .mo-reveal:not(.mo-stagger){ opacity:0; transform:translateY(var(--mo-rise)); transition:opacity var(--mo-slow) ease, transform var(--mo-slow) var(--mo-ease-spring); will-change:opacity,transform; }
  html.mo-js .mo-reveal:not(.mo-stagger).mo-in{ opacity:1; transform:none; }
  html.mo-js .mo-reveal.mo-fade:not(.mo-stagger){ transform:none; }
  html.mo-js .mo-reveal.mo-scale:not(.mo-stagger){ transform:scale(0.96); }
  html.mo-js .mo-reveal.mo-scale:not(.mo-stagger).mo-in{ transform:none; }
  html.mo-js .mo-stagger > *{ opacity:0; transform:translateY(var(--mo-rise)); transition:opacity var(--mo-slow) ease, transform var(--mo-slow) var(--mo-ease-spring); will-change:opacity,transform; }
  html.mo-js .mo-stagger > *.mo-in{ opacity:1; transform:none; }
}
html.mo-js .mo-143dd5{ --mo-rise:16px; }

/* M001 -- hover.card-lift -- * .pcard
   The base build already reveals sections on scroll but the product cards have no hover response. A snappy spring lift signals 'pick me up' on a fun, tactile body-care brand. Transform-only (GPU-cheap); EXPRESSIVE spring gives a small bounce that fits the candy personality. No reveal added -- the section .fade-in already covers entrance. */
.mo-5a9076{ transition: transform var(--mo-base) var(--mo-ease-spring); }
.mo-5a9076:hover{ transform: translateY(-6px); }
