/**
 * AUVAPER 复刻：进视口时序入场动画
 *
 * 两种模式：
 *  ① 显式：给元素加 class="auv-rv"（内容块可用 extraClass 属性挂）
 *  ② 自动：动态块（wd/products、wd/blog 等）的列表项由服务端渲染，块标记层无法挂 class，
 *     这里按容器结构直接命中 —— CSS 负责初始隐藏，JS 只负责触发（加 .auv-rv-in）。
 *     实测锚点：容器 div.products.wd-products，子项 div.wd-product。
 *
 * 无 JS / 无 IntersectionObserver / prefers-reduced-motion 时元素完全可见（failsafe）。
 * html.auv-rv-ready 由 head 的内联脚本条件添加，并带 4s 看门狗（见 functions.php）。
 *
 * 可覆盖变量：--auv-rv-step（步长，默认 80ms）/ --auv-rv-dur（默认 .8s）/ --auv-rv-shift（默认 25px）
 * 注意：不要把 .auv-rv 加在含 position:fixed / sticky 后代的容器上（transform 会改变包含块）。
 */
html.auv-rv-ready .auv-rv,
html.auv-rv-ready :is(.wd-products, ul.products, .wd-blog-holder) > :is(.wd-product, li.product, article.wd-post) {
	opacity: 0;
	transform: translate3d(0, var(--auv-rv-shift, 25px), 0);
	backface-visibility: hidden;
}

html.auv-rv-ready .auv-rv.auv-rv-in,
html.auv-rv-ready :is(.wd-products, ul.products, .wd-blog-holder) > :is(.wd-product, li.product, article.wd-post).auv-rv-in {
	animation: auv-rv-enter var(--auv-rv-dur, 0.8s) ease forwards;
	animation-delay: calc(var(--auv-rv-i, 0) * var(--auv-rv-step, 80ms));
}

@keyframes auv-rv-enter {
	100% {
		opacity: 1;
		transform: translate3d(0, 0, 0);
	}
}

@media (prefers-reduced-motion: reduce) {
	html.auv-rv-ready .auv-rv,
	html.auv-rv-ready :is(.wd-products, ul.products, .wd-blog-holder) > :is(.wd-product, li.product, article.wd-post) {
		opacity: 1;
		transform: none;
		animation: none;
	}
}

/* 被"跳过"的元素（快速滚动 / End 键 / 锚点跳转，中间状态从未与视口相交）：
   直接显示、不补播动画 —— 否则内容会永久停在 opacity:0。 */
html.auv-rv-ready .auv-rv.auv-rv-skip,
html.auv-rv-ready :is(.wd-products, ul.products, .wd-blog-holder) > :is(.wd-product, li.product, article.wd-post).auv-rv-skip {
	opacity: 1;
	transform: none;
	animation: none;
}
