/**
 * Vocabulaire de mouvement du site, partagé par toutes les animations GSAP.
 * Miroir des variables CSS `--ease-*` / `--dur-*` de main.css.
 *
 * Les courbes sont enregistrées sous ces noms par le plugin gsap.client.ts.
 */
export const EASE = {
  /** Sortie longue et douce : un élément porté par l'air, qui se pose. */
  air: 'air',
  /** Accélération puis décélération : masques et volets qui traversent. */
  airInOut: 'air.inOut',
} as const

/** Définitions cubic-bezier des courbes ci-dessus. */
export const EASE_CURVES: Record<(typeof EASE)[keyof typeof EASE], string> = {
  air: '0.16, 1, 0.3, 1',
  'air.inOut': '0.65, 0, 0.35, 1',
}

/** Durées en secondes. */
export const DURATION = {
  fast: 0.6,
  base: 1.1,
  slow: 1.6,
  cinematic: 2.6,
} as const

/** Décalages entre éléments d'une même séquence, en secondes. */
export const STAGGER = {
  lines: 0.12,
  items: 0.09,
} as const

/**
 * Requêtes partagées par gsap.matchMedia() dans tout le site.
 * `desktop` et `compact` sont complémentaires : l'une des deux est toujours vraie,
 * ce qui garantit l'exécution des animations à toutes les largeurs.
 */
export const MEDIA = {
  desktop: '(min-width: 1024px)',
  compact: '(max-width: 1023.98px)',
  reduce: '(prefers-reduced-motion: reduce)',
  hover: '(hover: hover) and (pointer: fine)',
} as const

export type MotionConditions = Record<keyof typeof MEDIA, boolean>
