/* ==========================================================================
   BBM — motion
   Lightweight, purposeful movement: content reveals once, the hero headline
   rises, the route truck drives. Nothing loops except the thin coral marquee,
   nothing hijacks scroll, and everything stops for reduced motion.
   ========================================================================== */

/* Scroll reveal is opt-in on [data-reveal]; without JS the content is simply
   present and readable because the gate requires html.js. Keep opacity out
   of the hidden state: a missed observer must never make real page content
   invisible. The reveal is a short upward settle only. */
.js [data-reveal] {
  transform: translateY(18px);
  transition: transform .65s var(--ease-out);
}
.js [data-reveal].is-visible {
  transform: none;
}

/* Headline rise — two short lines, once, on first paint. */
@media (prefers-reduced-motion: no-preference) {
  .js .at-display__mask > span {
    animation: at-rise .85s var(--ease-out) both;
  }
  .js .at-display__mask:nth-child(2) > span {
    animation-delay: .09s;
  }
}

@keyframes at-rise {
  from { transform: translateY(108%); }
  to { transform: translateY(0); }
}

/* Nav sheet and scrim already transition in bbm.css; keep the page still
   while the sheet is open so the background cannot scroll behind it. */
body.nav-open { overflow: hidden; }

/* Print: no reveals, no fixed navigation, no decorative bands. */
@media print {
  .js [data-reveal] { opacity: 1 !important; transform: none !important; }
  .theme-bar, .app-bar, .nav-sheet, .nav-scrim, .bottom-nav,
  .at-marquee, .sf-legal, .skip-link { display: none !important; }
  body { background: #fff; color: #000; padding-bottom: 0; }
  .site-footer { background: #fff; color: #000; }
  .sf-invite, .sf-invite__sub, .sf-phone__number, .sf-link, .sf-kicker,
  .sf-contact__label, .sf-copy, .sf-areas li, .sf-legal a { color: #000; }
  .at-cta, .at-fleet, .at-story__grid, .section--stage, .pricing-banner,
  .cta-band { background: #fff !important; color: #000 !important; }
  .page-hero__art { display: none; }
}

/* One global off-switch for anyone who asks the system for less motion. */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
  .js [data-reveal] { opacity: 1; transform: none; }
  .at-marquee__track { animation: none; }
  .at-route__dash { animation: none; }
  .at-scene { opacity: 1; }
  .at-rail__truck { transition: none; }
  .btn:hover, .at-btn:hover, .card:hover, .at-fleet__item:hover { transform: none; }
  .bottom-nav.is-yielding { transition: none; }
}
