@keyframes gshift { 0% { background-position: 0% 0%; } 100% { background-position: 100% 100%; } }
@keyframes floatA { 0%, 100% { transform: translateY(0) rotate(-3deg); } 50% { transform: translateY(-14px) rotate(-3deg); } }
@keyframes floatB { 0%, 100% { transform: translateY(0) rotate(5deg); } 50% { transform: translateY(-10px) rotate(5deg); } }
@keyframes floatC { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-8px); } }
@keyframes drift { 0%, 100% { transform: translate(0, 0) scale(1); } 50% { transform: translate(-30px, 24px) scale(1.08); } }
@keyframes ring75 { from { stroke-dashoffset: 163.4; } to { stroke-dashoffset: 40.8; } }
@keyframes ring90 { from { stroke-dashoffset: 276.5; } to { stroke-dashoffset: 27.6; } }
@keyframes bar { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(31, 184, 155, 0.55); } 100% { box-shadow: 0 0 0 10px rgba(31, 184, 155, 0); } }
@keyframes confetti {
  0% { transform: translateY(-20px) rotate(0); opacity: 0; }
  10% { opacity: 1; }
  100% { transform: translateY(300px) rotate(540deg); opacity: 0; }
}
@keyframes textshift { 0% { background-position: 0% 50%; } 100% { background-position: 100% 50%; } }

.pulse-dot { width: 8px; height: 8px; border-radius: 999px; background: var(--teal-bright); animation: pulse 1.8s ease-out infinite; }

/* Scroll reveal: only hidden when JS has opted in (html.rv). */
html.rv [data-reveal] {
  opacity: 0; transform: translateY(28px);
  transition: opacity 0.8s cubic-bezier(0.2, 0.7, 0.2, 1), transform 0.8s cubic-bezier(0.2, 0.7, 0.2, 1);
  transition-delay: var(--delay, 0s);
}
html.rv [data-reveal].in { opacity: 1; transform: none; }

.progress-bar {
  position: absolute; inset-inline-start: 0; bottom: -1px; height: 3px; width: 0;
  border-radius: 3px; background: linear-gradient(90deg, var(--teal), var(--teal-bright), var(--teal-mint));
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; scroll-behavior: auto !important; }
}
