HeroのCanvasでは、requestAnimationFrame の間隔からFPSを概算し、50FPS未満で描画密度を下げる仕組みにしています。
const dt = now - last;
fps = 0.95 * fps + 0.05 * (1000 / dt);
const density = fps < 50 ? 0.6 : fps < 40 ? 0.45 : 1;
また、prefers-reduced-motion を尊重し、該当環境ではCanvasを停止しCSSアニメーションへフォールバックします。