/* vitaskel.css — мерцающий «скелетон» карточек товара.
   Подключается розеткой vitaskel/head.php из шапки сайта.

   Работает в двух местах, выбранных владельцем:
     1) под фотографией товара, пока картинка летит по сети;
     2) на сетке каталога, пока грузится новая страница списка
        или пока фильтр перерисовывает #dle-content аяксом.
   Каждое место включается отдельно в админке модуля.

   Разметку не подменяем. Класс vsk-live вешается на саму
   настоящую карточку: текст становится прозрачным, картинки и
   значки прячутся, а на реальные блоки ложится мерцающая заливка.
   Геометрия совпадает идеально, обработчики «в корзину» и
   «избранное» не теряются, снятие класса возвращает всё как было.

   Карточки бывают двух видов и селекторы обязаны попадать в оба:
     каталог  .product-layout.vd-card > .product-thumb > .image, h4,
              .product-review, .buttons-row p.vd-stock, .vd-prices,
              .buttons-row > .col-sm-12 > .button-group
     фильтр   .product-layout (без vd-card) — те же .image, h4,
              .buttons-row p, .buttons-row > .col-sm-12 > .button-group,
              но без рейтинга и без .vd-prices (там p.price)
   Поэтому перечень ниже — объединение обоих наборов.

   Приставка html body у каждого правила — не украшение. В
   vitacab-dark.css есть html[data-vcab-theme="dark"]
   .product-thumb .image с !important: вес (0,3,1) против (0,3,0)
   у голого .product-layout.vsk-live .image, и в тёмной теме
   плашка проигрывала бы, оставаясь светлой. html body поднимает
   вес до (0,3,2) и снимает спор.

   Все свои классы с приставкой vsk-: у темы сайта есть
   глобальный .new с поворотом на 45 градусов, чужие короткие
   имена опасны. До 01.08.2026 приставка была vcab-sk- — модуль
   ехал на файле ВитаКабинета и звался его именем. Теперь это
   отдельный плагин со своей папкой, и имя у классов своё.

   Цвета можно поменять в админке модуля: тогда розетка допечатает
   короткий <style> с новыми значениями сразу после этого файла. */

:root {
	--vsk-1: #e8ecf0;   /* основной тон плашки */
	--vsk-2: #f4f7f9;   /* светлый блик, бегущий по плашке */
	--vsk-r: 10px;      /* скругление крупных блоков */
	--vsk-r2: 6px;      /* скругление строчек текста */
	--vsk-t: 1.35s;     /* один проход блика */
}

/* Тёмное оформление сайта ставит ВитаКабинет: атрибут
   data-vcab-theme на <html>. Специфичность html[data-vcab-theme] —
   (0,1,1), у :root — (0,1,0), поэтому тёмные значения перебивают
   светлые без !important. */
html[data-vcab-theme="dark"] {
	--vsk-1: #1b2027;
	--vsk-2: #262d35;
}

/* А это на случай, когда ВитаКабинета на сайте нет или он выключен:
   атрибут тогда никто не ставит, и спросить про оформление можно
   только сам телефон или компьютер. Вес селектора тот же (0,1,1),
   правило стоит ниже — значит выигрывает; но если человек выбрал
   светлую тему руками, :not() не сработает и плашки останутся
   светлыми, как он и просил. */
@media (prefers-color-scheme: dark) {
	html:not([data-vcab-theme="light"]) {
		--vsk-1: #1b2027;
		--vsk-2: #262d35;
	}
}

@keyframes vsk-move {
	from { background-position: 140% 0; }
	to   { background-position: -40% 0; }
}

/* ── 1. Карточка целиком ──────────────────────────────────── */

html body .product-layout.vsk-live {
	pointer-events: none;
	transform: none !important;   /* гасим hover-увеличение темы */
}

/* Текст гасим, а не удаляем: строки сохраняют свою высоту,
   и плашка получается ровно той величины, что и настоящая надпись.

   Гасим двумя способами сразу, и это не перестраховка. Цвет —
   на случай текста, лежащего в блоке голышом, без обёртки. Но
   одним цветом обойтись нельзя: в тёмной теме название товара
   красит html[data-vcab-theme="dark"] … h4 a с !important и
   весом (0,3,2), и надпись проступала поверх плашки белым.
   Поэтому содержимое плашек прячем ещё и по visibility — его
   темы почти никогда не трогают, а место остаётся занятым. */
html body .product-layout.vsk-live,
html body .product-layout.vsk-live .product-thumb,
html body .product-layout.vsk-live .product-thumb * {
	color: transparent !important;
	text-shadow: none !important;
}

html body .product-layout.vsk-live h4 > *,
html body .product-layout.vsk-live .product-review > *,
html body .product-layout.vsk-live .buttons-row p > *,
html body .product-layout.vsk-live .vd-prices > * {
	visibility: hidden !important;
}

