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

@keyframes ping {
  75%, 100% { transform: scale(2); opacity: 0; }
}

@keyframes pulse {
  50% { opacity: 0.5; }
}

@keyframes slide-down {
  0% { transform: translateY(-10%); opacity: 0; }
  100% { transform: translateY(0); opacity: 1; }
}

@keyframes bounce-out {
  0% { transform: scale(1); }
  25% { transform: scale(0.95); }
  50% { opacity: 1; transform: scale(1.1); }
  100% { opacity: 0; transform: scale(0.3); }
}

@keyframes fade-in-up {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes jiggle {
  0% { transform: translateX(0); box-shadow: 0 0 0 0 rgba(59, 130, 246, 0); }
  12% { transform: translateX(-4px) rotate(-0.5deg); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.18); }
  24% { transform: translateX(4px) rotate(0.5deg); box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.22); }
  36% { transform: translateX(-3px) rotate(-0.4deg); box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.22); }
  48% { transform: translateX(3px) rotate(0.3deg); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.18); }
  60% { transform: translateX(-2px); box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.12); }
  72% { transform: translateX(2px); box-shadow: 0 0 0 1px rgba(59, 130, 246, 0.08); }
  100% { transform: translateX(0); box-shadow: 0 0 0 0 rgba(59, 130, 246, 0); }
}

@keyframes fade-in {
  from { opacity: 0; }
}

@keyframes fade-out {
  to { opacity: 0; }
}

@keyframes slide-from-right {
  from { transform: translateX(60px); }
}

@keyframes slide-up {
  from { transform: translateY(130px); }
}

@keyframes slide-to-left {
  to { transform: translateX(-30px); }
}

@keyframes tab-enter {
  0% { opacity: 0; transform: translateY(10px); }
  100% { opacity: 1; transform: translateY(0); }
}

@keyframes tab-leave {
  0% { opacity: 1; transform: translateY(0); }
  100% { opacity: 0; transform: translateY(-10px); }
}

@keyframes signature-wipe {
  from { clip-path: polygon(0 0, 0 0, 0 100%, 0 100%); }
  to { clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); }
}

@keyframes ocr-scan {
  0%, 100% { top: 0; opacity: 0; }
  10% { opacity: 1; }
  50% { top: 100%; opacity: 1; }
  60% { opacity: 0; }
}

::view-transition-old(root) {
  animation: 90ms cubic-bezier(0.4, 0, 1, 1) both fade-out,
    300ms cubic-bezier(0.4, 0, 0.2, 1) both slide-to-left;
}

::view-transition-new(root) {
  animation: 210ms cubic-bezier(0, 0, 0.2, 1) 90ms both fade-in,
    300ms cubic-bezier(0.4, 0, 0.2, 1) both slide-from-right;
}

@layer utilities {
  .animate-signature {
    animation: signature-wipe 2s cubic-bezier(0.4, 0, 0.2, 1) forwards;
    display: inline-block;
  }

  .animate-slide-down {
    animation: var(--animate-slide-down);
  }

  .animate-bounce-out {
    animation: var(--animate-bounce-out);
  }

  .animate-fade-in-up {
    animation: var(--animate-fade-in-up);
  }

  .animate-jiggle {
    animation: var(--animate-jiggle);
  }
}
