/* Open Design System – Interaction Animations */

/* ---------------------------------------------------------------------------
   Pointer affordance (SSOT)

   A native <button> resolves to `cursor: default`, and Tailwind's preflight
   does not override it. Every clickable surface in the system was therefore
   relying on an ad-hoc `cursor-pointer` class, which drifted: DS Buttons had
   it, raw <button> cards/chips/marquee cells did not — so identical-looking
   cards felt dead while <a>-based ones (browser default: pointer) did not.

   One base rule instead of N call sites. Applies to every marquee, chip, card
   hit layer and any future control, including ones not yet written.

   Wrapped in :where() so the rule carries ZERO specificity — an element-level
   selector would otherwise beat any single Tailwind `cursor-*` utility and
   silently break intentional ones (`cursor-grab` drag handles, `cursor-default`
   on an active tab) across all 9 platforms.
   --------------------------------------------------------------------------- */
:where(button:not(:disabled):not([aria-disabled='true'])),
:where([role='button']:not([aria-disabled='true'])),
:where(summary) {
  cursor: pointer;
}

/* Deliberately NOT `label[for]`: most labels point at text inputs, where a
   pointer cursor promises a click target that isn't one. Checkbox/radio labels
   opt in explicitly at their call site. */

:where(button:disabled),
:where([aria-disabled='true']) {
  cursor: not-allowed;
}

/* Typing indicator cursor pulse */
@keyframes pulse-cursor {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.3; }
}

.animate-pulse-cursor {
  animation: pulse-cursor 1.5s ease-in-out infinite;
}

/* Quick action hint animation - Very slow breathing glow */
@keyframes hint-pulse-ring {
  0% {
    opacity: 0.7;
  }
  50% {
    opacity: 1;
  }
  100% {
    opacity: 0.7;
  }
}

.animate-hint-pulse {
  border-color: rgba(243, 87, 187, 0.4) !important;
  background-color: rgba(243, 87, 187, 0.05) !important;
  animation: hint-pulse-ring 1s ease-in-out infinite !important;
}
