/* Column */
.swpf-product-grid {
  display: grid;
  grid-template-columns: repeat(var(--swpf-layout-columns-desktopcol, 3), 1fr);
  grid-column-gap: var(--swpf-layout-column-gap-desktop, 20px);
  grid-row-gap: var(--swpf-layout-row-gap-desktop, 20px);
  align-items: flex-start;
  list-style: none !important;
  margin: 0 !important;
  padding: 0 !important;
}

.swpf-product-grid:has(.woocommerce-no-products-found) {
  grid-template-columns: repeat(1, 1fr);
}

@media screen and (max-width:1024px) {
  .swpf-product-grid {
    grid-template-columns: repeat(var(--swpf-layout-columns-tabletcol, var(--swpf-layout-columns-desktopcol, 3)), 1fr);
    grid-column-gap: var(--swpf-layout-column-gap-tablet, var(--swpf-layout-column-gap-desktop, 20px));
    grid-row-gap: var(--swpf-layout-row-gap-tablet, var(--swpf-layout-row-gap-desktop, 20px));
  }
}

@media screen and (max-width:767px) {
  .swpf-product-grid {
    grid-template-columns: repeat(var(--swpf-layout-columns-mobilecol, var(--swpf-layout-columns-tabletcol, var(--swpf-layout-columns-desktopcol, 3)), 1fr));
    grid-column-gap: var(--swpf-layout-column-gap-mobile, var(--swpf-layout-column-gap-tablet, var(--swpf-layout-column-gap-desktop, 20px)));
    grid-row-gap: var(--swpf-layout-row-gap-mobile, var(--swpf-layout-row-gap-tablet, var(--swpf-layout-row-gap-desktop, 20px)));
  }
}

.swpf-product {
  position: relative;
  padding-top: var(--swpf-product-padding-top, 0);
  padding-right: var(--swpf-product-padding-right, 0);
  padding-bottom: var(--swpf-product-padding-bottom, 0);
  padding-left: var(--swpf-product-padding-left, 0);
}

.swpf-product-image {
  position: relative;
  overflow: hidden;
}

/* Product image */
.swpf-general-layout-product-img {
  display: block;
  position: relative;
  overflow: hidden;
  /* No ratio chosen leaves this at auto, so the box keeps taking its shape
     from the photo exactly as it did before the setting existed. */
  aspect-ratio: var(--swpf-product-image-ratio, auto);
  border-top-left-radius: var(--swpf-product-image-border-radius-top, 0);
  border-top-right-radius: var(--swpf-product-image-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-product-image-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-product-image-border-radius-left, 0);
}

.swpf-general-layout-product-img .swpf-product-thumb img {
  display: block;
  width: 100%;
  object-fit: var(--swpf-product-image-fit, cover);
  transition: 0.3s transform ease, 0.3s filter ease;
}

/*
 * Filling the box is only wanted once a ratio has given it a shape, and it has
 * to be asked for explicitly. Left to `height: 100%` against an `auto` parent
 * it is supposed to fall back to `auto`, but inside the builder preview - a
 * fragment written into an iframe - the percentage instead feeds back into the
 * height it is measured against and settles on a stretched image.
 */
.swpf-image-has-ratio .swpf-general-layout-product-img .swpf-product-thumb,
.swpf-image-has-ratio .swpf-general-layout-product-img .swpf-product-thumb img,
.swpf-masonry-varied .swpf-general-layout-product-img .swpf-product-thumb,
.swpf-masonry-varied .swpf-general-layout-product-img .swpf-product-thumb img {
  height: 100%;
}

/*
 * A tint over the picture, which is what makes the hover buttons readable on a
 * busy photograph. Transparent by default, and it never eats the click because
 * it does not take pointer events.
 */
.swpf-general-layout-product-img:after {
  content: '';
  position: absolute;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
  z-index: 1;
  pointer-events: none;
  background: var(--swpf-product-image-overlay-color, transparent);
  transition: 0.3s background ease;
  opacity: 0.9;
}

.swpf-product:hover .swpf-general-layout-product-img:after {
  background: var(--swpf-product-image-hover-overlay-color, var(--swpf-product-image-overlay-color, transparent));
  opacity: 0.9;
}

.swpf-product-thumb-hover {
  position: absolute;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
  opacity: 0;
  transition: 0.3s opacity ease, 0.3s transform ease;
}

.swpf-product-thumb-hover img {
  object-fit: var(--swpf-product-image-fit, cover);
  height: 100% !important;
  width: 100% !important;
  transition: 0.3s transform ease;
}

/* None */
.swpf-image-hover-none .swpf-product-thumb-hover {
  display: none;
}

/* Second gallery image, fading in over the first */
.swpf-image-hover-second .swpf-product-thumb-hover img {
  transform: scale(1.2);
}

.swpf-image-hover-second .swpf-product:hover .swpf-product-thumb-hover {
  opacity: 1;
}

.swpf-image-hover-second .swpf-product:hover .swpf-product-thumb-hover img {
  transform: scale(1);
}

/* Second gallery image, sliding in from the right */
.swpf-image-hover-slide .swpf-product-thumb-hover {
  opacity: 1;
  transform: translateX(100%);
}

.swpf-image-hover-slide .swpf-product:hover .swpf-product-thumb-hover {
  transform: translateX(0);
}

/* The first picture only makes way when there is a second one sliding in to
   replace it. A product with no gallery image keeps its picture still. */
.swpf-image-hover-slide .swpf-product:hover .swpf-general-layout-product-img:has(.swpf-product-thumb-hover) .swpf-product-thumb img {
  transform: translateX(-30%);
}

/* Zoom in. The two gallery image effects do not borrow this for a product
   with no second picture - that product simply has no hover effect. */
.swpf-image-hover-zoom .swpf-product:hover .swpf-general-layout-product-img img {
  transform: scale(1.08);
}

/* Zoom out */
.swpf-image-hover-zoom-out .swpf-general-layout-product-img img {
  transform: scale(1.08);
}

.swpf-image-hover-zoom-out .swpf-product:hover .swpf-general-layout-product-img img {
  transform: scale(1);
}

/* Grayscale to colour */
.swpf-image-hover-grayscale .swpf-general-layout-product-img img {
  filter: grayscale(1);
}

.swpf-image-hover-grayscale .swpf-product:hover .swpf-general-layout-product-img img {
  filter: grayscale(0);
}

/* Blur */
.swpf-image-hover-blur .swpf-product:hover .swpf-general-layout-product-img img {
  filter: blur(3px);
}

/* The stand-alone effects have nothing to show the second picture for. */
.swpf-image-hover-zoom .swpf-product-thumb-hover,
.swpf-image-hover-zoom-out .swpf-product-thumb-hover,
.swpf-image-hover-grayscale .swpf-product-thumb-hover,
.swpf-image-hover-blur .swpf-product-thumb-hover {
  display: none;
}

.swpf-product-content {
  background: var(--swpf-product-content-bg-color, transparent);
  padding-top: var(--swpf-product-content-padding-top, 0);
  padding-right: var(--swpf-product-content-padding-right, 0);
  padding-bottom: var(--swpf-product-content-padding-bottom, 0);
  padding-left: var(--swpf-product-content-padding-left, 0);
}

/* Badge */
.swpf-product-badge {
  position: absolute;
  display: inline-flex;
  flex-direction: var(--swpf-badge-orientation, row);
  gap: var(--swpf-badge-space, 10px);
  z-index: 9;
}

.swpf-badge-h-pos-right .swpf-product-badge {
  right: var(--swpf-badge-offset-right, 0);
  align-items: flex-end;
}

.swpf-badge-h-pos-left .swpf-product-badge {
  left: var(--swpf-badge-offset-left, 0);
  align-items: flex-start;
}

.swpf-badge-v-pos-top .swpf-product-badge {
  top: var(--swpf-badge-offset-top, 10px);
}

.swpf-badge-v-pos-bottom .swpf-product-badge {
  bottom: var(--swpf-badge-offset-bottom, 10px);
}

.swpf-product-badge span {
  display: inline-block;
  padding-top: var(--swpf-badge-padding-top, 5px);
  padding-bottom: var(--swpf-badge-padding-bottom, 5px);
  padding-left: var(--swpf-badge-padding-left, 10px);
  /* The clip-path below notches 8px off the right edge, so whatever is set
     here still needs that much clearance. Falls back to the left value, which
     is what this always used. */
  padding-right: calc(var(--swpf-badge-padding-right, var(--swpf-badge-padding-left, 10px)) + 10px);
  font-family: var(--swpf-badge-typography-font-family, inherit);
  font-style: var(--swpf-badge-typography-font-style, inherit);
  font-weight: var(--swpf-badge-typography-font-weight, inherit);
  text-transform: var(--swpf-badge-typography-text-transform, uppercase);
  text-decoration: var(--swpf-badge-typography-text-decoration, inherit);
  font-size: var(--swpf-badge-typography-font-size, 0.8em);
  letter-spacing: var(--swpf-badge-typography-letter-spacing, inherit);
  line-height: var(--swpf-badge-typography-line-height, 1);
  background: #7f54b3;
  color: #FFF;
  border-top-left-radius: var(--swpf-badge-border-radius-top, 0);
  border-top-right-radius: var(--swpf-badge-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-badge-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-badge-border-radius-left, 0);
}

