/* ============================================================
   animations.css - keyframes + scroll-reveal utilities
   ============================================================ */

@keyframes pv-float {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-10px); }
}
@keyframes pv-shimmer {
    0% { background-position: 200% 0; }
    100% { background-position: -200% 0; }
}
@keyframes pv-toast-in {
    from { opacity: 0; transform: translateY(14px) scale(0.96); }
    to { opacity: 1; transform: translateY(0) scale(1); }
}
@keyframes pv-fade-up {
    from { opacity: 0; transform: translateY(26px); }
    to { opacity: 1; transform: translateY(0); }
}
@keyframes pv-fade-in {
    from { opacity: 0; }
    to { opacity: 1; }
}
@keyframes pv-rise {
    from { transform: translateY(8px); opacity: 0; }
    to { transform: translateY(0); opacity: 1; }
}
@keyframes pv-glow {
    from { box-shadow: inset 0 0 28px rgba(224, 35, 47, 0.38); }
    to { box-shadow: inset 0 0 48px rgba(224, 35, 47, 0.68); }
}
@keyframes pv-sheet-up {
    from { transform: translateY(100%); }
    to { transform: translateY(0); }
}

/* On-load fade for hero content */
.hero-copy, .hero-logo-wrap { animation: pv-fade-up var(--dur-4) var(--ease-out) both; }
.hero-copy { animation-delay: 0.12s; }

/* Scroll-reveal: elements start hidden, .in is added by reveal.js when they
   enter the viewport. Falls back to visible if JS is disabled. */
.reveal {
    opacity: 0;
    transform: translateY(26px);
    transition: opacity var(--dur-3) var(--ease-out), transform var(--dur-3) var(--ease-out);
    transition-delay: var(--reveal-delay, 0s);
    will-change: opacity, transform;
}
.reveal.in { opacity: 1; transform: none; }

/* Stagger cards as they reveal in a grid */
.grid > .reveal:nth-child(2), .grid-lg > .reveal:nth-child(2) { --reveal-delay: 0.06s; }
.grid > .reveal:nth-child(3), .grid-lg > .reveal:nth-child(3) { --reveal-delay: 0.12s; }
.grid > .reveal:nth-child(4), .grid-lg > .reveal:nth-child(4) { --reveal-delay: 0.18s; }
.grid > .reveal:nth-child(5), .grid-lg > .reveal:nth-child(5) { --reveal-delay: 0.24s; }
.grid > .reveal:nth-child(n+6), .grid-lg > .reveal:nth-child(n+6) { --reveal-delay: 0.3s; }

@media (prefers-reduced-motion: reduce) {
    .reveal { opacity: 1 !important; transform: none !important; }
    .hero-logo { animation: none; }
    .hero-copy, .hero-logo-wrap { animation: none; }
    .progress > span { animation: none; }
    .tab, .tab-ico, .more-sheet, .tab-scrim { transition: none; animation: none; }
    .tab:active .tab-ico { transform: none; }
}

/* No-JS safety: if reveal.js never runs, reveal content after a beat. */
.no-reveal-js .reveal { opacity: 1; transform: none; }
