/* Motion: sections rise into view as they are scrolled to, the hero text settles in, cards react to touch.
   Nothing is hidden unless theme.js adds .reveal, so the page stays complete without JavaScript. */
@layer utilities {
    .reveal { opacity: 0; transform: translateY(22px); transition: opacity .7s var(--ease), transform .7s var(--ease); }
    .reveal.is-in { opacity: 1; transform: none; }

    .hero-title, .hero-subtitle, .hero-cta { animation: hero-rise .8s var(--ease) both; }
    .hero-subtitle { animation-delay: .12s; }
    .hero-cta { animation-delay: .24s; }
    .hero-search .search-panel { animation: hero-rise .9s .2s var(--ease) both; }
    @keyframes hero-rise { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: none; } }

    .quote-card, .preset-card, .vehicle-card, .post-card, .airport-card { transition: transform .25s var(--ease), box-shadow .25s var(--ease), border-color .25s var(--ease); }
    .quote-card:hover, .vehicle-card:hover, .post-card:hover, .airport-card:hover { transform: translateY(-3px); box-shadow: var(--shadow); }

    @media (prefers-reduced-motion: reduce) {
        .reveal { opacity: 1; transform: none; transition: none; }
        .hero-title, .hero-subtitle, .hero-cta, .hero-search .search-panel { animation: none; }
        .hero-image { transition: none; transform: none; }
    }
}
