Why it matters
React Bits Magnet and SpotlightCard call setPosition on every pointer event (and Magnet attaches one window listener per instance), so the component and its children re-render up to 120×/s and INP degrades with the number of instances on the page.
How to fix it
Write per-frame values to a ref'd element's style or a CSS custom property (el.style.setProperty('--x', …)) or a MotionValue .set(); attach listeners to the element, gate with (hover: hover) and (pointer: fine) and skip under reduced motion.
Example
const onPointerMove = (e: React.PointerEvent<HTMLDivElement>) => {
const r = e.currentTarget.getBoundingClientRect();
e.currentTarget.style.setProperty('--x', `${e.clientX - r.left}px`);
e.currentTarget.style.setProperty('--y', `${e.clientY - r.top}px`);
};More lint rules
void lint reports 67 rules in this category. Static source checks with no browser: Tailwind v4 silent failures, Next.js 16 API traps, React render-body bugs, accessibility markup, SEO files and motion hygiene.
animate-undefined`animate-*` class with no matching `--animate-*` theme variable or `@keyframes`random-in-render`Math.random()` / `Date.now()` / `new Date()` evaluated in a component render bodyduplicate-children-not-hiddenChildren repeated for a marquee/loop without `aria-hidden` or `inert` on the copiesconditional-hookHook called inside a JSX expression, `&&`, ternary or callbacksvg-global-idHardcoded `id` on an SVG `<filter>`, gradient, `<clipPath>` or `<mask>` inside a reusable componentallocation-per-frame`new Intl.NumberFormat` / `Intl.NumberFormat(` / `new Color(` inside an animation-frame callbackhardcoded-device-pixel-ratioCanvas/WebGL renders with a literal `devicePixelRatio: 2` (or `width * 2`)button-missing-type`<button>` (or `as="button"` default) without an explicit `type`