.swpf-product-badge span.swpf-onsale {
  background: var(--swpf-onsale-bg-color, #7f54b3);
  color: var(--swpf-onsale-color, #FFF);
}

.swpf-product-badge span.swpf-out-of-stock {
  background: var(--swpf-out-of-stock-bg-color, #7f54b3);
  color: var(--swpf-out-of-stock-color, #FFF);
}

.swpf-product-badge span.swpf-featured {
  background: var(--swpf-hot-bg-color, #7f54b3);
  color: var(--swpf-hot-color, #FFF);
}

/* Hover Buttons */
.swpf-product-image .swpf-product-buttons {
  position: absolute;
  display: flex;
  flex-direction: var(--swpf-hover-buttons-orientation, row);
  gap: var(--swpf-hover-buttons-space, 8px);
  opacity: 0;
  z-index: 9;
}

.swpf-product:hover .swpf-product-image .swpf-product-buttons {
  opacity: 1;
}

.swpf-hover-buttons-h-pos-left .swpf-product-image .swpf-product-buttons {
  left: var(--swpf-hover-buttons-offset-left, 0);
}

.swpf-hover-buttons-h-pos-center .swpf-product-image .swpf-product-buttons {
  left: 0;
  right: 0;
  align-items: center;
  justify-content: center;
}

.swpf-hover-buttons-h-pos-right .swpf-product-image .swpf-product-buttons {
  right: var(--swpf-hover-buttons-offset-right, 0);
}

.swpf-hover-buttons-v-pos-top .swpf-product-image .swpf-product-buttons {
  top: var(--swpf-hover-buttons-offset-top, 0);
}

.swpf-hover-buttons-v-pos-middle .swpf-product-image .swpf-product-buttons {
  top: 0;
  bottom: 0;
  align-items: center;
  justify-content: center;
}

.swpf-hover-buttons-v-pos-bottom .swpf-product-image .swpf-product-buttons {
  bottom: var(--swpf-hover-buttons-offset-bottom, 0);
}

.swpf-product .swpf-product-icon {
  position: relative;
  opacity: 1 !important;
}

.swpf-product .swpf-product-icon a {
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0;
  padding: 0;
  height: var(--swpf-hover-buttons-size, 40px);
  width: var(--swpf-hover-buttons-size, 40px);
  font-size: var(--swpf-hover-buttons-icon-size, 14px);
  border-style: var(--swpf-hover-buttons-border-type, none);
  border-top-width: var(--swpf-hover-buttons-border-top, 1px);
  border-right-width: var(--swpf-hover-buttons-border-right, 1px);
  border-bottom-width: var(--swpf-hover-buttons-border-bottom, 1px);
  border-left-width: var(--swpf-hover-buttons-border-left, 1px);
  border-color: var(--swpf-hover-buttons-border-color, #EEE);
  box-shadow: var(--swpf-hover-buttons-box-shadow-x, 0) var(--swpf-hover-buttons-box-shadow-y, 0) var(--swpf-hover-buttons-box-shadow-blur, 0) var(--swpf-hover-buttons-box-shadow-spread, 0) var(--swpf-hover-buttons-box-shadow-color, transparent);
  border-top-left-radius: var(--swpf-hover-buttons-border-radius-top, 0);
  border-top-right-radius: var(--swpf-hover-buttons-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-hover-buttons-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-hover-buttons-border-radius-left, 0);
  background: var(--swpf-hover-buttons-bg-color, #7f54b3);
  color: var(--swpf-hover-buttons-icon-color, #FFF);
}

.swpf-product .swpf-product-icon:hover a {
  background: var(--swpf-hover-buttons-hover-bg-color, var(--swpf-hover-buttons-bg-color, #7f54b3));
  color: var(--swpf-hover-buttons-hover-icon-color, var(--swpf-hover-buttons-icon-color, #FFF));
}

.swpf-product-grid-style5 .swpf-product-cart-button .swpf-add-to-cart.loading::before,
.swpf-product-cart.swpf-product-icon .swpf-add-to-cart.loading:after,
.swpf-product-icon .blockUI.blockOverlay {
  position: absolute;
  width: 60% !important;
  height: 60% !important;
  border-radius: 50% !important;
  background: #FFF !important;
  left: 50% !important;
  top: 50% !important;
  transform: translate(-50%, -50%);
  opacity: 0.6 !important;
  animation: swpf-loader-pulse 1s ease-in-out infinite;
}

.swpf-product-grid-style5 .swpf-product-cart-button .swpf-add-to-cart.loading::before,
.swpf-product-cart.swpf-product-icon .swpf-add-to-cart.loading:after {
  content: "";
}

@keyframes swpf-loader-pulse {

  0%,
  100% {
    transform: translate(-50%, -50%) scale(1);
    opacity: 1;
  }

  50% {
    transform: translate(-50%, -50%) scale(1.4);
    opacity: 0.3;
  }
}


/* Hover Buttons Tooltip */
.swpf-product .swpf-product-tooltip {
  position: absolute;
  white-space: nowrap;
  z-index: 10;
  opacity: 0;
  visibility: hidden;
  transition: 350ms ease 0s;
  border-radius: 5px;
  padding-top: var(--swpf-tooltip-padding-top, 5px);
  padding-bottom: var(--swpf-tooltip-padding-bottom, 5px);
  padding-left: var(--swpf-tooltip-padding-left, 10px);
  padding-right: var(--swpf-tooltip-padding-right, 10px);
  border-top-left-radius: var(--swpf-tooltip-border-radius-top, 0);
  border-top-right-radius: var(--swpf-tooltip-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-tooltip-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-tooltip-border-radius-left, 0);
  font-family: var(--swpf-tooltip-typography-font-family, inherit);
  font-style: var(--swpf-tooltip-typography-font-style, inherit);
  font-weight: var(--swpf-tooltip-typography-font-weight, inherit);
  text-transform: var(--swpf-tooltip-typography-text-transform, uppercase);
  text-decoration: var(--swpf-tooltip-typography-text-decoration, inherit);
  font-size: var(--swpf-tooltip-typography-font-size, 12px);
  letter-spacing: var(--swpf-tooltip-typography-letter-spacing, inherit);
  line-height: var(--swpf-tooltip-typography-line-height, 1);
  background: var(--swpf-tooltip-bg-color, #7f54b3);
  color: var(--swpf-tooltip-color, #FFF);
}

.swpf-product .swpf-product-tooltip::after {
  content: "";
  width: 0;
  height: 0;
  position: absolute;
}

.swpf-product .swpf-product-icon:hover .swpf-product-tooltip {
  opacity: 1;
  visibility: visible;
}

.swpf-hover-buttons-orientation-row.swpf-hover-buttons-v-pos-bottom .swpf-product-tooltip,
.swpf-hover-buttons-orientation-row.swpf-hover-buttons-v-pos-middle .swpf-product-tooltip {
  left: 50%;
  bottom: 100%;
  transform: translate(-50%, -10px);
}

.swpf-hover-buttons-orientation-row.swpf-hover-buttons-v-pos-bottom .swpf-product-tooltip:after,
.swpf-hover-buttons-orientation-row.swpf-hover-buttons-v-pos-middle .swpf-product-tooltip:after {
  left: 50%;
  top: 100%;
  bottom: auto;
  border-right: 5px solid transparent;
  border-bottom: 5px solid transparent;
  border-left: 5px solid transparent;
  border-top: 5px solid var(--swpf-tooltip-bg-color, #7f54b3);
  transform: translateX(-50%);
}

.swpf-hover-buttons-orientation-row.swpf-hover-buttons-v-pos-top .swpf-product-tooltip {
  left: 50%;
  top: 100%;
  transform: translate(-50%, 10px);
}

.swpf-hover-buttons-orientation-row.swpf-hover-buttons-v-pos-top .swpf-product-tooltip:after {
  left: 50%;
  bottom: 100%;
  border-right: 5px solid transparent;
  border-bottom: 5px solid var(--swpf-tooltip-bg-color, #7f54b3);
  border-left: 5px solid transparent;
  border-top: 5px solid transparent;
  transform: translateX(-50%);
}

.swpf-hover-buttons-orientation-column.swpf-hover-buttons-h-pos-center .swpf-product-tooltip,
.swpf-hover-buttons-orientation-column.swpf-hover-buttons-h-pos-left .swpf-product-tooltip {
  left: 100%;
  top: 50%;
  transform: translate(10px, -50%);
}

.swpf-hover-buttons-orientation-column.swpf-hover-buttons-h-pos-center .swpf-product-tooltip:after,
.swpf-hover-buttons-orientation-column.swpf-hover-buttons-h-pos-left .swpf-product-tooltip:after {
  top: 50%;
  right: 100%;
  bottom: auto;
  border-right: 5px solid var(--swpf-tooltip-bg-color, #7f54b3);
  border-bottom: 5px solid transparent;
  border-left: 5px solid transparent;
  border-top: 5px solid transparent;
  transform: translateY(-50%);
}

.swpf-hover-buttons-orientation-column.swpf-hover-buttons-h-pos-right .swpf-product-tooltip {
  right: 100%;
  top: 50%;
  transform: translate(-10px, -50%);
}

.swpf-hover-buttons-orientation-column.swpf-hover-buttons-h-pos-right .swpf-product-tooltip:after {
  top: 50%;
  left: 100%;
  bottom: auto;
  border-right: 5px solid transparent;
  border-bottom: 5px solid transparent;
  border-left: 5px solid var(--swpf-tooltip-bg-color, #7f54b3);
  border-top: 5px solid transparent;
  transform: translateY(-50%);
}

.swpf-tooltip-off .swpf-product-tooltip{
  display: none !important;
}

/* Category */
.swpf-product .swpf-product-category {
  color: var(--swpf-category-color, inherit);
  margin-top: var(--swpf-category-margin-top, 15px);
  margin-bottom: var(--swpf-category-margin-bottom, 0);
  margin-left: var(--swpf-category-margin-left, 0);
  margin-right: var(--swpf-category-margin-right, 0);
  font-family: var(--swpf-category-typography-font-family, inherit);
  font-weight: var(--swpf-category-typography-font-weight, inherit);
  font-style: var(--swpf-category-typography-font-style, inherit);
  text-transform: var(--swpf-category-typography-text-transform, inherit);
  text-decoration: var(--swpf-category-typography-text-decoration, inherit);
  font-size: var(--swpf-category-typography-font-size, 12px);
  letter-spacing: var(--swpf-category-typography-letter-spacing, inherit);
  line-height: var(--swpf-category-typography-line-height, 1);
}

.swpf-product .swpf-product-category a {
  color: inherit;
  display: inline-block;
  background: var(--swpf-category-bg-color, transparent);
  border-top-left-radius: var(--swpf-category-border-radius-top, 0);
  border-top-right-radius: var(--swpf-category-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-category-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-category-border-radius-left, 0);
  padding-top: var(--swpf-category-padding-top, 0);
  padding-right: var(--swpf-category-padding-right, 0);
  padding-bottom: var(--swpf-category-padding-bottom, 0);
  padding-left: var(--swpf-category-padding-left, 0);
  transition: 0.2s color ease, 0.2s background ease;
}

.swpf-product .swpf-product-category a:hover {
  color: var(--swpf-category-hover-color, var(--swpf-category-color, inherit));
}

/* Product Title */
.swpf-product .swpf-product-title {
  margin-top: var(--swpf-title-margin-top, 15px);
  margin-bottom: var(--swpf-title-margin-bottom, 0);
  margin-left: var(--swpf-title-margin-left, 0);
  margin-right: var(--swpf-title-margin-right, 0);
}

.swpf-product .swpf-product-title .swpf-product-header {
  color: var(--swpf-title-color, inherit);
  font-family: var(--swpf-title-typography-font-family, inherit);
  font-style: var(--swpf-title-typography-font-style, inherit);
  font-weight: var(--swpf-title-typography-font-weight, inherit);
  text-transform: var(--swpf-title-typography-text-transform, inherit);
  text-decoration: var(--swpf-title-typography-text-decoration, inherit);
  font-size: var(--swpf-title-typography-font-size, inherit);
  letter-spacing: var(--swpf-title-typography-letter-spacing, inherit);
  line-height: var(--swpf-title-typography-line-height, 1.3);
}

.swpf-product .swpf-product-title .swpf-product-header:hover {
  color: var(--swpf-title-hover-color, var(--swpf-title-color, inherit));
}

.swpf-product .swpf-product-title .swpf-product-header a {
  color: inherit;
}

/* Title line clamp */
/*
 * A -webkit-box only where it is asked for. Left to a var the box would be
 * imposed on every title, changing how one that needs no trimming lays out.
 * -webkit-line-clamp is what every current browser implements, prefix and all.
 */
.swpf-title-clamp-1 .swpf-product-title .swpf-product-header,
.swpf-title-clamp-2 .swpf-product-title .swpf-product-header,
.swpf-title-clamp-3 .swpf-product-title .swpf-product-header,
.swpf-title-clamp-4 .swpf-product-title .swpf-product-header {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.swpf-title-clamp-1 .swpf-product-title .swpf-product-header {
  -webkit-line-clamp: 1;
}

.swpf-title-clamp-2 .swpf-product-title .swpf-product-header {
  -webkit-line-clamp: 2;
}

.swpf-title-clamp-3 .swpf-product-title .swpf-product-header {
  -webkit-line-clamp: 3;
}

.swpf-title-clamp-4 .swpf-product-title .swpf-product-header {
  -webkit-line-clamp: 4;
}

/* Rating */
.swpf-product .swpf-product-rating {
  margin-top: var(--swpf-rating-margin-top, 15px);
  margin-bottom: var(--swpf-rating-margin-bottom, 0);
  margin-left: var(--swpf-rating-margin-left, 0);
  margin-right: var(--swpf-rating-margin-right, 0);
}

.swpf-product .swpf-product-rating i {
  color: var(--swpf-rating-color, #ff8220);
  font-size: var(--swpf-rating-size, 16px);
}

/* The stars a product did not earn, so a three star rating reads as three of
   five rather than as a shorter row. */
.swpf-product .swpf-product-rating i.mdi-star-outline {
  color: var(--swpf-rating-empty-color, #DDDDDD);
}

/* Price */
.swpf-product .swpf-product-price {
  font-family: var(--swpf-price-typography-font-family, inherit);
  font-weight: var(--swpf-price-typography-font-weight, inherit);
  font-style: var(--swpf-price-typography-font-style, inherit);
  text-transform: var(--swpf-price-typography-text-transform, uppercase);
  text-decoration: var(--swpf-price-typography-text-decoration, inherit);
  font-size: var(--swpf-price-typography-font-size, inherit);
  letter-spacing: var(--swpf-price-typography-letter-spacing, inherit);
  line-height: var(--swpf-price-typography-line-height, 1);
  margin-top: var(--swpf-price-margin-top, 15px);
  margin-bottom: var(--swpf-price-margin-bottom, 0);
  margin-left: var(--swpf-price-margin-left, 0);
  margin-right: var(--swpf-price-margin-right, 0);
  color: var(--swpf-price-regular-color, inherit);
}

/* <del> is the price before the discount. */
.swpf-product .swpf-product-price del {
  color: var(--swpf-price-sale-color, var(--swpf-price-regular-color, inherit));
  margin-right: var(--swpf-price-spacing, 0);
}

/*
 * The price the shopper actually pays. swpf_get_product_price() prints it as a
 * plain amount straight after the struck-through <del>, not inside an <ins> -
 * <ins> is only in WooCommerce's own price HTML, which grouped products still
 * use. Unset, this resolves to the colour the amount already inherited.
 */
.swpf-product .swpf-product-price del + .woocommerce-Price-amount,
.swpf-product .swpf-product-price ins {
  color: var(--swpf-price-new-price-color, var(--swpf-price-regular-color, inherit));
}

.swpf-product .swpf-product-price ins {
  text-decoration: none;
  background: transparent;
}

/* Cart Button */
.swpf-product-grid:not(.swpf-product-grid-style7) .swpf-product .swpf-product-cart-button {
  margin-top: var(--swpf-cart-button-margin-top, 15px);
  margin-bottom: var(--swpf-cart-button-margin-bottom, 0);
  margin-left: var(--swpf-cart-button-margin-left, var(--swpf-product-content-padding-left, 0));
  margin-right: var(--swpf-cart-button-margin-right, var(--swpf-product-content-padding-right, 0));
}

.swpf-product-grid:not(.swpf-product-grid-style7) .swpf-product .swpf-product-cart-button a.swpf-add-to-cart {
  font-family: var(--swpf-cart-button-typography-font-family, inherit);
  font-style: var(--swpf-cart-button-typography-font-style, inherit);
  font-weight: var(--swpf-cart-button-typography-font-weight, inherit);
  text-transform: var(--swpf-cart-button-typography-text-transform, inherit);
  text-decoration: var(--swpf-cart-button-typography-text-decoration, inherit);
  font-size: var(--swpf-cart-button-typography-font-size, inherit);
  letter-spacing: var(--swpf-cart-button-typography-letter-spacing, inherit);
  line-height: var(--swpf-cart-button-typography-line-height, 1.3);
  padding-top: var(--swpf-cart-button-padding-top, 10px);
  padding-bottom: var(--swpf-cart-button-padding-bottom, 10px);
  padding-left: var(--swpf-cart-button-padding-left, 15px);
  padding-right: var(--swpf-cart-button-padding-right, 15px);
  border-style: var(--swpf-cart-button-border-type, none);
  border-top-width: var(--swpf-cart-button-border-top, 1px);
  border-right-width: var(--swpf-cart-button-border-right, 1px);
  border-bottom-width: var(--swpf-cart-button-border-bottom, 1px);
  border-left-width: var(--swpf-cart-button-border-left, 1px);
  border-color: var(--swpf-cart-button-border-color, #7f54b3);
  box-shadow: var(--swpf-cart-button-box-shadow-x, 0) var(--swpf-cart-button-box-shadow-y, 0) var(--swpf-cart-button-box-shadow-blur, 0) var(--swpf-cart-button-box-shadow-spread, 0) var(--swpf-cart-button-box-shadow-color, transparent);
  border-top-left-radius: var(--swpf-cart-button-border-radius-top, 3px);
  border-top-right-radius: var(--swpf-cart-button-border-radius-right, 3px);
  border-bottom-right-radius: var(--swpf-cart-button-border-radius-bottom, 3px);
  border-bottom-left-radius: var(--swpf-cart-button-border-radius-left, 3px);
  display: inline-flex;
  gap: 0.6em;
  align-items: center;
  margin: 0;
  text-align: left;
  background: var(--swpf-cart-button-bg-color, #7f54b3);
  color: var(--swpf-cart-button-text-color, #FFF);
  --swpf-cart-button-box-shadow: var(--swpf-cart-button-box-shadow-x, 0) var(--swpf-cart-button-box-shadow-y, 0) var(--swpf-cart-button-box-shadow-blur, 0) var(--swpf-cart-button-box-shadow-spread, 0) var(--swpf-cart-button-box-shadow-color, transparent);
  --swpf-cart-button-box-shadow-hover: var(--swpf-cart-button-box-shadow-hover-x) var(--swpf-cart-button-box-shadow-hover-y) var(--swpf-cart-button-box-shadow-hover-blur) var(--swpf-cart-button-box-shadow-hover-spread) var(--swpf-cart-button-box-shadow-hover-color);
}

.swpf-product-grid:not(.swpf-product-grid-style7) .swpf-product .swpf-product-cart-button a.swpf-add-to-cart:hover {
  background: var(--swpf-cart-button-bg-color-hover, var(--swpf-cart-button-bg-color, #7f54b3));
  color: var(--swpf-cart-button-text-color-hover, var(--swpf-cart-button-text-color, #FFF));
  border-color: var(--swpf-cart-button-border-color-hover, var(--swpf-cart-button-border-color, #7f54b3));
  box-shadow: var(--swpf-cart-button-box-shadow-hover, var(--swpf-cart-button-box-shadow, none));
}

.swpf-product-cart-button .swpf-add-to-cart.loading::after {
  content: '';
  width: 1em;
  height: 1em;
  border-radius: 50%;
  border: 0.15em solid rgba(0, 0, 0, 0.1);
  border-top-color: var(--swpf-cart-button-text-color, #FFF);
  animation: swpf-add-to-cart-spin 0.3s linear infinite;
  box-sizing: border-box;
}

.swpf-product-cart-button .added_to_cart {
  display: none !important;
}

/* Spin animation */
@keyframes swpf-add-to-cart-spin {
  0% {
    transform: rotate(0deg);
  }

  100% {
    transform: rotate(360deg);
  }
}

/* Product Pagination */
.swpf-product-pagination {
  margin-top: var(--swpf-pagination-button-margin-top, 50px);
  margin-bottom: var(--swpf-pagination-button-margin-bottom, 0);
  margin-left: var(--swpf-pagination-button-margin-left, 0);
  margin-right: var(--swpf-pagination-button-margin-right, 0);
  font-size: var(--swpf-pagination-button-typography-font-size, inherit);
}

.swpf-product-pagination .woocommerce-pagination {
  display: flex;
  justify-content: center;
}

.swpf-product-pagination .woocommerce-pagination ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.5em;
}

.swpf-product-pagination .woocommerce-pagination ul li .page-numbers {
  font-family: var(--swpf-pagination-button-typography-font-family, inherit);
  font-style: var(--swpf-pagination-button-typography-font-style, inherit);
  font-weight: var(--swpf-pagination-button-typography-font-weight, inherit);
  text-transform: var(--swpf-pagination-button-typography-text-transform, inherit);
  text-decoration: var(--swpf-pagination-button-typography-text-decoration, inherit);
  font-size: var(--swpf-pagination-button-typography-font-size, inherit);
  letter-spacing: var(--swpf-pagination-button-typography-letter-spacing, inherit);
  line-height: var(--swpf-pagination-button-typography-line-height, 1.3);
  padding-top: var(--swpf-pagination-button-padding-top, 10px);
  padding-bottom: var(--swpf-pagination-button-padding-bottom, 10px);
  padding-left: var(--swpf-pagination-button-padding-left, 15px);
  padding-right: var(--swpf-pagination-button-padding-right, 15px);
  border-style: var(--swpf-pagination-button-border-type, none);
  border-top-width: var(--swpf-pagination-button-border-top, 1px);
  border-right-width: var(--swpf-pagination-button-border-right, 1px);
  border-bottom-width: var(--swpf-pagination-button-border-bottom, 1px);
  border-left-width: var(--swpf-pagination-button-border-left, 1px);
  border-color: var(--swpf-pagination-button-border-color, #7f54b3);
  box-shadow: var(--swpf-pagination-button-box-shadow-x, 0) var(--swpf-pagination-button-box-shadow-y, 0) var(--swpf-pagination-button-box-shadow-blur, 0) var(--swpf-pagination-button-box-shadow-spread, 0) var(--swpf-pagination-button-box-shadow-color, transparent);
  border-top-left-radius: var(--swpf-pagination-button-border-radius-top, 3px);
  border-top-right-radius: var(--swpf-pagination-button-border-radius-right, 3px);
  border-bottom-right-radius: var(--swpf-pagination-button-border-radius-bottom, 3px);
  border-bottom-left-radius: var(--swpf-pagination-button-border-radius-left, 3px);
  display: inline-flex;
  gap: 0.9em;
  align-items: center;
  margin: 0;
  background: var(--swpf-pagination-button-bg-color, #7f54b3);
  color: var(--swpf-pagination-button-text-color, #FFF);
  --swpf-pagination-button-box-shadow: var(--swpf-pagination-button-box-shadow-x, 0) var(--swpf-pagination-button-box-shadow-y, 0) var(--swpf-pagination-button-box-shadow-blur, 0) var(--swpf-pagination-button-box-shadow-spread, 0) var(--swpf-pagination-button-box-shadow-color, transparent);
}

.swpf-product-pagination .woocommerce-pagination ul li .page-numbers:hover {
  background: var(--swpf-pagination-button-bg-color-hover, var(--swpf-pagination-button-bg-color, #7f54b3));
  color: var(--swpf-pagination-button-text-color-hover, var(--swpf-pagination-button-text-color, #FFF));
  border-color: var(--swpf-pagination-button-border-color-hover, var(--swpf-pagination-button-border-color, #7f54b3));
}

.swpf-product-pagination .woocommerce-pagination ul li .page-numbers.current {
  background: var(--swpf-pagination-button-bg-color-active, #000);
  color: var(--swpf-pagination-button-text-color-active, var(--swpf-pagination-button-text-color, #FFF));
  border-color: var(--swpf-pagination-button-border-color-active, var(--swpf-pagination-button-border-color, #7f54b3));
}

.swpf-product-pagination .swpf-ajax-pagination .swpf-shop-load-more {
  margin-top: var(--swpf-loadmore-button-margin-top, 0);
  margin-right: var(--swpf-loadmore-button-margin-right, 0);
  margin-bottom: var(--swpf-loadmore-button-margin-bottom, 0);
  margin-left: var(--swpf-loadmore-button-margin-left, 0);
  font-family: var(--swpf-loadmore-button-typography-font-family, inherit);
  font-weight: var(--swpf-loadmore-button-typography-font-weight, inherit);
  font-style: var(--swpf-loadmore-button-typography-font-style, inherit);
  text-transform: var(--swpf-loadmore-button-typography-text-transform, inherit);
  text-decoration: var(--swpf-loadmore-button-typography-text-decoration, inherit);
  font-size: var(--swpf-loadmore-button-typography-font-size, inherit);
  letter-spacing: var(--swpf-loadmore-button-typography-letter-spacing, inherit);
  line-height: var(--swpf-loadmore-button-typography-line-height, 1.3);
  padding-top: var(--swpf-loadmore-button-padding-top, 10px);
  padding-bottom: var(--swpf-loadmore-button-padding-bottom, 10px);
  padding-left: var(--swpf-loadmore-button-padding-left, 15px);
  padding-right: var(--swpf-loadmore-button-padding-right, 15px);
  border-style: var(--swpf-loadmore-button-border-type, none);
  border-top-width: var(--swpf-loadmore-button-border-top, 1px);
  border-right-width: var(--swpf-loadmore-button-border-right, 1px);
  border-bottom-width: var(--swpf-loadmore-button-border-bottom, 1px);
  border-left-width: var(--swpf-loadmore-button-border-left, 1px);
  border-color: var(--swpf-loadmore-button-border-color, #7f54b3);
  box-shadow: var(--swpf-loadmore-button-box-shadow-x, 0) var(--swpf-loadmore-button-box-shadow-y, 0) var(--swpf-loadmore-button-box-shadow-blur, 0) var(--swpf-loadmore-button-box-shadow-spread, 0) var(--swpf-loadmore-button-box-shadow-color, transparent);
  border-top-left-radius: var(--swpf-loadmore-button-border-radius-top, 3px);
  border-top-right-radius: var(--swpf-loadmore-button-border-radius-right, 3px);
  border-bottom-right-radius: var(--swpf-loadmore-button-border-radius-bottom, 3px);
  border-bottom-left-radius: var(--swpf-loadmore-button-border-radius-left, 3px);
  display: inline-flex;
  gap: 0.9em;
  align-items: center;
  margin: 0;
  background: var(--swpf-loadmore-button-bg-color, #7f54b3);
  color: var(--swpf-loadmore-button-text-color, #FFF);
  --swpf-loadmore-button-box-shadow: var(--swpf-loadmore-button-box-shadow-x, 0) var(--swpf-loadmore-button-box-shadow-y, 0) var(--swpf-loadmore-button-box-shadow-blur, 0) var(--swpf-loadmore-button-box-shadow-spread, 0) var(--swpf-loadmore-button-box-shadow-color, transparent);
}

.swpf-product-pagination .swpf-ajax-pagination .swpf-shop-load-more:hover {
  background: var(--swpf-loadmore-button-bg-color-hover, var(--swpf-loadmore-button-bg-color, #7f54b3));
  color: var(--swpf-loadmore-button-text-color-hover, var(--swpf-loadmore-button-text-color, #FFF));
  border-color: var(--swpf-loadmore-button-border-color-hover, var(--swpf-loadmore-button-border-color, #7f54b3));
}

/* Loader */
.swpf-loading:after,
.swpf-loading:before {
  border-color: var(--swpf-loadmore-button-loader-color, #7f54b3);
}

.swpf-big-loading:after,
.swpf-big-loading:before {
  border-color: var(--swpf-infinite-loader-color, #7f54b3);
}

/* =========Style 1========= */
.swpf-product-grid-style1 .swpf-product {
  border-style: var(--swpf-product-border-type, solid);
  border-top-width: var(--swpf-product-border-top, 1px);
  border-right-width: var(--swpf-product-border-right, 1px);
  border-bottom-width: var(--swpf-product-border-bottom, 1px);
  border-left-width: var(--swpf-product-border-left, 1px);
  border-color: var(--swpf-product-border-color, rgba(0, 0, 0, 0.05));
  box-shadow: var(--swpf-product-box-shadow-x, 0) var(--swpf-product-box-shadow-y, 0) var(--swpf-product-box-shadow-blur, 0) var(--swpf-product-box-shadow-spread, 0) var(--swpf-product-box-shadow-color, transparent);
  border-top-left-radius: var(--swpf-product-border-radius-top, 0);
  border-top-right-radius: var(--swpf-product-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-product-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-product-border-radius-left, 0);
  background: var(--swpf-product-bg-color, transparent);
  --swpf-product-box-shadow: var(--swpf-product-box-shadow-x, 0) var(--swpf-product-box-shadow-y, 0) var(--swpf-product-box-shadow-blur, 0) var(--swpf-product-box-shadow-spread, 0) var(--swpf-product-box-shadow-color, transparent);
  --swpf-product-box-shadow-hover: var(--swpf-product-hover-box-shadow-x) var(--swpf-product-hover-box-shadow-y) var(--swpf-product-hover-box-shadow-blur) var(--swpf-product-hover-box-shadow-spread) var(--swpf-product-hover-box-shadow-color);
}

.swpf-product-grid-style1 .swpf-product:hover {
  background: var(--swpf-product-hover-bg-color, var(--swpf-product-bg-color, transparent));
  border-color: var(--swpf-product-hover-border-color, var(--swpf-product-border-color, rgba(0, 0, 0, 0.05)));
  box-shadow: var(--swpf-product-box-shadow-hover, var(--swpf-product-box-shadow, none));
}

.swpf-product-grid-style1 .swpf-product-image {
  border-bottom: 1px var(--swpf-product-border-type, solid) var(--swpf-product-border-color, rgba(0, 0, 0, 0.05));
}

.swpf-product-grid-style1 .swpf-product:hover .swpf-product-image {
  border-bottom: 1px var(--swpf-product-border-type, solid) var(--swpf-product-hover-border-color, var(--swpf-product-border-color, transparent));
}

.swpf-product-grid-style1 .swpf-product-content {
  text-align: var(--swpf-product-align, center);
}

/* =========Style 2========= */
.swpf-product-grid-style2 .swpf-product {
  border-style: var(--swpf-product-border-type, solid);
  border-top-width: var(--swpf-product-border-top, 1px);
  border-right-width: var(--swpf-product-border-right, 1px);
  border-bottom-width: var(--swpf-product-border-bottom, 1px);
  border-left-width: var(--swpf-product-border-left, 1px);
  border-color: var(--swpf-product-border-color, rgba(0, 0, 0, 0.05));
  box-shadow: var(--swpf-product-box-shadow-x, 0) var(--swpf-product-box-shadow-y, 0) var(--swpf-product-box-shadow-blur, 0) var(--swpf-product-box-shadow-spread, 0) var(--swpf-product-box-shadow-color, transparent);
  border-top-left-radius: var(--swpf-product-border-radius-top, 0);
  border-top-right-radius: var(--swpf-product-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-product-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-product-border-radius-left, 0);
  background: var(--swpf-product-bg-color, transparent);
  --swpf-product-box-shadow: var(--swpf-product-box-shadow-x, 0) var(--swpf-product-box-shadow-y, 0) var(--swpf-product-box-shadow-blur, 0) var(--swpf-product-box-shadow-spread, 0) var(--swpf-product-box-shadow-color, transparent);
  --swpf-product-box-shadow-hover: var(--swpf-product-hover-box-shadow-x) var(--swpf-product-hover-box-shadow-y) var(--swpf-product-hover-box-shadow-blur) var(--swpf-product-hover-box-shadow-spread) var(--swpf-product-hover-box-shadow-color);
}


.swpf-product-grid-style2 .swpf-product-content {
  position: relative;
  margin: 0;
  background: var(--swpf-product-content-bg-color, var(--swpf-product-bg-color, #FAFAFA));
}

.swpf-product-grid-style2 .swpf-product:hover {
  background: var(--swpf-product-hover-bg-color, var(--swpf-product-content-bg-color, var(--swpf-product-bg-color, #FAFAFA)));
  border-color: var(--swpf-product-hover-border-color, var(--swpf-product-border-color, transparent));
  box-shadow: var(--swpf-product-box-shadow-hover, var(--swpf-product-box-shadow, rgba(0, 0, 0, 0.1) 0px 20px 25px -5px, rgba(0, 0, 0, 0.04) 0px 10px 10px -5px));
}

.swpf-product-grid-style2 .swpf-product-buttons {
  display: flex;
  margin-bottom: 15px;
  gap: var(--swpf-hover-buttons-space, 4px);
}

.swpf-product-grid-style2 .swpf-product-buttons .swpf-product-icon {
  flex-grow: 1;
  position: relative;
}

.swpf-product-grid-style2 .swpf-product-buttons .swpf-product-icon a {
  margin: 0;
  line-height: 1;
  width: 100%;
  border: none;
  border-radius: 0;
  box-shadow: none;
  height: var(--swpf-hover-buttons-size, 40px);
  font-size: var(--swpf-hover-buttons-icon-size, 14px);
  border-top-left-radius: var(--swpf-hover-buttons-border-radius-top, 0);
  border-top-right-radius: var(--swpf-hover-buttons-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-hover-buttons-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-hover-buttons-border-radius-left, 0);
}

.swpf-product-grid-style2 .swpf-product-tooltip {
  left: 50%;
  bottom: 100%;
  transform: translate(-50%, -10px);
}

.swpf-product-grid-style2 .swpf-product-tooltip:after {
  left: 50%;
  top: 100%;
  bottom: auto;
  border-right: 5px solid transparent;
  border-bottom: 5px solid transparent;
  border-left: 5px solid transparent;
  border-top: 5px solid var(--swpf-tooltip-bg-color, #7f54b3);
  transform: translateX(-50%);
}

.swpf-product-grid-style2 .swpf-product-content {
  text-align: var(--swpf-product-align, center);
}

/* =========Style 3========= */
.swpf-product-grid-style3 .swpf-product {
  border-style: var(--swpf-product-border-type, solid);
  border-top-width: var(--swpf-product-border-top, 1px);
  border-right-width: var(--swpf-product-border-right, 1px);
  border-bottom-width: var(--swpf-product-border-bottom, 1px);
  border-left-width: var(--swpf-product-border-left, 1px);
  border-color: var(--swpf-product-border-color, rgba(0, 0, 0, 0.05));
  box-shadow: var(--swpf-product-box-shadow-x, 0) var(--swpf-product-box-shadow-y, 0) var(--swpf-product-box-shadow-blur, 0) var(--swpf-product-box-shadow-spread, 0) var(--swpf-product-box-shadow-color, transparent);
  border-top-left-radius: var(--swpf-product-border-radius-top, 0);
  border-top-right-radius: var(--swpf-product-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-product-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-product-border-radius-left, 0);
  background: var(--swpf-product-bg-color, transparent);
  --swpf-product-box-shadow: var(--swpf-product-box-shadow-x, 0) var(--swpf-product-box-shadow-y, 0) var(--swpf-product-box-shadow-blur, 0) var(--swpf-product-box-shadow-spread, 0) var(--swpf-product-box-shadow-color, transparent);
  --swpf-product-box-shadow-hover: var(--swpf-product-hover-box-shadow-x) var(--swpf-product-hover-box-shadow-y) var(--swpf-product-hover-box-shadow-blur) var(--swpf-product-hover-box-shadow-spread) var(--swpf-product-hover-box-shadow-color);
}

.swpf-product-grid-style3 .swpf-product:hover {
  background: var(--swpf-product-hover-bg-color, var(--swpf-product-bg-color, transparent));
  border-color: var(--swpf-product-hover-border-color, var(--swpf-product-border-color, transparent));
  box-shadow: var(--swpf-product-box-shadow-hover, var(--swpf-product-box-shadow, none));
}

.swpf-product-grid-style3 .swpf-product-content {
  position: relative;
  /* Same arrangement as Style 2, except Background Color also paints the
     card behind this block. */
  background: var(--swpf-product-content-bg-color, var(--swpf-product-bg-color, #FFF));
  transition: 0.3s transform ease;
}

.swpf-product-grid-style3 .swpf-product:hover .swpf-product-content {
  transform: translateY(calc(-1 * var(--swpf-button-height)));
  background: var(--swpf-product-hover-bg-color, var(--swpf-product-content-bg-color, var(--swpf-product-bg-color, #FFF)));
}

.swpf-product-grid-style3 .swpf-product .swpf-product-cart-button {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  text-align: var(--swpf-product-align, center);
}

.swpf-product-grid-style3 .swpf-product .swpf-product-cart-button a.swpf-add-to-cart {
  opacity: 0;
  transform: 0.3s opacity ease;
}

.swpf-product-grid-style3 .swpf-product:hover .swpf-product-cart-button a.swpf-add-to-cart {
  opacity: 1;
}

.swpf-product-grid-style3 .swpf-product-content {
  text-align: var(--swpf-product-align, center);
}

/* =========Style 4========= */
.swpf-product-grid-style4 .swpf-product {
  border-style: var(--swpf-product-border-type, solid);
  border-top-width: var(--swpf-product-border-top, 1px);
  border-right-width: var(--swpf-product-border-right, 1px);
  border-bottom-width: var(--swpf-product-border-bottom, 1px);
  border-left-width: var(--swpf-product-border-left, 1px);
  border-color: var(--swpf-product-border-color, rgba(0, 0, 0, 0.05));
  box-shadow: var(--swpf-product-box-shadow-x, 0) var(--swpf-product-box-shadow-y, 0) var(--swpf-product-box-shadow-blur, 0) var(--swpf-product-box-shadow-spread, 0) var(--swpf-product-box-shadow-color, transparent);
  border-top-left-radius: var(--swpf-product-border-radius-top, 0);
  border-top-right-radius: var(--swpf-product-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-product-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-product-border-radius-left, 0);
  background: var(--swpf-product-bg-color, transparent);
  --swpf-product-box-shadow: var(--swpf-product-box-shadow-x, 0) var(--swpf-product-box-shadow-y, 0) var(--swpf-product-box-shadow-blur, 0) var(--swpf-product-box-shadow-spread, 0) var(--swpf-product-box-shadow-color, transparent);
  --swpf-product-box-shadow-hover: var(--swpf-product-hover-box-shadow-x) var(--swpf-product-hover-box-shadow-y) var(--swpf-product-hover-box-shadow-blur) var(--swpf-product-hover-box-shadow-spread) var(--swpf-product-hover-box-shadow-color);
}

.swpf-product-grid-style4 .swpf-product:hover {
  background: var(--swpf-product-hover-bg-color, var(--swpf-product-bg-color, transparent));
  border-color: var(--swpf-product-hover-border-color, var(--swpf-product-border-color, transparent));
  box-shadow: var(--swpf-product-box-shadow-hover, var(--swpf-product-box-shadow, none));
}

.swpf-product-grid-style4 .swpf-product-content {
  text-align: var(--swpf-product-align, center);
}

.swpf-product-grid-style4 .swpf-product .swpf-product-cart-button {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  text-align: center;
  overflow: hidden;
  margin: 0;
  padding: 15px 0;
}

.swpf-product-grid-style4 .swpf-product .swpf-product-cart-button a.swpf-add-to-cart {
  align-items: center;
  transition: 0.3s transform ease;
  transform: translateY(100px);
}

.swpf-product-grid-style4 .swpf-product:hover .swpf-product-cart-button a.swpf-add-to-cart {
  transform: translateY(0);
}


/* =========Style 5========= */
.swpf-product-grid-style5 .swpf-product {
  border-style: var(--swpf-product-border-type, solid);
  border-top-width: var(--swpf-product-border-top, 1px);
  border-right-width: var(--swpf-product-border-right, 1px);
  border-bottom-width: var(--swpf-product-border-bottom, 1px);
  border-left-width: var(--swpf-product-border-left, 1px);
  border-color: var(--swpf-product-border-color, rgba(0, 0, 0, 0.05));
  box-shadow: var(--swpf-product-box-shadow-x, 0) var(--swpf-product-box-shadow-y, 0) var(--swpf-product-box-shadow-blur, 0) var(--swpf-product-box-shadow-spread, 0) var(--swpf-product-box-shadow-color, transparent);
  border-top-left-radius: var(--swpf-product-border-radius-top, 0);
  border-top-right-radius: var(--swpf-product-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-product-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-product-border-radius-left, 0);
  background: var(--swpf-product-bg-color, transparent);
  --swpf-product-box-shadow: var(--swpf-product-box-shadow-x, 0) var(--swpf-product-box-shadow-y, 0) var(--swpf-product-box-shadow-blur, 0) var(--swpf-product-box-shadow-spread, 0) var(--swpf-product-box-shadow-color, transparent);
  --swpf-product-box-shadow-hover: var(--swpf-product-hover-box-shadow-x) var(--swpf-product-hover-box-shadow-y) var(--swpf-product-hover-box-shadow-blur) var(--swpf-product-hover-box-shadow-spread) var(--swpf-product-hover-box-shadow-color);
}

.swpf-product-grid-style5 .swpf-product:hover {
  background: var(--swpf-product-hover-bg-color, var(--swpf-product-bg-color, transparent));
  border-color: var(--swpf-product-hover-border-color, var(--swpf-product-border-color, transparent));
  box-shadow: var(--swpf-product-box-shadow-hover, var(--swpf-product-box-shadow, none));
}

.swpf-product-grid-style5 .swpf-product-content {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  text-align: var(--swpf-product-align, center);
}

.swpf-product-grid-style5.swpf-text-align-left .swpf-product-content {
  flex-direction: row;
  gap: 20px;
}

.swpf-product-grid-style5.swpf-text-align-right .swpf-product-content {
  flex-direction: row-reverse;
  gap: 20px;
}

.swpf-product-grid-style5.swpf-text-align-left .swpf-product-elements,
.swpf-product-grid-style5.swpf-text-align-right .swpf-product-elements {
  flex: calc(100% - 80px);
}

.swpf-product-grid-style5 .swpf-product-cart-button a.swpf-add-to-cart {
  position: relative;
  height: 60px;
  width: 60px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.swpf-product-grid-style5 .swpf-product-cart-button a.swpf-add-to-cart span {
  position: absolute;
  left: 50%;
  top: 100%;
}

.swpf-product-grid-style5 .swpf-product-cart-button a.swpf-add-to-cart span {
  background: var(--swpf-cart-button-bg-color, #7f54b3);
  font-size: 12px;
  line-height: 1;
  white-space: nowrap;
  position: absolute;
  padding: 5px 10px;
  left: 50%;
  bottom: 100%;
  transform: translate(-50%, -30px);
  z-index: 10;
  opacity: 0;
  visibility: hidden;
  transition: 350ms ease 0s;
  border-radius: 5px;
  color: var(--swpf-cart-button-text-color, #FFF);
  top: auto;
}

.swpf-product-grid-style5 .swpf-product-cart-button a.swpf-add-to-cart span:after {
  content: "";
  width: 0;
  height: 0;
  position: absolute;
  left: 50%;
  top: 100%;
  bottom: auto;
  border-right: 5px solid transparent;
  border-bottom: 5px solid transparent;
  border-left: 6px solid transparent;
  border-top: 5px solid var(--swpf-cart-button-bg-color, #7f54b3);
  transform: translateX(-50%);
}

.swpf-product-grid-style5 .swpf-product-cart-button a.swpf-add-to-cart:hover span {
  opacity: 1;
  visibility: visible;
  transform: translate(-50%, -10px);
}

.swpf-product-grid-style5 .swpf-product-cart-button .swpf-add-to-cart.loading::after {
  display: none;
}

/* =========Style 6========= */
.swpf-product-grid-style6 .swpf-product {
  border-style: var(--swpf-product-border-type, solid);
  border-top-width: var(--swpf-product-border-top, 1px);
  border-right-width: var(--swpf-product-border-right, 1px);
  border-bottom-width: var(--swpf-product-border-bottom, 1px);
  border-left-width: var(--swpf-product-border-left, 1px);
  border-color: var(--swpf-product-border-color, rgba(0, 0, 0, 0.05));
  box-shadow: var(--swpf-product-box-shadow-x, 0) var(--swpf-product-box-shadow-y, 0) var(--swpf-product-box-shadow-blur, 0) var(--swpf-product-box-shadow-spread, 0) var(--swpf-product-box-shadow-color, transparent);
  border-top-left-radius: var(--swpf-product-border-radius-top, 0);
  border-top-right-radius: var(--swpf-product-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-product-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-product-border-radius-left, 0);
  background: var(--swpf-product-bg-color, transparent);
  --swpf-product-box-shadow: var(--swpf-product-box-shadow-x, 0) var(--swpf-product-box-shadow-y, 0) var(--swpf-product-box-shadow-blur, 0) var(--swpf-product-box-shadow-spread, 0) var(--swpf-product-box-shadow-color, transparent);
  --swpf-product-box-shadow-hover: var(--swpf-product-hover-box-shadow-x) var(--swpf-product-hover-box-shadow-y) var(--swpf-product-hover-box-shadow-blur) var(--swpf-product-hover-box-shadow-spread) var(--swpf-product-hover-box-shadow-color);
}

.swpf-product-grid-style6 .swpf-product:hover {
  background: var(--swpf-product-hover-bg-color, var(--swpf-product-bg-color, transparent));
  border-color: var(--swpf-product-hover-border-color, var(--swpf-product-border-color, transparent));
  box-shadow: var(--swpf-product-box-shadow-hover, var(--swpf-product-box-shadow, none));
}

.swpf-product-grid-style6 .swpf-product-content {
  text-align: var(--swpf-product-align, center);
}

.swpf-product-grid-style6 .swpf-product-footer {
  display: flex;
  align-items: center;
  flex-direction: column;
  gap: var(--swpf-hover-buttons-space, 10px);
  margin-top: 20px;
}

.swpf-product-grid-style6.swpf-text-align-right .swpf-product-footer {
  align-items: flex-end;
}

.swpf-product-grid-style6.swpf-text-align-left .swpf-product-footer {
  align-items: flex-start;
}

.swpf-product-grid-style6 .swpf-product-buttons {
  display: flex;
  align-items: center;
  gap: var(--swpf-hover-buttons-space, 10px);
}

.swpf-product-grid-style6 .swpf-product-buttons .swpf-product-icon a {
  margin: 0;
  line-height: 1;
  border: none;
  border-radius: 0;
  box-shadow: none;
  height: var(--swpf-hover-buttons-size, 40px);
  width: var(--swpf-hover-buttons-size, 40px);
  font-size: var(--swpf-hover-buttons-icon-size, 14px);
  border-top-left-radius: var(--swpf-hover-buttons-border-radius-top, 0);
  border-top-right-radius: var(--swpf-hover-buttons-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-hover-buttons-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-hover-buttons-border-radius-left, 0);
}

.swpf-product-grid-style6 .swpf-product-tooltip {
  left: 50%;
  bottom: 100%;
  transform: translate(-50%, -10px);
}

.swpf-product-grid-style6 .swpf-product-tooltip:after {
  left: 50%;
  top: 100%;
  bottom: auto;
  border-right: 5px solid transparent;
  border-bottom: 5px solid transparent;
  border-left: 5px solid transparent;
  border-top: 5px solid var(--swpf-tooltip-bg-color, #7f54b3);
  transform: translateX(-50%);
}

.swpf-product-grid-style6 .swpf-product-content {
  text-align: var(--swpf-product-align, center);
}

.swpf-product-grid.swpf-product-grid-style6 .swpf-product .swpf-product-cart-button {
  margin: 0;
}

/* =========Style 7========= */
.swpf-product-grid-style7 .swpf-product {
  border-style: var(--swpf-product-border-type, solid);
  border-top-width: var(--swpf-product-border-top, 1px);
  border-right-width: var(--swpf-product-border-right, 1px);
  border-bottom-width: var(--swpf-product-border-bottom, 1px);
  border-left-width: var(--swpf-product-border-left, 1px);
  border-color: var(--swpf-product-border-color, rgba(0, 0, 0, 0.05));
  box-shadow: var(--swpf-product-box-shadow-x, 0) var(--swpf-product-box-shadow-y, 0) var(--swpf-product-box-shadow-blur, 0) var(--swpf-product-box-shadow-spread, 0) var(--swpf-product-box-shadow-color, transparent);
  border-top-left-radius: var(--swpf-product-border-radius-top, 0);
  border-top-right-radius: var(--swpf-product-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-product-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-product-border-radius-left, 0);
  background: var(--swpf-product-bg-color, transparent);
  --swpf-product-box-shadow: var(--swpf-product-box-shadow-x, 0) var(--swpf-product-box-shadow-y, 0) var(--swpf-product-box-shadow-blur, 0) var(--swpf-product-box-shadow-spread, 0) var(--swpf-product-box-shadow-color, transparent);
  --swpf-product-box-shadow-hover: var(--swpf-product-hover-box-shadow-x) var(--swpf-product-hover-box-shadow-y) var(--swpf-product-hover-box-shadow-blur) var(--swpf-product-hover-box-shadow-spread) var(--swpf-product-hover-box-shadow-color);
}

.swpf-product-grid-style7 .swpf-product:hover {
  background: var(--swpf-product-hover-bg-color, var(--swpf-product-bg-color, transparent));
  border-color: var(--swpf-product-hover-border-color, var(--swpf-product-border-color, transparent));
  box-shadow: var(--swpf-product-box-shadow-hover, var(--swpf-product-box-shadow, none));
}

.swpf-product-grid-style7 .swpf-product-content {
  text-align: var(--swpf-product-align, center);
}

.swpf-product-grid-style7 .swpf-product-footer {
  position: relative;
}

.swpf-product-grid-style7 .swpf-product .swpf-product-cart-button {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  opacity: 0;
  display: flex;
  visibility: hidden;
  transform: translateY(100%);
  transition: all 0.3s ease-in-out;
  margin: 0;
}

.swpf-product-grid-style7.swpf-text-align-center .swpf-product .swpf-product-cart-button {
  justify-content: center;
}

.swpf-product-grid-style7.swpf-text-align-right .swpf-product .swpf-product-cart-button {
  justify-content: flex-end;
}

.swpf-product-grid-style7 .swpf-product .swpf-product-price {
  opacity: 1;
  transform: translateY(0);
  transition: all 0.3s ease-in-out;
}

.swpf-product-grid-style7 .swpf-product:hover .swpf-product-price {
  transform: translateY(-100%);
  opacity: 0;
}

.swpf-product-grid-style7 .swpf-product:hover .swpf-product-cart-button {
  transform: translateY(0);
  opacity: 1;
  visibility: visible;
}

.swpf-product-grid-style7 .swpf-product .swpf-product-cart-button a.swpf-add-to-cart {
  font-family: var(--swpf-cart-button-s7-typography-font-family, inherit);
  font-weight: var(--swpf-cart-button-s7-typography-font-weight, inherit);
  font-style: var(--swpf-cart-button-s7-typography-font-style, inherit);
  text-transform: var(--swpf-cart-button-s7-typography-text-transform, inherit);
  text-decoration: var(--swpf-cart-button-s7-typography-text-decoration, inherit);
  font-size: var(--swpf-cart-button-s7-typography-font-size, inherit);
  letter-spacing: var(--swpf-cart-button-s7-typography-letter-spacing, inherit);
  line-height: var(--swpf-cart-button-s7-typography-line-height, 1.3);
  padding: 0;
  border: none;
  box-shadow: none;
  border-radius: 0;
  display: inline-flex;
  gap: 0.6em;
  align-items: center;
  margin: 0;
  background: none;
  color: var(--swpf-cart-button-s7-text-color, inherit);
  text-align: left;
}

.swpf-product-grid-style7 .swpf-product .swpf-product-cart-button a.swpf-add-to-cart:hover {
  color: var(--swpf-cart-button-s7-text-color-hover, var(--swpf-cart-button-s7-text-color, inherit));
}


/* =========Style 8========= */
.swpf-product-grid-style8 .swpf-product {
  overflow: hidden;
  border-style: var(--swpf-product-border-type, solid);
  border-top-width: var(--swpf-product-border-top, 1px);
  border-right-width: var(--swpf-product-border-right, 1px);
  border-bottom-width: var(--swpf-product-border-bottom, 1px);
  border-left-width: var(--swpf-product-border-left, 1px);
  border-color: var(--swpf-product-border-color, rgba(0, 0, 0, 0.05));
  box-shadow: var(--swpf-product-box-shadow-x, 0) var(--swpf-product-box-shadow-y, 0) var(--swpf-product-box-shadow-blur, 0) var(--swpf-product-box-shadow-spread, 0) var(--swpf-product-box-shadow-color, transparent);
  border-top-left-radius: var(--swpf-product-border-radius-top, 0);
  border-top-right-radius: var(--swpf-product-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-product-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-product-border-radius-left, 0);
  background: var(--swpf-product-bg-color, transparent);
  --swpf-product-box-shadow: var(--swpf-product-box-shadow-x, 0) var(--swpf-product-box-shadow-y, 0) var(--swpf-product-box-shadow-blur, 0) var(--swpf-product-box-shadow-spread, 0) var(--swpf-product-box-shadow-color, transparent);
  --swpf-product-box-shadow-hover: var(--swpf-product-hover-box-shadow-x) var(--swpf-product-hover-box-shadow-y) var(--swpf-product-hover-box-shadow-blur) var(--swpf-product-hover-box-shadow-spread) var(--swpf-product-hover-box-shadow-color);
}

.swpf-product-grid-style8 .swpf-product:hover {
  background: var(--swpf-product-hover-bg-color, var(--swpf-product-bg-color, transparent));
  border-color: var(--swpf-product-hover-border-color, var(--swpf-product-border-color, transparent));
  box-shadow: var(--swpf-product-box-shadow-hover, var(--swpf-product-box-shadow, none));
}

.swpf-product-grid-style8 .swpf-product-content {
  text-align: var(--swpf-product-align, center);
}

.swpf-product-grid-style8 .swpf-product {
  position: relative;
}

.swpf-product-grid-style8 .swpf-product-buttons {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--swpf-hover-buttons-space, 10px);
  position: absolute;
  left: 0;
  right: 0;
  top: 100%;
  padding-top: var(--swpf-product-content-padding-top, 0);
  padding-right: var(--swpf-product-content-padding-right, 0);
  padding-bottom: var(--swpf-product-content-padding-bottom, 0);
  padding-left: var(--swpf-product-content-padding-left, 0);
  z-index: 99;
  background: #FFF;
  transform: translateY(10%);
  transition: transform 0.3s ease-in-out;
}

.swpf-product-grid-style8 .swpf-product:hover .swpf-product-buttons {
  transform: translateY(-100%);
}

.swpf-product-grid-style8.swpf-text-align-left .swpf-product-buttons {
  justify-content: flex-start;
}

.swpf-product-grid-style8.swpf-text-align-right .swpf-product-buttons {
  justify-content: flex-end;
}

.swpf-product-grid-style8 .swpf-product-buttons .swpf-product-icon a {
  margin: 0;
  padding: 0;
  line-height: 1;
  border: none;
  border-radius: 0;
  box-shadow: none;
  height: var(--swpf-hover-buttons-size, 40px);
  width: var(--swpf-hover-buttons-size, 40px);
  font-size: var(--swpf-hover-buttons-icon-size, 14px);
  border-top-left-radius: var(--swpf-hover-buttons-border-radius-top, 0);
  border-top-right-radius: var(--swpf-hover-buttons-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-hover-buttons-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-hover-buttons-border-radius-left, 0);
}

.swpf-product-grid-style8 .swpf-product-tooltip {
  left: 50%;
  bottom: 100%;
  transform: translate(-50%, -10px);
}

.swpf-product-grid-style8 .swpf-product-tooltip:after {
  left: 50%;
  top: 100%;
  bottom: auto;
  border-right: 5px solid transparent;
  border-bottom: 5px solid transparent;
  border-left: 5px solid transparent;
  border-top: 5px solid var(--swpf-tooltip-bg-color, #7f54b3);
  transform: translateX(-50%);
}

.swpf-product-grid-style8 .swpf-product .swpf-product-cart-button {
  margin: 0;
}

.swpf-product-grid-style8 .swpf-product-buttons .swpf-product-cart.swpf-product-icon a.added_to_cart {
  display: none !important;
}

/* Product Sorting */
.swpf-product-sorting {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: var(--swpf-sorting-margin-bottom, 40px);
}

.swpf-product-sorting .woocommerce-result-count {
  margin: 0;
}

/*
 * Only once something has been set. Declaring these with `initial` or
 * `inherit` fallbacks is not the same as leaving them alone - it overrides
 * whatever the theme and the browser had already given the bar.
 */
.swpf-sorting-styled .woocommerce-result-count {
  color: var(--swpf-sorting-count-color, inherit);
  font-family: var(--swpf-sorting-count-typography-font-family, inherit);
  font-weight: var(--swpf-sorting-count-typography-font-weight, inherit);
  font-style: var(--swpf-sorting-count-typography-font-style, inherit);
  text-transform: var(--swpf-sorting-count-typography-text-transform, inherit);
  text-decoration: var(--swpf-sorting-count-typography-text-decoration, inherit);
  font-size: var(--swpf-sorting-count-typography-font-size, inherit);
  letter-spacing: var(--swpf-sorting-count-typography-letter-spacing, inherit);
  line-height: var(--swpf-sorting-count-typography-line-height, inherit);
}

.swpf-product-sorting .swpf-orderby {
  max-width: 50%;
  /* Always on, unlike the rest of the dropdown's styling below: the border has
     a default of its own (1px solid #EEEEEE), and the fallbacks match it so a
     layout saved with blank border fields still gets that edge. Choosing
     None in the builder writes border-style: none. */
  border-style: var(--swpf-sorting-select-border-type, solid);
  border-top-width: var(--swpf-sorting-select-border-top, 1px);
  border-right-width: var(--swpf-sorting-select-border-right, 1px);
  border-bottom-width: var(--swpf-sorting-select-border-bottom, 1px);
  border-left-width: var(--swpf-sorting-select-border-left, 1px);
  border-color: var(--swpf-sorting-select-border-color, #EEEEEE);
}

.swpf-sorting-styled .swpf-orderby {
  color: var(--swpf-sorting-select-color, inherit);
  background-color: var(--swpf-sorting-select-bg-color, transparent);
  font-family: var(--swpf-sorting-select-typography-font-family, inherit);
  font-weight: var(--swpf-sorting-select-typography-font-weight, inherit);
  font-style: var(--swpf-sorting-select-typography-font-style, inherit);
  text-transform: var(--swpf-sorting-select-typography-text-transform, inherit);
  text-decoration: var(--swpf-sorting-select-typography-text-decoration, inherit);
  font-size: var(--swpf-sorting-select-typography-font-size, inherit);
  letter-spacing: var(--swpf-sorting-select-typography-letter-spacing, inherit);
  line-height: var(--swpf-sorting-select-typography-line-height, inherit);
  border-top-left-radius: var(--swpf-sorting-select-border-radius-top, revert);
  border-top-right-radius: var(--swpf-sorting-select-border-radius-right, revert);
  border-bottom-right-radius: var(--swpf-sorting-select-border-radius-bottom, revert);
  border-bottom-left-radius: var(--swpf-sorting-select-border-radius-left, revert);
  padding-top: var(--swpf-sorting-select-padding-top, revert);
  padding-right: var(--swpf-sorting-select-padding-right, revert);
  padding-bottom: var(--swpf-sorting-select-padding-bottom, revert);
  padding-left: var(--swpf-sorting-select-padding-left, revert);
}

/* Swatches */
.swpf-product-grid.swpf-text-align-left table.cfvsw-shop-variations tr td,
.swpf-product-grid.swpf-text-align-left table.cfvsw-shop-variations .cfvsw-swatches-container {
  justify-content: flex-start;
}

.swpf-product-grid.swpf-text-align-center table.cfvsw-shop-variations tr td,
.swpf-product-grid.swpf-text-align-center table.cfvsw-shop-variations .cfvsw-swatches-container {
  justify-content: center;
}

.swpf-product-grid.swpf-text-align-right table.cfvsw-shop-variations tr td,
.swpf-product-grid.swpf-text-align-right table.cfvsw-shop-variations .cfvsw-swatches-container {
  justify-content: flex-end;
}

[data-id=""].swpf-woo-container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 40px;
}

/**/
.woocommerce ul.products.swpf-product-grid::after,
.woocommerce ul.products.swpf-product-grid::before {
  display: none;
}

body.swpf-pagination-loading .swpf-woo-container:has([data-pagination-type="ajax-pagination"]) {
  opacity: 0.6;
}

.swpf-product-buttons .wcboost-wishlist-button__icon,
.swpf-product-buttons .wcboost-products-compare-button__icon {
  margin: 0;
}

/* -------------- WooCommerce Custom Quick View ------------------ */
.swpf-qv-popup-container {
  position: fixed;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
  background: rgba(0, 0, 0, 0.8);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 99999;
}

#swpf-qv-content {
  background: #FFF;
  max-width: 900px;
  width: 90%;
  position: relative;
  padding: 40px;
  max-height: 80vh;
  overflow-y: auto;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
  z-index: 999999;
}

/* ===== Scrollbar Styling ===== */

/* For WebKit browsers (Chrome, Edge, Safari) */
#swpf-qv-content::-webkit-scrollbar {
  width: 4px;
}

#swpf-qv-content::-webkit-scrollbar-track {
  background: #f1f1f1;
}

#swpf-qv-content::-webkit-scrollbar-thumb {
  background: #CCC;
}

#swpf-qv-content::-webkit-scrollbar-thumb:hover {
  background: #BBB;
}

.swpf-qv-loading .swpf-qv-loader {
  display: block;
}

.swpf-qv-loader {
  display: none;
  width: 50px;
  --b: 8px;
  aspect-ratio: 1;
  border-radius: 50%;
  padding: 1px;
  background: conic-gradient(#0000 10%, #FFF) content-box;
  -webkit-mask:
    repeating-conic-gradient(#0000 0deg, #000 1deg 20deg, #0000 21deg 36deg),
    radial-gradient(farthest-side, #0000 calc(100% - var(--b) - 1px), #000 calc(100% - var(--b)));
  -webkit-mask-composite: destination-in;
  mask-composite: intersect;
  animation: swpf-qv-loader-animation 1s infinite steps(10);
}

@keyframes swpf-qv-loader-animation {
  to {
    transform: rotate(1turn)
  }
}

.swpf-qv-close {
  position: absolute;
  right: 5px;
  top: 5px;
  width: 40px;
  height: 40px;
  border: none;
  cursor: pointer;
  background: #EEE;
  z-index: 99;
}

/* The two crossing lines */
.swpf-qv-close::before,
.swpf-qv-close::after {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  width: 20px;
  height: 2px;
  background-color: #333;
  transform-origin: center;
}

.swpf-qv-close::before {
  transform: translate(-50%, -50%) rotate(45deg);
}

.swpf-qv-close::after {
  transform: translate(-50%, -50%) rotate(-45deg);
}

/* Optional hover effect */
.swpf-qv-close:hover::before,
.swpf-qv-close:hover::after {
  background-color: #e63946;
}

.swpf-qv-product {
  display: flex;
  gap: 40px;
  align-items: flex-start;
}

.swpf-qv-image {
  position: relative;
  flex: 0 0 50%;
  overflow: hidden;
}

ul.swpf-qv-slides {
  list-style: none;
  margin: 0;
  padding: 0;
}

ul.swpf-qv-slides li {
  list-style: none;
  margin: 0;
  padding: 0;
}

.swpf-qv-image .flex-direction-nav,
.swpf-qv-image .flex-direction-nav li {
  list-style: none;
  margin: 0;
  padding: 0;
}

.swpf-qv-image .flex-direction-nav li a {
  text-decoration: none;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  margin: -20px 0 0;
  position: absolute;
  top: 50%;
  z-index: 10;
  overflow: hidden;
  opacity: 0;
  cursor: pointer;
  color: rgba(0, 0, 0, 0.8);
  transition: all 0.3s ease;
  background: rgba(0, 0, 0, 0.2);
  border-radius: 50%;
}

.swpf-qv-image .flex-direction-nav .flex-prev {
  left: -60px;
}

.swpf-qv-image .flex-direction-nav .flex-next {
  right: -60px;
}

.swpf-qv-image .flex-direction-nav .flex-prev:before,
.swpf-qv-image .flex-direction-nav .flex-next:before {
  content: "";
  display: inline-block;
  width: 12px;
  height: 12px;
  border-top: 2px solid #FFF;
  border-right: 2px solid #FFF;
}

/* Left arrow (rotated) */
.swpf-qv-image .flex-direction-nav .flex-prev:before {
  transform: rotate(-135deg);
  margin-right: -5px;
}

/* Right arrow (rotated) */
.swpf-qv-image .flex-direction-nav .flex-next:before {
  transform: rotate(45deg);
  margin-left: -5px;
}

.swpf-qv-image:hover .flex-direction-nav .flex-prev {
  opacity: 1;
  left: 0;
}

.swpf-qv-image:hover .flex-direction-nav .flex-next {
  opacity: 1;
  right: 0;
}


.swpf-qv-added-msg {
  margin-top: 20px;
  border: 1px dashed green;
  padding: 10px;
  text-align: center;
  font-size: 0.9em;
}

.swpf-qv-added-msg a {
  text-decoration: underline;
}

@media screen and (max-width:768px) {
  .swpf-qv-product {
    flex-direction: column;
  }
}
/* Grid variations */

/* A card that spans two rows only looks deliberate against neighbours that
   fill their own row, so the span layouts stretch whether or not the equal
   height switch is on. */
.swpf-product-grid.swpf-grid-equal,
.swpf-product-grid.swpf-grid-featured,
.swpf-product-grid.swpf-grid-highlight {
  align-items: stretch;
}

/* A repeating two column card leaves a hole whenever the cycle does not
   divide into the row. Backfilling costs a little catalogue order, which is
   the better trade for a decorative pattern. */
.swpf-product-grid.swpf-grid-highlight {
  grid-auto-flow: dense;
}

/*
 * Stretching pins every bottom edge to the row, so the offset below would come
 * out of the card's height instead of moving it: the tops would step down and
 * the bottoms would stay in line, which is the opposite of a stagger. The
 * layout has to opt out of equal height to mean anything.
 */
.swpf-product-grid.swpf-grid-staggered {
  align-items: start;
}

/*
 * Masonry. public/js/grid-masonry.js measures every card and sets how many rows
 * it spans, so the grid needs rows too small to see and no row gap of its own:
 * the script reads the gap first and folds it into each span. It adds
 * swpf-masonry-on once it has done that, so until then - or with no script -
 * this is an ordinary top-aligned grid.
 */
.swpf-product-grid.swpf-grid-masonry {
  align-items: start;
}

.swpf-product-grid.swpf-grid-masonry.swpf-masonry-on {
  grid-auto-rows: 1px;
  row-gap: 0;
}

/*
 * Kept out of sight until the script has placed the cards, so the ordinary
 * grid is never seen jumping into columns. The animation is only a fail-safe:
 * if the script never runs - blocked, broken or an old browser - the grid
 * still appears after a second instead of staying hidden.
 */
.swpf-product-grid.swpf-grid-masonry:not(.swpf-masonry-on) {
  opacity: 0;
  animation: swpf-masonry-reveal 0s linear 1s forwards;
}

@keyframes swpf-masonry-reveal {
  to {
    opacity: 1;
  }
}

/*
 * Varied Image Heights. Masonry needs cards of different heights and most
 * catalogues use square photos, so each image is cropped to one of a cycle of
 * five shapes. Five shares no factor with any column count from two to six,
 * so neighbouring columns never repeat the same sequence. Being keyed to
 * position, the cycle carries on through Load More and restarts with each
 * ajax page. It outranks the Aspect Ratio setting, which it replaces here.
 */
.swpf-masonry-varied > .swpf-product:nth-child(5n+1) .swpf-general-layout-product-img {
  aspect-ratio: 1 / 1;
}

.swpf-masonry-varied > .swpf-product:nth-child(5n+2) .swpf-general-layout-product-img {
  aspect-ratio: 4 / 5;
}

.swpf-masonry-varied > .swpf-product:nth-child(5n+3) .swpf-general-layout-product-img {
  aspect-ratio: 3 / 4;
}

.swpf-masonry-varied > .swpf-product:nth-child(5n+4) .swpf-general-layout-product-img {
  aspect-ratio: 5 / 4;
}

.swpf-masonry-varied > .swpf-product:nth-child(5n+5) .swpf-general-layout-product-img {
  aspect-ratio: 2 / 3;
}

/* Desktop */
@media screen and (min-width:1025px) {
  .swpf-grid-featured:not(.swpf-cols-d-1) > .swpf-product:first-child {
    grid-column: span 2;
    grid-row: span 2;
  }

  .swpf-grid-highlight.swpf-highlight-3:not(.swpf-cols-d-1) > .swpf-product:nth-child(3n+1),
  .swpf-grid-highlight.swpf-highlight-4:not(.swpf-cols-d-1) > .swpf-product:nth-child(4n+1),
  .swpf-grid-highlight.swpf-highlight-5:not(.swpf-cols-d-1) > .swpf-product:nth-child(5n+1),
  .swpf-grid-highlight.swpf-highlight-6:not(.swpf-cols-d-1) > .swpf-product:nth-child(6n+1),
  .swpf-grid-highlight.swpf-highlight-7:not(.swpf-cols-d-1) > .swpf-product:nth-child(7n+1),
  .swpf-grid-highlight.swpf-highlight-8:not(.swpf-cols-d-1) > .swpf-product:nth-child(8n+1) {
    grid-column: span 2;
    grid-row: span 2;
  }

  .swpf-grid-staggered.swpf-cols-d-2 > .swpf-product:nth-child(2n),
  .swpf-grid-staggered.swpf-cols-d-3 > .swpf-product:nth-child(3n+2),
  .swpf-grid-staggered.swpf-cols-d-4 > .swpf-product:nth-child(2n),
  .swpf-grid-staggered.swpf-cols-d-5 > .swpf-product:nth-child(5n+2),
  .swpf-grid-staggered.swpf-cols-d-5 > .swpf-product:nth-child(5n+4),
  .swpf-grid-staggered.swpf-cols-d-6 > .swpf-product:nth-child(2n) {
    margin-top: var(--swpf-grid-stagger-offset, 40px);
  }
}

/* Tablet */
@media screen and (min-width:768px) and (max-width:1024px) {
  .swpf-grid-featured:not(.swpf-cols-t-1) > .swpf-product:first-child {
    grid-column: span 2;
    grid-row: span 2;
  }

  .swpf-grid-highlight.swpf-highlight-3:not(.swpf-cols-t-1) > .swpf-product:nth-child(3n+1),
  .swpf-grid-highlight.swpf-highlight-4:not(.swpf-cols-t-1) > .swpf-product:nth-child(4n+1),
  .swpf-grid-highlight.swpf-highlight-5:not(.swpf-cols-t-1) > .swpf-product:nth-child(5n+1),
  .swpf-grid-highlight.swpf-highlight-6:not(.swpf-cols-t-1) > .swpf-product:nth-child(6n+1),
  .swpf-grid-highlight.swpf-highlight-7:not(.swpf-cols-t-1) > .swpf-product:nth-child(7n+1),
  .swpf-grid-highlight.swpf-highlight-8:not(.swpf-cols-t-1) > .swpf-product:nth-child(8n+1) {
    grid-column: span 2;
    grid-row: span 2;
  }

  .swpf-grid-staggered.swpf-cols-t-2 > .swpf-product:nth-child(2n),
  .swpf-grid-staggered.swpf-cols-t-3 > .swpf-product:nth-child(3n+2),
  .swpf-grid-staggered.swpf-cols-t-4 > .swpf-product:nth-child(2n),
  .swpf-grid-staggered.swpf-cols-t-5 > .swpf-product:nth-child(5n+2),
  .swpf-grid-staggered.swpf-cols-t-5 > .swpf-product:nth-child(5n+4),
  .swpf-grid-staggered.swpf-cols-t-6 > .swpf-product:nth-child(2n) {
    margin-top: var(--swpf-grid-stagger-offset, 40px);
  }
}

/* Mobile */
@media screen and (max-width:767px) {
  .swpf-grid-featured:not(.swpf-cols-m-1) > .swpf-product:first-child {
    grid-column: span 2;
    grid-row: span 2;
  }

  .swpf-grid-highlight.swpf-highlight-3:not(.swpf-cols-m-1) > .swpf-product:nth-child(3n+1),
  .swpf-grid-highlight.swpf-highlight-4:not(.swpf-cols-m-1) > .swpf-product:nth-child(4n+1),
  .swpf-grid-highlight.swpf-highlight-5:not(.swpf-cols-m-1) > .swpf-product:nth-child(5n+1),
  .swpf-grid-highlight.swpf-highlight-6:not(.swpf-cols-m-1) > .swpf-product:nth-child(6n+1),
  .swpf-grid-highlight.swpf-highlight-7:not(.swpf-cols-m-1) > .swpf-product:nth-child(7n+1),
  .swpf-grid-highlight.swpf-highlight-8:not(.swpf-cols-m-1) > .swpf-product:nth-child(8n+1) {
    grid-column: span 2;
    grid-row: span 2;
  }

  .swpf-grid-staggered.swpf-cols-m-2 > .swpf-product:nth-child(2n),
  .swpf-grid-staggered.swpf-cols-m-3 > .swpf-product:nth-child(3n+2),
  .swpf-grid-staggered.swpf-cols-m-4 > .swpf-product:nth-child(2n),
  .swpf-grid-staggered.swpf-cols-m-5 > .swpf-product:nth-child(5n+2),
  .swpf-grid-staggered.swpf-cols-m-5 > .swpf-product:nth-child(5n+4),
  .swpf-grid-staggered.swpf-cols-m-6 > .swpf-product:nth-child(2n) {
    margin-top: var(--swpf-grid-stagger-offset, 40px);
  }
}

/* No products found */
.swpf-empty-align-left { text-align: left; }
.swpf-empty-align-center { text-align: center; }
.swpf-empty-align-right { text-align: right; }

/*
 * Only once something has been set. The notice is WooCommerce's own and the
 * theme has usually already given it a look, so restyling it unasked would
 * change how every existing shop reports an empty filter.
 */
.swpf-empty-styled.swpf-no-products,
.swpf-empty-styled .woocommerce-no-products-found {
  color: var(--swpf-empty-color, inherit);
  background: var(--swpf-empty-bg-color, transparent);
  font-family: var(--swpf-empty-typography-font-family, inherit);
  font-weight: var(--swpf-empty-typography-font-weight, inherit);
  font-style: var(--swpf-empty-typography-font-style, inherit);
  text-transform: var(--swpf-empty-typography-text-transform, inherit);
  text-decoration: var(--swpf-empty-typography-text-decoration, inherit);
  font-size: var(--swpf-empty-typography-font-size, inherit);
  letter-spacing: var(--swpf-empty-typography-letter-spacing, inherit);
  line-height: var(--swpf-empty-typography-line-height, inherit);
  padding-top: var(--swpf-empty-padding-top, 0);
  padding-right: var(--swpf-empty-padding-right, 0);
  padding-bottom: var(--swpf-empty-padding-bottom, 0);
  padding-left: var(--swpf-empty-padding-left, 0);
  border-top-left-radius: var(--swpf-empty-border-radius-top, 0);
  border-top-right-radius: var(--swpf-empty-border-radius-right, 0);
  border-bottom-right-radius: var(--swpf-empty-border-radius-bottom, 0);
  border-bottom-left-radius: var(--swpf-empty-border-radius-left, 0);
}

/* The notice carries a background, border and margin of its own, which would
   sit on top of everything set above. */
.swpf-empty-styled .woocommerce-info,
.swpf-empty-styled.woocommerce-no-products-found {
  margin: 0;
  padding: 0;
  border: 0;
  background: transparent;
  color: inherit;
  font: inherit;
}

.swpf-empty-styled .woocommerce-info:before {
  display: none;
}

/* Badge shape */
.swpf-badge-shape-notch .swpf-product-badge span {
  clip-path: polygon(100% 0%, calc(100% - 8px) 50%, 100% 100%, 0 100%, 0 0);
}

.swpf-badge-shape-pill .swpf-product-badge span {
  border-radius: 999px;
}

/* Square first, so the curve reads as a circle whatever the text length. */
.swpf-badge-shape-circle .swpf-product-badge span {
  border-radius: 50%;
  aspect-ratio: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  text-align: center;
}

/* The notch needs room on the right; the other shapes do not. */
.swpf-badge-shape-rectangle .swpf-product-badge span,
.swpf-badge-shape-pill .swpf-product-badge span,
.swpf-badge-shape-circle .swpf-product-badge span {
  padding-right: var(--swpf-badge-padding-right, var(--swpf-badge-padding-left, 10px));
}

/* Cart button width */
/*
 * A class rather than a var: the button is laid out inline, so a width alone
 * would not take, and 'full' is not a length the browser could use anyway.
 */
/*
 * The wrapper has to span the row before the button can fill it. Style 6 puts
 * the button in a column flex footer that centres (or left/right aligns) its
 * children, which shrinks the wrapper to the button's own content - so 100%
 * of it was no wider than before. Stretching the wrapper across its flex row
 * fixes that; in the styles where it already spans, this changes nothing.
 */
.swpf-cart-full .swpf-product-cart-button {
  align-self: stretch;
}

.swpf-cart-full .swpf-product-cart-button a.swpf-add-to-cart {
  /* The button is already laid out inline-flex by the rule above, which wins
     on specificity, so only the width and the centring are needed here. */
  width: 100%;
  justify-content: center;
}

/* Product image border */
.swpf-general-layout-product-img {
  border-style: var(--swpf-product-image-border-type, none);
  border-top-width: var(--swpf-product-image-border-top, 0);
  border-right-width: var(--swpf-product-image-border-right, 0);
  border-bottom-width: var(--swpf-product-image-border-bottom, 0);
  border-left-width: var(--swpf-product-image-border-left, 0);
  border-color: var(--swpf-product-image-border-color, transparent);
}

/* Per element alignment. Blank inherits the card's own alignment. */
.swpf-product .swpf-product-category { text-align: var(--swpf-category-align, inherit); }
.swpf-product .swpf-product-title { text-align: var(--swpf-title-align, inherit); }
.swpf-product .swpf-product-rating { text-align: var(--swpf-rating-align, inherit); }
.swpf-product .swpf-product-price { text-align: var(--swpf-price-align, inherit); }
