[Back]
@import "./variables-lazyload";

/*
 * Visual Portfolio Lazyload Images
 *
 * - :first-of-type is used to prevent conflicts with hover image (Pro feature)
 */

// LazyLoad image
img.vp-lazyload,
img.vp-lazyloaded,
img.vp-lazypreload,
img.vp-lazyloading {
	opacity: 0;
	transition: var(--vp-lazyload-transition-duration) opacity;
}

img.vp-lazyloaded {
	opacity: 1;
}

:is(.vp-portfolio__item-img, .vp-portfolio__thumbnail-img) {
	// Extra check for lazy loading class on the inner image
	// to make sure image will be lazy loaded by Visual Portfolio.
	&:has(img:first-of-type:is(.vp-lazyload, .vp-lazyloading, .vp-lazyloaded))::before {
		position: absolute;
		top: 0;
		right: 0;
		bottom: 0;
		left: 0;
		// Fixed possible bug with inaccessible links on images in the Classic style.
		pointer-events: none;
		visibility: visible;
		content: "";
		background-image: var(--vp-lazyload-images__background);
		background-size: var(--vp-lazyload-images__background-size);
		opacity: 1;
		transition: var(--vp-lazyload-transition-duration) var(--vp-lazyload-transition-duration) opacity, var(--vp-lazyload-transition-duration) var(--vp-lazyload-transition-duration) visibility;
	}

	&:has(img:first-of-type.vp-lazyloading)::before {
		animation: vp-lazyload-placeholder var(--vp-lazyload-images__animation-duration) ease-in-out infinite;
	}

	&:has(img:first-of-type.vp-lazyloaded)::before {
		visibility: hidden;
		opacity: 0;
	}
}

@keyframes vp-lazyload-placeholder {
	0% {
		background-position: 200% 0;
	}

	100% {
		background-position: -200% 0;
	}
}