/* SS Interactive Cards
 * Adapted from pokemon-cards-css by Simon Goellner (@simeydotme)
 * https://github.com/simeydotme/pokemon-cards-css
 * Original work licensed under GPL-3.0.
 */

.ss3d-card {
	--card-aspect: 0.718;
	--card-radius: 4.55% / 3.5%;
	--clip-borders: inset(2.8% 4% round 2.55% / 1.5%);
	--space: 5%;
	--angle: -22deg;

	--pointer-x: 50%;
	--pointer-y: 50%;
	--pointer-from-center: 0;
	--pointer-from-top: 0.5;
	--pointer-from-left: 0.5;
	--card-opacity: 0;
	--rotate-x: 0deg;
	--rotate-y: 0deg;
	--background-x: 50%;
	--background-y: 50%;
	--card-scale: 1.02;

	position: absolute;
	inset: 0;
	display: none;
	align-items: center;
	justify-content: center;
	pointer-events: none;
	z-index: 5;
}

.woocommerce-product-gallery__wrapper.ss3d-stage-active {
	aspect-ratio: 0.82 !important;
}

.woocommerce-product-gallery__wrapper.ss3d-stage-active > .flickity-viewport {
	height: 100% !important;
}

.ss3d-stage-active .woocommerce-product-gallery__image.ss3d-active-slide {
	height: 100% !important;
}

.ss3d-stage-active .ss3d-active-slide > a {
	display: flex !important;
	align-items: center;
	justify-content: center;
	width: 100%;
	height: 100%;
}

.ss3d-stage-active .ss3d-active-slide > a > .wp-post-image {
	width: 100% !important;
	height: 100% !important;
	object-fit: contain;
	object-position: center;
}

.ss3d-stage-active .ss3d-active-slide.ss3d-showing .easyzoom-flyout {
	display: none !important;
}

body.ss3d-modal-open {
	overflow: hidden;
}

.ss3d-modal[hidden] {
	display: none;
}

.ss3d-modal {
	position: fixed;
	inset: 0;
	z-index: 999999;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 24px;
	background: rgba(5, 5, 7, 0.88);
	backdrop-filter: blur(12px);
	-webkit-backdrop-filter: blur(12px);
}

.ss3d-modal__dialog {
	position: relative;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	height: 100%;
}

.ss3d-modal__stage {
	position: relative;
	width: min(88vw, 73.8vh, 680px);
	aspect-ratio: 0.82;
}

.ss3d-modal__stage .ss3d-card {
	display: flex;
}

.ss3d-modal__close {
	position: fixed;
	top: max(16px, env(safe-area-inset-top));
	right: max(16px, env(safe-area-inset-right));
	z-index: 2;
	display: grid;
	place-items: center;
	width: 46px;
	height: 46px;
	min-height: 46px !important;
	max-height: 46px;
	margin: 0 !important;
	padding: 0;
	border: 1px solid rgba(255, 255, 255, 0.55);
	border-radius: 50%;
	background: rgba(0, 0, 0, 0.45);
	color: #fff;
	font: 300 32px/1 sans-serif;
	cursor: pointer;
}

.ss3d-modal__close:hover,
.ss3d-modal__close:focus-visible {
	border-color: #fff;
	background: rgba(255, 255, 255, 0.16);
	outline: none;
}

.ss3d-card:not(.ss3d--hidden) {
	display: flex;
}

.ss3d-card__rotator {
	position: relative;
	width: 76%;
	max-width: min(100%, 480px);
	aspect-ratio: var(--card-aspect);
	border-radius: var(--card-radius);
	perspective: 600px;
	transform-style: preserve-3d;
	pointer-events: auto;
	touch-action: pan-y;
	cursor: pointer;
	transform-origin: center center;
	will-change: transform;
	transform: rotateY(var(--rotate-y)) rotateX(var(--rotate-x)) scale(var(--card-scale));
	box-shadow:
		0 10px 20px -5px rgba(0, 0, 0, 0.45),
		0 2px 15px -5px rgba(0, 0, 0, 0.45);
	transition: box-shadow 0.25s ease;
}

.ss3d-card__rotator:focus-visible {
	outline: 3px solid currentColor;
	outline-offset: 4px;
}

.ss3d-card__flipper {
	position: absolute;
	inset: 0;
	border-radius: var(--card-radius);
	transform-style: preserve-3d;
	transition: transform 0.7s cubic-bezier(0.2, 0.75, 0.25, 1);
}

.ss3d--flipped .ss3d-card__flipper {
	transform: rotateY(180deg);
}

.ss3d-card__face {
	position: absolute;
	inset: 0;
	border-radius: var(--card-radius);
	overflow: hidden;
	transform-style: preserve-3d;
	backface-visibility: hidden;
	-webkit-backface-visibility: hidden;
	transition: opacity 0s linear;
}

.ss3d-card__front {
	transform: rotateY(0deg);
	opacity: 1;
	transition-delay: 0.32s;
}

