:root {
  --duration-fast: 150ms; /* @kind other */    /* hover, toggles */
  --duration-normal: 250ms; /* @kind other */  /* reveals, transitions */
  --duration-slow: 350ms; /* @kind other */    /* modals, complex moves */
  --duration-reveal: 700ms; /* @kind other */  /* scroll-triggered entrance */
  --duration-draw: 1500ms; /* @kind other */   /* connector / path draw */

  /* The house curve. Used on essentially every transition. */
  --ease-brand: cubic-bezier(0.22, 1, 0.36, 1); /* @kind other */
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1); /* @kind other */

  --float-duration: 6s; /* @kind other */
  --float-slow-duration: 9s; /* @kind other */
  --blob-duration: 18s; /* @kind other */
}

@keyframes innorve-float-y {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-14px); }
}
@keyframes innorve-float-y-slow {
  0%, 100% { transform: translateY(0) rotate(-1deg); }
  50% { transform: translateY(-10px) rotate(1deg); }
}
@keyframes innorve-blob-drift {
  0%, 100% { transform: translate(0, 0) scale(1); }
  33% { transform: translate(40px, -30px) scale(1.08); }
  66% { transform: translate(-30px, 20px) scale(0.95); }
}
@keyframes innorve-dash-flow {
  to { stroke-dashoffset: -40; }
}
@keyframes innorve-reveal-up {
  from { opacity: 0; transform: translateY(28px); }
  to { opacity: 1; transform: none; }
}

.innorve-float { animation: innorve-float-y var(--float-duration) ease-in-out infinite; }
.innorve-float-slow { animation: innorve-float-y-slow var(--float-slow-duration) ease-in-out infinite; }
.innorve-blob { animation: innorve-blob-drift var(--blob-duration) ease-in-out infinite; }
.innorve-dash { stroke-dasharray: 8 12; animation: innorve-dash-flow 1.6s linear infinite; }

@media (prefers-reduced-motion: reduce) {
  .innorve-float, .innorve-float-slow, .innorve-blob, .innorve-dash { animation: none !important; }
}

@keyframes innorve-spin { to { transform: rotate(360deg); } }
@keyframes innorve-shimmer { to { background-position: -200% 0; } }

/* Overlay entrances. Radix's data-state animations, expressed as keyframes.
   Popover / dropdown / hover-card open at 96% scale over --duration-fast;
   sheets and drawers slide from their edge over --duration-slow. */
@keyframes innorve-pop {
  from { opacity: 0; transform: scale(0.96); }
  to { opacity: 1; transform: none; }
}
@keyframes innorve-fade {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes innorve-slide-right { from { transform: translateX(100%); } to { transform: none; } }
@keyframes innorve-slide-left { from { transform: translateX(-100%); } to { transform: none; } }
@keyframes innorve-slide-top { from { transform: translateY(-100%); } to { transform: none; } }
@keyframes innorve-slide-bottom { from { transform: translateY(100%); } to { transform: none; } }
@keyframes innorve-toast-in {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: none; }
}
@keyframes innorve-pulse {
  0%, 100% { opacity: 0.4; }
  50% { opacity: 1; }
}
