@keyframes fadeUp {
  from {
    opacity: 0;
    transform: translateY(12px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.animate-fade-up {
  animation: fadeUp 0.35s cubic-bezier(0.4, 0, 0.2, 1) both;
  animation-delay: calc(var(--stagger, 0) * 1ms);
}

.animate-fade-up[data-delay="0"] { animation-delay: 0ms; }
.animate-fade-up[data-delay="50"] { animation-delay: 50ms; }
.animate-fade-up[data-delay="60"] { animation-delay: 60ms; }
.animate-fade-up[data-delay="100"] { animation-delay: 100ms; }
.animate-fade-up[data-delay="120"] { animation-delay: 120ms; }
.animate-fade-up[data-delay="150"] { animation-delay: 150ms; }
.animate-fade-up[data-delay="180"] { animation-delay: 180ms; }
.animate-fade-up[data-delay="200"] { animation-delay: 200ms; }
.animate-fade-up[data-delay="250"] { animation-delay: 250ms; }
.animate-fade-up[data-delay="300"] { animation-delay: 300ms; }
.animate-fade-up[data-delay="350"] { animation-delay: 350ms; }
.animate-fade-up[data-delay="240"] { animation-delay: 240ms; }
.animate-fade-up[data-delay="400"] { animation-delay: 400ms; }

@keyframes tap {
  0%,
  100% {
    transform: scale(1);
  }
  50% {
    transform: scale(0.96);
  }
}

.tap-feedback:active {
  animation: tap 180ms ease-out;
}

.stack--tight {
  gap: var(--space-2);
}

.stack--loose {
  gap: var(--space-6);
}

.section {
  margin-block: 0;
  padding-block: var(--space-2);
}

.section + .section {
  padding-top: var(--space-4);
}

.page-wrap--center {
  display: flex;
  flex-direction: column;
  justify-content: center;
  min-height: calc(100vh - var(--space-8));
  min-height: calc(100dvh - var(--space-8));
}

.empty-state {
  display: grid;
  place-items: center;
  gap: var(--space-3);
  min-height: 220px;
  padding: var(--space-5);
  text-align: center;
  color: var(--color-text-muted);
}

.empty-state .emoji {
  font-size: 40px;
}

.empty-state h1,
.empty-state h2,
.empty-state h3 {
  margin-bottom: var(--space-2);
}

.visually-hidden,
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.text-prewrap {
  white-space: pre-wrap;
}
