IntersectionObserver: блок «увидели» без scroll-спама
threshold и rootMargin для баннеров.
Observer с `threshold: 0.5` и `rootMargin: "0px 0px -20% 0px"` фиксирует, что промо-блок реально попал в зону внимания — точнее, чем событие на mount.
Отключайте observer после первого срабатывания (`unobserve`), чтобы не держать callback на сотнях карточек.
- Intersection Observer API — MDN — API.
- Intersection Observer — W3C — Спецификация.
CLS
Не меняйте layout в callback без `requestAnimationFrame` — иначе сдвинете соседние блоки в момент измерения.