/* ============================================================
   MOTION — Parks Genie
   Restrained, iOS-native. Presses shrink; live things pulse;
   working things sweep. No decorative loops on resting content.
   Honor prefers-reduced-motion (consumers should gate loops).
   ============================================================ */

:root {
  /* easings */
  --ease-standard: cubic-bezier(.4, 0, .2, 1);
  --ease-out:      cubic-bezier(.16, 1, .3, 1);   /* sheets in   */
  --ease-sweep:    cubic-bezier(.5, 0, .3, 1);     /* working bar */

  /* durations */
  --dur-press:  .12s;
  --dur-toggle: .22s;
  --dur-sheet:  .42s;

  /* canonical interaction transforms */
  --press-scale: .97;
}

/* ---- the live "now" heartbeat — wraps a dot in an expanding ring ---- */
@keyframes pg-livepulse {
  0%      { box-shadow: 0 0 0 0 color-mix(in oklab, currentColor 60%, transparent); }
  70%,100%{ box-shadow: 0 0 0 7px transparent; }
}

/* ---- indeterminate "Genie is working" sweep ---- */
@keyframes pg-sweep {
  0%   { left: -45%; }
  100% { left: 102%; }
}

/* ---- three searching dots ---- */
@keyframes pg-pulse {
  0%,100% { opacity: .25; transform: scale(.8); }
  50%     { opacity: 1;   transform: scale(1); }
}

/* ---- urgent ring (closing soon) — accent, never alarm-red flash ---- */
@keyframes pg-ringpulse {
  0%,100% { opacity: .28; }
  50%     { opacity: .92; }
}

/* ---- spinner ---- */
@keyframes pg-spin { to { transform: rotate(360deg); } }

/* ---- lamp bob / sparkle twinkle (brand / sign-in only) ---- */
@keyframes pg-bob {
  0%,100% { transform: translateY(0); }
  50%     { transform: translateY(-9px); }
}
@keyframes pg-twinkle {
  0%,100% { opacity: .35; transform: scale(.8); }
  50%     { opacity: 1;   transform: scale(1.1); }
}

/* ---- sheet entrance ---- */
@keyframes pg-sheet-in {
  from { transform: translateY(100%); }
  to   { transform: translateY(0); }
}
@keyframes pg-scrim-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
  }
}
