/* Board owns position:relative and a stable aspect ratio. The outer token's
   left/top remain percentages through resize; animate only its inner sprite. */
.journey-avatar {
  position: absolute;
  left: 0;
  top: 0;
  transform: translate(-50%, -80%);
  z-index: 4;
  /* No left/top transitions: WAAPI owns the route and traverses every space. */
  transition: none;
}

.journey-avatar [data-journey-sprite],
.journey-avatar .journey-avatar__sprite {
  display: block;
  transform-origin: 50% 85%;
}

.journey-avatar[data-journey-moving="true"] {
  z-index: 5;
  will-change: left, top;
}

.journey-avatar[data-journey-moving="true"] [data-journey-sprite],
.journey-avatar[data-journey-moving="true"] .journey-avatar__sprite {
  animation-duration: 400ms;
  animation-timing-function: ease-in-out;
  animation-iteration-count: var(--journey-motion-iterations, 1);
  animation-fill-mode: none;
  will-change: transform;
}

.journey-avatar[data-journey-moving="true"][data-journey-motion="walk"] [data-journey-sprite],
.journey-avatar[data-journey-moving="true"][data-journey-motion="walk"] .journey-avatar__sprite {
  animation-name: journey-walk;
}

.journey-avatar[data-journey-moving="true"][data-journey-motion="bob"] [data-journey-sprite],
.journey-avatar[data-journey-moving="true"][data-journey-motion="bob"] .journey-avatar__sprite {
  animation-name: journey-bob;
}

.journey-avatar[data-journey-moving="true"][data-journey-motion="swim"] [data-journey-sprite],
.journey-avatar[data-journey-moving="true"][data-journey-motion="swim"] .journey-avatar__sprite {
  animation-name: journey-swim;
}

.journey-avatar[data-journey-moving="true"][data-journey-motion="fly"] [data-journey-sprite],
.journey-avatar[data-journey-moving="true"][data-journey-motion="fly"] .journey-avatar__sprite {
  animation-name: journey-fly;
}

@keyframes journey-walk {
  0%, 100% { transform: translateY(0) rotate(0); }
  25% { transform: translateY(-10%) rotate(-5deg); }
  50% { transform: translateY(0) rotate(0); }
  75% { transform: translateY(-10%) rotate(5deg); }
}

@keyframes journey-bob {
  0%, 100% { transform: translateY(0) scale(1); }
  50% { transform: translateY(-13%) scale(1.03, .97); }
}

@keyframes journey-swim {
  0%, 100% { transform: translateY(0) rotate(-4deg); }
  50% { transform: translateY(-7%) rotate(4deg); }
}

@keyframes journey-fly {
  0%, 100% { transform: translateY(-6%) rotate(-2deg); }
  50% { transform: translateY(-17%) rotate(3deg); }
}

@media (prefers-reduced-motion: reduce) {
  .journey-avatar[data-journey-moving="true"] [data-journey-sprite],
  .journey-avatar[data-journey-moving="true"] .journey-avatar__sprite {
    animation: none;
  }
}
