/* Shared opt-in entrances. No hidden state before JS, and no editor animation. */
@media (prefers-reduced-motion: no-preference) {
  main:has([data-gp-reveal]) { overflow-x: clip; }
  .gp-reveal-pending { opacity: 0; }
  .gp-reveal {
    --gp-reveal-x: 0px;
    --gp-reveal-y: 20px;
    animation: gp-enter var(--gp-reveal-duration, 960ms) cubic-bezier(.22, .65, .25, 1) var(--gp-reveal-delay, 0ms) both;
  }
  .gp-reveal[data-gp-reveal="left"] { --gp-reveal-x: -24px; --gp-reveal-y: 0px; }
  .gp-reveal[data-gp-reveal="right"] { --gp-reveal-x: 24px; --gp-reveal-y: 0px; }
  .gp-reveal[data-gp-reveal="fade"] { --gp-reveal-y: 0px; }
}
@keyframes gp-enter {
  from { opacity: 0; transform: translate(var(--gp-reveal-x), var(--gp-reveal-y)); }
  to { opacity: 1; transform: translate(0, 0); }
}
@media print { .gp-reveal, .gp-reveal-pending { animation: none !important; opacity: 1 !important; } }
