/* ============================================================
   Motion — GNOME shell + window choreography
   ============================================================ */

@keyframes ud-spin { to { transform: rotate(360deg); } }

@keyframes ud-tip-in {
  from { opacity: 0; transform: scale(.86); }
  to   { opacity: 1; transform: scale(1); }
}

/* Window open: scale from ~92% with fade — matches GNOME's grow */
@keyframes ud-window-open {
  from { opacity: 0; transform: scale(.92) translateY(8px); }
  to   { opacity: 1; transform: scale(1) translateY(0); }
}
/* Window close: shrink back */
@keyframes ud-window-close {
  from { opacity: 1; transform: scale(1); }
  to   { opacity: 0; transform: scale(.9) translateY(6px); }
}
/* Minimize: shrink toward its dock icon */
@keyframes ud-window-minimize {
  from { opacity: 1; transform: scale(1); filter: blur(0); }
  to   { opacity: 0; transform: scale(.42) translate(var(--min-x, 0px), var(--min-y, 0px)); filter: blur(1.5px); }
}
@keyframes ud-window-restore {
  from { opacity: 0; transform: scale(.62) translate(var(--min-x, 0px), var(--min-y, 0px)); }
  to   { opacity: 1; transform: scale(1); }
}
/* Urgency: the GNOME "bounce" on a window that demands attention */
@keyframes ud-urgent {
  0%, 100% { box-shadow: var(--shadow-window), 0 0 0 0 color-mix(in srgb, var(--accent) 60%, transparent); }
  50%      { box-shadow: var(--shadow-window), 0 0 0 7px color-mix(in srgb, var(--accent) 0%, transparent); }
}

/* Dock icon launch "bounce" (Ubuntu dock) */
@keyframes ud-dock-bounce {
  0%   { transform: translateY(0) scale(1); }
  28%  { transform: translateY(-14px) scale(1.04); }
  55%  { transform: translateY(2px) scale(.98); }
  100% { transform: translateY(0) scale(1); }
}
@keyframes ud-dock-urgent {
  0%, 100% { transform: translateY(0) rotate(0); }
  15%      { transform: translateY(-6px) rotate(-7deg); }
  35%      { transform: translateY(0) rotate(6deg); }
  55%      { transform: translateY(-3px) rotate(-4deg); }
  75%      { transform: translateY(0) rotate(2deg); }
}

@keyframes ud-fade-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes ud-fade-out { from { opacity: 1; } to { opacity: 0; } }

@keyframes ud-pop-in {
  from { opacity: 0; transform: translateY(-8px) scale(.97); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}
@keyframes ud-pop-out {
  from { opacity: 1; transform: translateY(0) scale(1); }
  to   { opacity: 0; transform: translateY(-6px) scale(.985); }
}
@keyframes ud-menu-in {
  from { opacity: 0; transform: scale(.94) translateY(-4px); }
  to   { opacity: 1; transform: scale(1) translateY(0); }
}

@keyframes ud-notif-in {
  from { opacity: 0; transform: translate(-50%, -14px) scale(.94); }
  to   { opacity: 1; transform: translate(-50%, 0) scale(1); }
}
@keyframes ud-notif-out {
  from { opacity: 1; transform: translate(-50%, 0) scale(1); }
  to   { opacity: 0; transform: translate(-50%, -10px) scale(.96); }
}
@keyframes ud-toast-in {
  from { opacity: 0; transform: translate(-50%, 20px); }
  to   { opacity: 1; transform: translate(-50%, 0); }
}
@keyframes ud-toast-out {
  from { opacity: 1; transform: translate(-50%, 0); }
  to   { opacity: 0; transform: translate(-50%, 16px); }
}

@keyframes ud-overview-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}
@keyframes ud-overview-grid-in {
  from { opacity: 0; transform: scale(.94); }
  to   { opacity: 1; transform: scale(1); }
}
@keyframes ud-appgrid-slide-left {
  from { transform: translateX(46px); opacity: 0; }
  to   { transform: translateX(0); opacity: 1; }
}
@keyframes ud-appgrid-slide-right {
  from { transform: translateX(-46px); opacity: 0; }
  to   { transform: translateX(0); opacity: 1; }
}

@keyframes ud-flash {
  0%   { opacity: 0; }
  18%  { opacity: .85; }
  100% { opacity: 0; }
}

@keyframes ud-osd-in {
  0%   { opacity: 0; transform: scale(.86); }
  12%  { opacity: 1; transform: scale(1); }
  75%  { opacity: 1; transform: scale(1); }
  100% { opacity: 0; transform: scale(.99); }
}

@keyframes ud-shake {
  0%, 100% { transform: translateX(0); }
  20%      { transform: translateX(-7px); }
  40%      { transform: translateX(6px); }
  60%      { transform: translateX(-4px); }
  80%      { transform: translateX(3px); }
}

/* Boot: the Ubuntu plymouth five-dot sweep */
@keyframes ud-boot-dot {
  0%   { opacity: .18; transform: scale(.82); }
  40%  { opacity: 1;   transform: scale(1.1); }
  100% { opacity: .18; transform: scale(.82); }
}

/* Session fade used by login → desktop and desktop → lock */
@keyframes ud-session-in {
  from { opacity: 0; transform: scale(1.03); filter: blur(3px); }
  to   { opacity: 1; transform: scale(1); filter: blur(0); }
}

@keyframes ud-marquee {
  from { transform: translateX(0); }
  to   { transform: translateX(-24px); }
}

/* Respect the OS + in-app "Reduce Animations" accessibility toggle */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
  }
}
:root[data-reduce-motion="true"] *,
:root[data-reduce-motion="true"] *::before,
:root[data-reduce-motion="true"] *::after {
  animation-duration: .01ms !important;
  animation-iteration-count: 1 !important;
  transition-duration: .01ms !important;
}
