/* =========================================================
   GD Project Solutions — Motion tokens
   Industrial dry easing. Motion supports traceability and
   continuity from opportunity to delivery — never decoration.
   Always respects prefers-reduced-motion.
   ========================================================= */

:root {
  --mo-fast: 120ms;  /* @kind other */
  --mo-base: 200ms;  /* @kind other */
  --mo-slow: 320ms;  /* @kind other */

  --mo-ease:     cubic-bezier(.2,.6,.2,1);     /* @kind other */
  --mo-ease-out: cubic-bezier(.16,.84,.32,1);  /* @kind other */
  /* Industrial dry easing — default for microinteractions. */
  --mo-dry:      cubic-bezier(.65, 0, .35, 1); /* @kind other */
  --mo-std:      cubic-bezier(.4, 0, .2, 1);   /* @kind other */
}

/* Scroll-reveal hook used across the system. */
@media (prefers-reduced-motion: no-preference) {
  .anim {
    opacity: 1;
    transform: none;
    transition: opacity 600ms var(--mo-ease), transform 600ms var(--mo-ease);
  }
  .js .anim {
    opacity: 0;
    transform: translateY(12px);
  }
  .js .anim.is-in { opacity: 1; transform: none; }
  .js .anim[data-delay="1"].is-in { transition-delay: 60ms; }
  .js .anim[data-delay="2"].is-in { transition-delay: 120ms; }
  .js .anim[data-delay="3"].is-in { transition-delay: 180ms; }
}

/* ---------- Reduced motion — global kill switch ---------- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
  }
  .anim { opacity: 1 !important; transform: none !important; }
}