/* Кнопки прячем целиком, а не перекрашиваем: у «В корзину» свой
   зелёный градиент, а значок тележки нарисован в ::before фоновой
   картинкой — до неё правилами фона не достать, зато visibility
   гасит и сам элемент, и его псевдоэлементы. Место при этом
   остаётся занятым, и плашка родителя держит прежнюю высоту.
   Тем же способом уходят звёзды рейтинга: они тоже ::before
   на <i>, а сами <i> перечислены здесь. */
html body .product-layout.vsk-live img,
html body .product-layout.vsk-live i,
html body .product-layout.vsk-live svg,
html body .product-layout.vsk-live .vd-badges,
html body .product-layout.vsk-live .button-group.wishlist,
html body .product-layout.vsk-live .image_abs,
html body .product-layout.vsk-live .watch,
html body .product-layout.vsk-live .buttons-row a,
html body .product-layout.vsk-live .buttons-row button,
html body .product-layout.vsk-live .buttons-row input {
	visibility: hidden !important;
}

/* ── 2. Мерцающие плашки внутри карточки ──────────────────── */

html body .product-layout.vsk-live .image,
html body .product-layout.vsk-live h4,
html body .product-layout.vsk-live .product-review,
html body .product-layout.vsk-live .buttons-row p,
html body .product-layout.vsk-live .vd-prices,
html body .product-layout.vsk-live .buttons-row > .col-sm-12 > .button-group,
html body img.vsk-img {
	background-image: linear-gradient(
		100deg,
		var(--vsk-1) 30%,
		var(--vsk-2) 50%,
		var(--vsk-1) 70%
	) !important;
	background-color: var(--vsk-1) !important;
	background-size: 260% 100% !important;
	background-repeat: no-repeat !important;
	background-position: 140% 0;
	border-color: transparent !important;
	box-shadow: none !important;
	animation: vsk-move var(--vsk-t) linear infinite;
	/* Задержку раздаёт скрипт по номеру карточки — блик бежит
	   по сетке волной, а не вспыхивает во всех плашках разом.
	   Волну можно выключить в админке: тогда скрипт задержку не
	   ставит и здесь остаётся 0s. */
	animation-delay: var(--vsk-d, 0s);
}

html body .product-layout.vsk-live .image,
html body img.vsk-img {
	border-radius: var(--vsk-r) !important;
}

html body .product-layout.vsk-live h4,
html body .product-layout.vsk-live .product-review,
html body .product-layout.vsk-live .buttons-row p,
html body .product-layout.vsk-live .vd-prices,
html body .product-layout.vsk-live .buttons-row > .col-sm-12 > .button-group {
	border-radius: var(--vsk-r2) !important;
}

/* Пустой рейтинг или пустая цена схлопнулись бы в ноль высоты —
   в скелетоне это дырка в середине карточки. Задаём низ. */
html body .product-layout.vsk-live .product-review,
html body .product-layout.vsk-live .buttons-row p,
html body .product-layout.vsk-live .vd-prices {
	min-height: 14px;
}

html body .product-layout.vsk-live .buttons-row > .col-sm-12 > .button-group {
	min-height: 34px;
}

/* Вложенная кнопка «Скоро поступит» лежит внутри внешней
   .button-group — второй заливки на том же месте быть не должно. */
html body .product-layout.vsk-live .button-group .button-group {
	background: none !important;
	animation: none !important;
}

/* ── 3. Плашка под ещё не загруженной фотографией ─────────── */

/* Класс вешает скрипт и только тем картинкам, у которых на момент
   запуска не было complete. Коробку держат width/height в теге,
   поэтому вёрстка не прыгает. Без скрипта — обычное поведение. */
html body img.vsk-img {
	color: transparent !important;
}

/* ── 4. Появление свежих карточек после перерисовки ───────── */

@keyframes vsk-in {
	from { opacity: 0; transform: translateY(6px); }
	to   { opacity: 1; transform: none; }
}

/* Скрипт снимает класс сразу после проигрыша, чтобы застывший
   transform не спорил с hover-увеличением темы. */
html body .product-layout.vsk-in {
	animation: vsk-in .22s ease-out;
	animation-delay: var(--vsk-d, 0s);
}

/* ── 5. Уважение к системной настройке «меньше движения» ───── */

/* Человеку, который просил у системы поменьше анимации, бегущий
   блик не показываем: остаётся ровная плашка того же цвета.
   Скелетон при этом никуда не девается и по-прежнему говорит,
   что содержимое грузится. */
@media (prefers-reduced-motion: reduce) {
	html body .product-layout.vsk-live .image,
	html body .product-layout.vsk-live h4,
	html body .product-layout.vsk-live .product-review,
	html body .product-layout.vsk-live .buttons-row p,
	html body .product-layout.vsk-live .vd-prices,
	html body .product-layout.vsk-live .buttons-row > .col-sm-12 > .button-group,
	html body img.vsk-img,
	html body .product-layout.vsk-in {
		animation: none !important;
		background-image: none !important;
	}
}
