/* ================================================================
   Vastra Vision — press and motion
   Loaded after each page stylesheet so this wins the cascade.
   Still pages. Buttons that answer the hand.
   ================================================================ */

:root {
  --ease-out: cubic-bezier(0.23, 1, 0.32, 1);
  --ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);
}

/* Pressable controls. Transform and paint only — never `all`. */
:is(
  .btn-primary,
  .btn-danger,
  .btn-ghost,
  .btn-meet-designer,
  .btn-style,
  .hero-cta-btn,
  .insta-follow,
  .add-btn,
  .add-cart-btn,
  .buy-now-btn,
  .qv-add-btn,
  .wl-add,
  .cart-btn,
  .nav-search-btn,
  .nav-burger,
  .search-close,
  .qv-close,
  .filter-pill,
  .acct-chip,
  .pick-size,
  .pick-swatch,
  .qv-pick,
  .qv-swatch,
  .qty-btn,
  .share-btn,
  .remove-btn,
  .shop-tools .reset
),
.qty-control button,
.nl-form button,
.contact-card a.btn-style,
.hero-left .btn-primary,
nav.acct-nav .cart-btn,
nav.legal-nav .cart-btn {
  -webkit-tap-highlight-color: transparent;
  transition:
    transform 140ms var(--ease-out),
    background-color 180ms var(--ease-out),
    color 180ms var(--ease-out),
    border-color 180ms var(--ease-out),
    box-shadow 180ms var(--ease-out),
    opacity 180ms var(--ease-out);
}

.btn-ghost::after,
.btn-ghost.back::before {
  transition: transform 160ms var(--ease-out);
}

/* Quick view and search are occasional. Ease-out so they start immediately. */
.qv-overlay,
.search-overlay {
  transition: opacity 200ms var(--ease-out);
}
.qv-modal,
.search-panel {
  transition: transform 220ms var(--ease-out);
}

/* Lifts on hover fight the press and make the grid feel nervous.
   Colour and shadow changes from the page stay. The card stays put. */
@media (hover: hover) and (pointer: fine) {
  .btn-primary:hover,
  .btn-danger:hover,
  .btn-ghost:hover,
  .add-btn:hover,
  .add-cart-btn:hover,
  .buy-now-btn:hover,
  .qv-add-btn:hover,
  .wl-add:hover,
  .cart-btn:hover,
  .hero-cta-btn:hover,
  .btn-meet-designer:hover,
  .insta-follow:hover,
  .nav-search-btn:hover,
  .product-card:hover,
  .why-card:hover,
  .value-card:hover,
  .trust-card2:hover,
  .exp-card:hover,
  .contact-card:hover,
  .rel-card:hover,
  a.acct-stat:hover,
  .wl-card .wl-x:hover {
    transform: none;
  }

  .product-img-bg {
    transition: transform 420ms var(--ease-out);
  }
  .product-card:hover .product-img-bg {
    transform: scale(1.03);
  }
}

@media (hover: none), (pointer: coarse) {
  .btn-primary:hover,
  .btn-danger:hover,
  .btn-ghost:hover,
  .add-btn:hover,
  .add-cart-btn:hover,
  .buy-now-btn:hover,
  .qv-add-btn:hover,
  .wl-add:hover,
  .cart-btn:hover,
  .hero-cta-btn:hover,
  .btn-meet-designer:hover,
  .insta-follow:hover,
  .nav-search-btn:hover,
  .product-card:hover,
  .why-card:hover,
  .value-card:hover,
  .trust-card2:hover,
  .exp-card:hover,
  .contact-card:hover,
  .rel-card:hover,
  a.acct-stat:hover,
  .wl-card .wl-x:hover,
  .product-card:hover .product-img-bg {
    transform: none;
  }
}

/* Press. Comes after the hover rules so scale wins while the finger is down. */
:is(
  .btn-primary,
  .btn-danger,
  .btn-ghost,
  .btn-meet-designer,
  .btn-style,
  .hero-cta-btn,
  .insta-follow,
  .add-btn,
  .add-cart-btn,
  .buy-now-btn,
  .qv-add-btn,
  .wl-add,
  .cart-btn,
  .nav-search-btn,
  .nav-burger,
  .search-close,
  .qv-close,
  .filter-pill,
  .acct-chip,
  .pick-size,
  .pick-swatch,
  .qv-pick,
  .qv-swatch,
  .qty-btn,
  .share-btn,
  .remove-btn,
  .shop-tools .reset
):active:not(:disabled),
.qty-control button:active:not(:disabled),
.nl-form button:active:not(:disabled),
.contact-card a.btn-style:active,
.wl-card .wl-x:active {
  transform: scale(0.97);
}

:is(
  .btn-primary,
  .btn-danger,
  .add-btn,
  .add-cart-btn,
  .buy-now-btn,
  .qv-add-btn,
  .wl-add
):disabled {
  transform: none;
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }

  :is(
    .btn-primary,
    .btn-danger,
    .btn-ghost,
    .btn-meet-designer,
    .btn-style,
    .hero-cta-btn,
    .insta-follow,
    .add-btn,
    .add-cart-btn,
    .buy-now-btn,
    .qv-add-btn,
    .wl-add,
    .cart-btn,
    .nav-search-btn,
    .nav-burger,
    .search-close,
    .qv-close,
    .filter-pill,
    .acct-chip,
    .pick-size,
    .pick-swatch,
    .qv-pick,
    .qv-swatch,
    .qty-btn,
    .share-btn,
    .remove-btn,
    .shop-tools .reset
  ):active:not(:disabled),
  .qty-control button:active:not(:disabled),
  .nl-form button:active:not(:disabled),
  .contact-card a.btn-style:active,
  .wl-card .wl-x:active,
  .product-card:hover .product-img-bg,
  .btn-ghost:hover::after,
  .btn-ghost.back:hover::before {
    transform: none;
  }
}
