.pd-visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* Motion primitives - opt-in, JS-free, reduced-motion-safe.
 * Modules may add these classes to elements that benefit from
 * subtle hover lift or initial reveal. They use existing tokens
 * only and degrade to a no-op under prefers-reduced-motion. */

.pd-hover-lift {
  transition: transform 160ms ease, box-shadow 160ms ease;
}

.pd-hover-lift:hover,
.pd-hover-lift:focus-within {
  transform: translateY(-2px);
  box-shadow: var(--pd-shadow-md);
}

.pd-reveal {
  opacity: 1;
}

.pd-reveal--fade-up {
  animation: pd-reveal-fade-up 480ms ease both;
}

.pd-reveal--delay-1 {
  animation-delay: 80ms;
}

.pd-reveal--delay-2 {
  animation-delay: 160ms;
}

.pd-reveal--delay-3 {
  animation-delay: 240ms;
}

@keyframes pd-reveal-fade-up {
  from {
    opacity: 0;
    transform: translateY(8px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@media (prefers-reduced-motion: reduce) {
  .pd-hover-lift {
    transition: none;
  }
  .pd-hover-lift:hover,
  .pd-hover-lift:focus-within {
    transform: none;
    box-shadow: none;
  }
  .pd-reveal--fade-up {
    animation: none;
  }
}
