:root {
  --ease: cubic-bezier(0.2, 0.8, 0.2, 1);
  --t-fast: 120ms;
  --t-med: 220ms;
  --t-slow: 340ms;
}
.press {
  transition: transform var(--t-fast) var(--ease), box-shadow var(--t-med) var(--ease), background-color var(--t-med) var(--ease);
  -webkit-tap-highlight-color: transparent;
}
@media (hover: hover) {
  .press:hover { transform: translateY(-1px); }
}
.press:active { transform: scale(0.97); }
:focus-visible { outline: 2px solid var(--focus, currentColor); outline-offset: 2px; }

@keyframes rise { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
.rise { animation: rise var(--t-slow) var(--ease) both; animation-delay: calc(var(--i, 0) * 40ms); }

@keyframes shimmer { from { background-position: 200% 0; } to { background-position: -200% 0; } }
.skeleton {
  border-radius: 8px;
  color: transparent !important;
  background: linear-gradient(90deg, var(--skel-a) 25%, var(--skel-b) 50%, var(--skel-a) 75%);
  background-size: 200% 100%;
  animation: shimmer 1.4s linear infinite;
}

@keyframes spin { to { transform: rotate(360deg); } }
.spin { animation: spin 0.8s linear infinite; }

@keyframes shake { 20%, 60% { transform: translateX(-5px); } 40%, 80% { transform: translateX(5px); } }
.shake { animation: shake 0.32s var(--ease); }

@keyframes pop { from { opacity: 0; transform: translateY(8px) scale(0.96); } to { opacity: 1; transform: none; } }
.pop { animation: pop var(--t-med) var(--ease) both; }

@keyframes draw { to { stroke-dashoffset: 0; } }
.draw { stroke-dasharray: 60; stroke-dashoffset: 60; animation: draw 0.5s var(--ease) 0.05s forwards; }

@keyframes growx { from { transform: scaleX(0); } to { transform: scaleX(1); } }
.grow-x { transform-origin: left center; animation: growx 0.6s var(--ease) both; }
@keyframes growy { from { transform: scaleY(0); } to { transform: scaleY(1); } }
.grow-y { transform-box: fill-box; transform-origin: bottom; animation: growy 0.55s var(--ease) both; }

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