/* Calm, character-led motion. Timing stays deliberately slow and soft. */
.ticker {
  padding-inline: 0;
}

.ticker-track {
  display: flex;
  width: max-content;
  min-width: 200%;
  animation: ticker-roll 24s linear infinite;
  will-change: transform;
}

.ticker-group {
  flex: 0 0 auto;
  min-width: max-content;
  padding-right: 2rem;
}

.ticker:hover .ticker-track {
  animation-play-state: paused;
}

.hero-art img {
  animation: desk-float 6s ease-in-out infinite;
  transform-origin: 50% 75%;
  will-change: transform;
}

.hero-art .burst {
  animation: stamp-pulse 4.8s ease-in-out infinite;
}

.character img {
  animation: portrait-breathe 7s ease-in-out infinite;
  will-change: transform;
}

.gallery-grid img {
  transition: transform .55s cubic-bezier(.2,.75,.25,1),
              box-shadow .55s ease,
              filter .55s ease;
}

.gallery-grid img:nth-child(odd) {
  animation: archive-drift-a 8s ease-in-out infinite;
}

.gallery-grid img:nth-child(even) {
  animation: archive-drift-b 9s ease-in-out infinite;
}

.gallery-grid img:hover {
  animation-play-state: paused;
  transform: translateY(-8px) rotate(0deg) scale(1.025);
  box-shadow: 9px 11px 0 var(--ink);
  filter: saturate(1.08);
}

.rules article,
.steps article {
  transition: transform .45s cubic-bezier(.2,.75,.25,1), box-shadow .45s ease;
}

.rules article:hover,
.steps article:hover {
  transform: translate(-2px,-5px) rotate(-.35deg);
  box-shadow: 12px 14px 0 var(--ink);
}

.reveal-soft {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity .9s ease, transform .9s cubic-bezier(.2,.7,.2,1);
}

.reveal-soft.is-visible {
  opacity: 1;
  transform: translateY(0);
}

@keyframes ticker-roll {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}

@keyframes desk-float {
  0%,100% { transform: translateY(0) rotate(-.3deg); }
  50% { transform: translateY(-12px) rotate(.45deg); }
}

@keyframes stamp-pulse {
  0%,100% { transform: rotate(9deg) scale(1); }
  50% { transform: rotate(6deg) scale(1.045); }
}

@keyframes portrait-breathe {
  0%,100% { transform: rotate(-.5deg) translateY(0); }
  50% { transform: rotate(.6deg) translateY(-7px); }
}

@keyframes archive-drift-a {
  0%,100% { transform: rotate(-1deg) translateY(0); }
  50% { transform: rotate(.2deg) translateY(-5px); }
}

@keyframes archive-drift-b {
  0%,100% { transform: rotate(1deg) translateY(-3px); }
  50% { transform: rotate(-.25deg) translateY(3px); }
}

@media (prefers-reduced-motion: reduce) {
  .ticker-track,
  .hero-art img,
  .hero-art .burst,
  .character img,
  .gallery-grid img {
    animation: none !important;
  }

  .reveal-soft {
    opacity: 1;
    transform: none;
    transition: none;
  }
}
