/* ========================
   STATE / MOTION — Transitions, animations, reduced-motion
   ======================== */

.reveal {
    opacity: 0;
    transform: translateY(26px);
    transition: opacity .9s cubic-bezier(.2,.7,.2,1),
                transform .9s cubic-bezier(.2,.7,.2,1);
}
.reveal[data-shown] {
    opacity: 1;
    transform: none;
}
.hero .reveal {
    transition-duration: 1.05s;
}

/* stagger delays */
.d1 { transition-delay: .05s; }
.d2 { transition-delay: .18s; }
.d3 { transition-delay: .31s; }
.d4 { transition-delay: .44s; }
.d5 { transition-delay: .57s; }

@keyframes bob {
    0%, 100% { transform: translateY(0);  }
    50%       { transform: translateY(5px); }
}

@media (prefers-reduced-motion: reduce) {
    * { animation: none !important; transition: none !important; }
    .reveal { opacity: 1; transform: none; }
    :where(html) { scroll-behavior: auto; }
}
