html[data-bs-motion] {
  --bs-motion-duration: 650ms;
  --bs-motion-ease: cubic-bezier(.22,.6,.28,1);
  --bs-motion-step: 75ms;
}
/* Static visibility is the fallback; only running Web Animations alter it. */
html[data-bs-motion] body main .reveal {
  opacity: 1;
  transform: none;
  transition: none !important;
}
html[data-bs-motion] [data-motion="image"] {transform-origin: center}
html[data-bs-motion] [data-motion="rule"]::before {transform-origin:left center}
html[data-bs-motion] main :is(.btn,.line-link,.text-link) {
  transition: background-color 180ms ease, color 180ms ease, border-color 180ms ease;
}
html[data-bs-motion] main :is(.button,.btn):focus-visible,
html[data-bs-motion] main :is(.text-link,.line-link):focus-visible {
  outline:2px solid currentColor;
  outline-offset:5px;
}
@media (hover:hover) and (prefers-reduced-motion:no-preference) {
  html[data-bs-motion] main :is(.live-project,.live-project-card,.live-project-tile,.live-project,.project-card,.related-card,.bs-related-card) img {
    transition: transform 360ms var(--bs-motion-ease);
  }
  html[data-bs-motion] main :is(.live-project,.live-project-card,.live-project-tile,.project-card,.related-card,.bs-related-card):hover img {
    transform: scale(1.045);
  }
  html[data-bs-motion] main :is(.live-project,.live-project-card,.project-card) {
    transition:box-shadow 240ms ease;
  }
  html[data-bs-motion] main :is(.live-project,.live-project-card,.project-card):is(:hover,:focus-visible) {
    box-shadow:0 12px 28px #0c274625;
  }
  html[data-bs-motion] main :is(.text-link,.line-link,.button,.btn) :is(svg,[aria-hidden="true"]) {
    transition:transform 220ms var(--bs-motion-ease);
  }
  html[data-bs-motion] main :is(.text-link,.line-link,.button,.btn):is(:hover,:focus-visible) :is(svg,[aria-hidden="true"]) {
    transform:translateX(3px);
  }
}
html[data-bs-motion] [data-hero-slider] .hero-frame {transition-duration:650ms}
html[data-bs-motion] [data-hero-slider][data-motion="paused"] .hero-frame.is-active {animation-play-state: paused}
/* Begin with the first paint, not after the footer JavaScript has loaded. */
@media (prefers-reduced-motion:no-preference) {
  html[data-bs-motion] :is(.hero,.page-hero,.pv-hero,.project-case-heading) h1 {
    animation:bs-arrival-title 650ms var(--bs-motion-ease) both;
  }
  html[data-bs-motion] .hero-content :is(.eyebrow,.hero-audience,.hero-description),
  html[data-bs-motion] :is(.page-hero,.pv-hero,.project-case-heading) .lead {
    animation:bs-arrival-copy 600ms var(--bs-motion-ease) 70ms both;
  }
  html[data-bs-motion] :is(.hero,.page-hero,.pv-hero) :is(.actions,.hero-actions) {
    animation:bs-arrival-copy 550ms var(--bs-motion-ease) 140ms both;
  }
  html[data-bs-motion] :is(.hero,.page-hero,.pv-hero,.project-case-heading):focus-within :is(h1,.eyebrow,.hero-audience,.hero-description,.lead,.actions,.hero-actions) {
    animation:none;
  }
}
@keyframes bs-arrival-title {
  from {opacity:.4;transform:translateY(24px)}
  to {opacity:1;transform:none}
}
@keyframes bs-arrival-copy {
  from {opacity:.45;transform:translateY(16px)}
  to {opacity:1;transform:none}
}
@media (prefers-reduced-motion:reduce) {
  html[data-bs-motion] main *, html[data-bs-motion] main *::before, html[data-bs-motion] main *::after {
    animation: none !important;
    transition: none !important;
    scroll-behavior: auto !important;
  }
}