.ss3d-card__back {
	transform: rotateY(180deg);
	opacity: 0;
	transition-delay: 0.38s;
	background-color: #111;
	background-position: center;
	background-repeat: no-repeat;
	background-size: cover;
}

.ss3d--flipped .ss3d-card__front {
	opacity: 0;
	transition-delay: 0.38s;
}

.ss3d--flipped .ss3d-card__back {
	opacity: 1;
	transition-delay: 0.32s;
}

.ss3d-card__front > img.ss3d-card__img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	display: block;
	border-radius: var(--card-radius);
	background: #111;
	-webkit-user-drag: none;
	user-select: none;
	pointer-events: none;
}

.ss3d-card__front.ss3d-loading > img.ss3d-card__img {
	opacity: 0.4;
}

.card__glare,
.card__shine,
.card__shine:before,
.card__shine:after {
	position: absolute;
	inset: 0;
	border-radius: var(--card-radius);
	pointer-events: none;
	will-change: transform, opacity, background-image, background-size, background-position, background-blend-mode, filter;
}

.card__glare {
	transform: translateZ(1.41px);
	overflow: hidden;
	background-image: radial-gradient(
		farthest-corner circle at var(--pointer-x) var(--pointer-y),
		hsla(0, 0%, 100%, 0.8) 10%,
		hsla(0, 0%, 100%, 0.65) 20%,
		hsla(0, 0%, 0%, 0.5) 90%
	);
	opacity: var(--card-opacity);
	mix-blend-mode: overlay;
}

.card__shine {
	display: none;
	transform: translateZ(1px);
	overflow: hidden;
	z-index: 3;
	background: transparent;
	background-size: cover;
	background-position: center;
	filter: brightness(0.85) contrast(2.75) saturate(0.65);
	mix-blend-mode: color-dodge;
	opacity: var(--card-opacity);
}

.ss3d--holo .ss3d-card__front .card__shine {
	display: block;
	--space: 5%;
	--angle: -22deg;
	--imgsize: 300% 400%;
	clip-path: var(--clip-borders);
	background-image: repeating-linear-gradient(
		var(--angle),
		hsla(283, 49%, 60%, 0.75) calc(var(--space) * 1),
		hsla(2, 74%, 59%, 0.75) calc(var(--space) * 2),
		hsla(53, 67%, 53%, 0.75) calc(var(--space) * 3),
		hsla(93, 56%, 52%, 0.75) calc(var(--space) * 4),
		hsla(176, 38%, 50%, 0.75) calc(var(--space) * 5),
		hsla(228, 100%, 77%, 0.75) calc(var(--space) * 6),
		hsla(283, 49%, 61%, 0.75) calc(var(--space) * 7)
	);
	background-blend-mode: color-dodge;
	background-size: var(--imgsize);
	background-position:
		0% calc(var(--background-y) * 1),
		var(--background-x) var(--background-y);
	filter: brightness(calc((var(--pointer-from-center) * 0.3) + 0.5)) contrast(2.3) saturate(1);
}

.ss3d--holo .ss3d-card__front .card__shine:before {
	content: "";
	background-image: radial-gradient(
		farthest-corner ellipse
		at calc(((var(--pointer-x)) * 0.5) + 25%) calc(((var(--pointer-y)) * 0.5) + 25%),
		hsl(0, 0%, 100%) 5%,
		hsla(300, 100%, 11%, 0.6) 40%,
		hsl(0, 0%, 22%) 120%
	);
	background-position: center center;
	background-size: 400% 500%;
	filter: brightness(calc((var(--pointer-from-center) * 0.2) + 0.4)) contrast(0.85) saturate(1.1);
	mix-blend-mode: hard-light;
}

.ss3d--holo .ss3d-card__front .card__shine:after {
	content: "";
	background-image: radial-gradient(
		farthest-corner circle at var(--pointer-x) var(--pointer-y),
		hsla(0, 0%, 100%, 1) 10%,
		hsla(0, 0%, 100%, 0.6) 35%,
		hsla(180, 11%, 35%, 1) 60%
	);
	mix-blend-mode: soft-light;
}

.ss3d--holo .ss3d-card__front .card__glare {
	background-image: radial-gradient(
		farthest-corner circle at var(--pointer-x) var(--pointer-y),
		hsla(0, 0%, 100%, 1) 10%,
		hsla(0, 0%, 100%, 0.6) 35%,
		hsla(180, 11%, 35%, 1) 60%
	);
	mix-blend-mode: soft-light;
}

.woocommerce-product-gallery__image.ss3d-active-slide.ss3d-showing > a > .wp-post-image {
	opacity: 0;
	transition: opacity 0.25s ease;
}

@media (prefers-reduced-motion: reduce) {
	.ss3d-card__rotator {
		transform: none;
		box-shadow: none;
	}

	.ss3d-card__flipper {
		transition-duration: 0.01ms;
	}
}

@media (max-width: 549px) {
	.ss3d-modal {
		padding: 16px;
	}

	.ss3d-modal__stage {
		width: min(90vw, 72vh);
	}
}
