/* Motion tokens — shared easing and durations for reveal transitions.
   - Use only transform + opacity for GPU-friendly animations.
   - Do NOT change triggers/observers. Only the feel (easing/duration) is centralized here.
   - Tweak values below to adjust site-wide motion.
*/
:root{
  /* Easing: natural ease-out curve with gentle settle (matches existing theme usage) */
  --motion-ease-standard: cubic-bezier(.22,.61,.36,1);
  /* Alternative, slightly more relaxed ease for subtle elements */
  --motion-ease-soft: cubic-bezier(.25,.46,.45,.94);

  /* Durations */
  --motion-duration-fast: 200ms;   /* quick UI hints */
  --motion-duration-base: 600ms;   /* existing reveal timing kept for consistency */
  --motion-duration-extended: 1350ms; /* extended sequences (e.g., larger pattern rows) */
}

/* Presets (reference only; not applied automatically)
   - fadeIn:    opacity 0 -> 1
   - riseIn:    translateY(20px) -> 0 and opacity 0 -> 1
   - scaleIn:   scale(.985) -> 1 and opacity 0 -> 1
   These are documented here so authors know expected pairings.
*/
:root{
  --motion-fadeIn: opacity var(--motion-duration-base) var(--motion-ease-standard);
  --motion-riseIn: opacity var(--motion-duration-base) var(--motion-ease-standard), transform var(--motion-duration-base) var(--motion-ease-standard);
  --motion-scaleIn: opacity var(--motion-duration-base) var(--motion-ease-standard), transform var(--motion-duration-base) var(--motion-ease-standard);
}

/* Reduced motion: prefer near-instant transitions to respect user preference.
   Components may still apply stricter overrides locally (transform:none/opacity:1).
*/
@media (prefers-reduced-motion: reduce){
  :root{
    --motion-duration-fast: 1ms;
    --motion-duration-base: 1ms;
    --motion-duration-extended: 1ms;
  }
}

/* Component-level complement: snaps reveal lacked a reduced-motion override.
   Keep opacity/position steady when motion is reduced. */
@media (prefers-reduced-motion: reduce){
  .snap-item{
    transition: none !important;
    transform: none !important;
    opacity: 1 !important;
  }
}

