html { scroll-behavior: smooth; }
body { -webkit-font-smoothing: antialiased; }

.reveal {
  opacity: 0;
  transform: translateY(var(--reveal-y, 40px));
  transition: opacity 0.9s cubic-bezier(0.22, 1, 0.36, 1),
              transform 0.9s cubic-bezier(0.22, 1, 0.36, 1);
}
.reveal.in { opacity: 1; transform: translateY(0); }

.line-mask { overflow: hidden; }
.line-inner {
  transform: translateY(110%);
  transition: transform 0.85s cubic-bezier(0.22, 1, 0.36, 1);
}
.line-mask.in .line-inner,
.line-mask.in > .line-inner { transform: translateY(0); }

.art {
  opacity: 0;
  transform: scale(1.06);
  transition: opacity 1.1s cubic-bezier(0.22, 1, 0.36, 1),
              transform 1.1s cubic-bezier(0.22, 1, 0.36, 1);
}
.art.in { opacity: 1; transform: scale(1); }

@media (prefers-reduced-motion: reduce) {
  .reveal, .line-inner, .art { transition: none !important; }
}