/* Deliberate opacity/transform motion. No continuous animation or permanent layers. */
:is(.primary, .outline, .product-bottom button, .tabs button, .close) {
  transform-origin: center;
}
:is(.primary, .product-bottom button) { position: relative; }
:is(.primary, .product-bottom button)::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
  box-shadow: 0 8px 18px -6px #1269ef55;
  opacity: 0;
}
.product { transition: transform 180ms ease; }
.product:hover { transform: none; box-shadow: none; }

@media (prefers-reduced-motion: no-preference) {
  :is(.primary, .outline, .product-bottom button, .tabs button, .close) {
    transition: transform 160ms cubic-bezier(.2, .75, .3, 1);
  }
  :is(.primary, .product-bottom button)::after { transition: opacity 160ms ease; }

  @media (hover: hover) and (pointer: fine) {
    :is(.primary, .outline, .product-bottom button, .tabs button, .close):not(:disabled):not([aria-disabled="true"]):hover {
      transform: translateY(-2px) scale(1.01);
    }
    :is(.primary, .product-bottom button):not(:disabled):not([aria-disabled="true"]):hover::after { opacity: 1; }
    .product:not(.catalog-reveal-pending):not(.catalog-reveal-enter):hover { transform: translateY(-3px); }
  }

  :is(.primary, .outline, .product-bottom button, .tabs button, .close):not(:disabled):not([aria-disabled="true"]):active {
    transform: translateY(0) scale(.98);
    transition-duration: 80ms;
  }
  :is(.primary, .product-bottom button):active::after { opacity: 0; }
  .product.catalog-reveal-pending { opacity: 0; transform: translateY(22px); }
  .product.catalog-reveal-enter {
    animation: zynet-catalog-in 1000ms cubic-bezier(.22, .61, .36, 1) var(--reveal-delay, 0ms) backwards;
  }
  @keyframes zynet-catalog-in {
    from { opacity: 0; transform: translateY(22px); }
    to { opacity: 1; transform: translateY(0); }
  }
}

/* Disabled controls and reduced-motion users never get movement or glow. */
:is(.primary, .outline, .product-bottom button, .tabs button, .close):is(:disabled, [aria-disabled="true"]) {
  transform: none;
}
:is(.primary, .product-bottom button):is(:disabled, [aria-disabled="true"])::after { opacity: 0; }
@media (prefers-reduced-motion: reduce) {
  .product.catalog-reveal-pending, .product.catalog-reveal-enter {
    opacity: 1;
    transform: none;
    animation: none;
  }
}
