/* Small, one-time accents for the static public pages. Content stays visible
   until the animation starts, so a blocked script never hides information. */
@keyframes preview-enter {
  from { opacity: .72; transform: translateY(9px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes preview-range {
  from { opacity: .35; transform: scaleX(.04); }
  to { opacity: 1; transform: scaleX(1); }
}

@keyframes preview-bar {
  from { transform: scaleX(.05); }
  to { transform: scaleX(1); }
}

@keyframes preview-step-enter {
  from { opacity: .7; transform: translateX(-8px); }
  to { opacity: 1; transform: translateX(0); }
}

@keyframes preview-step-rule {
  from { transform: scaleX(0); }
  to { transform: scaleX(1); }
}

.preview-enter {
  animation: preview-enter .58s cubic-bezier(.2,.7,.3,1) both;
}

.preview-range .lp-span {
  transform-origin: center;
  animation: preview-range .72s cubic-bezier(.2,.7,.3,1) both;
}

.pl-measure.preview-bars .pl-bar .track i {
  transform-origin: left;
  animation: preview-bar .7s cubic-bezier(.2,.7,.3,1) both;
}

.lp-step.preview-step-enter {
  animation: preview-step-enter .52s cubic-bezier(.2,.7,.3,1) both;
  animation-delay: calc(var(--i, 0) * 65ms);
}

.lp-step.preview-step-enter::before {
  animation: preview-step-rule .55s cubic-bezier(.2,.7,.3,1) both;
  animation-delay: calc(var(--i, 0) * 65ms + 120ms);
}

@media (prefers-reduced-motion: reduce) {
  .preview-enter,
  .preview-range .lp-span,
  .pl-measure.preview-bars .pl-bar .track i,
  .lp-step.preview-step-enter,
  .lp-step.preview-step-enter::before {
    animation: none !important;
  }
}
