/* In-place skeleton for AJAX filtering: each product card keeps its exact size and
   position (no layout shift) and is covered by a shimmer block while the request runs.
   Appears only after 150ms, so fast responses never flash. */
.products.zibana-ajax-loading {
	opacity: 1;
	pointer-events: none;
}
.products.zibana-ajax-loading > li.product {
	position: relative;
}
.products.zibana-ajax-loading > li.product::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 5;
	border-radius: var(--zb-radius-card, 16px);
	background: linear-gradient(90deg, var(--zb-black-50,#f0f3eb) 25%, var(--zb-black-100,#daddd5) 50%, var(--zb-black-50,#f0f3eb) 75%) 0 0 / 200% 100%;
	opacity: 0;
	animation: zb-plp-sk-in 0.2s ease 0.15s forwards, zb-plp-sk-shimmer 1.5s linear 0.15s infinite;
}
@keyframes zb-plp-sk-in {
	to { opacity: 1; }
}
@keyframes zb-plp-sk-shimmer {
	from { background-position: 200% 0; }
	to { background-position: -200% 0; }
}
@media (prefers-reduced-motion: reduce) {
	.products.zibana-ajax-loading > li.product::after {
		animation: zb-plp-sk-in 0.01s linear 0.15s forwards;
	}
}
