diff --git a/frontend/src/components/common/StaggerGroup.jsx b/frontend/src/components/common/StaggerGroup.jsx index 57d7497..f590fbc 100644 --- a/frontend/src/components/common/StaggerGroup.jsx +++ b/frontend/src/components/common/StaggerGroup.jsx @@ -3,19 +3,20 @@ import { motion } from 'framer-motion' /** * 자식을 각 motion.div 로 감싸 순차 페이드인. - * 기본값은 프로미스나인 사이트와 동일 (y 30, duration 0.4, 간격 0.1s). + * translateY 대신 scale 을 쓰는 이유: Chrome 이 translateY 애니메이션을 + * 레이아웃 변경(CLS)으로 카운트하는 케이스가 있어서. scale 은 compositor-only 라 CLS 0. * * @param {number} staggerDelay - 자식 간 간격 (초) - * @param {number} yOffset - 시작 y 오프셋 (px) + * @param {number} scaleFrom - 시작 scale (기본 0.97) * @param {number} duration - 각 자식 애니메이션 지속시간 (초) */ export default function StaggerGroup({ children, className, style, - staggerDelay = 0.1, - yOffset = 30, - duration = 0.4, + staggerDelay = 0.08, + scaleFrom = 0.97, + duration = 0.35, }) { const containerVariants = { hidden: {}, @@ -23,10 +24,10 @@ export default function StaggerGroup({ } const itemVariants = { - hidden: { opacity: 0, y: yOffset }, + hidden: { opacity: 0, scale: scaleFrom }, show: { opacity: 1, - y: 0, + scale: 1, transition: { duration }, }, } @@ -42,7 +43,7 @@ export default function StaggerGroup({ {Children.map(children, (child, i) => ( child == null || child === false ? null - : {child} + : {child} ))} ) diff --git a/frontend/src/features/boss-crystal/pc/BossCrystal.jsx b/frontend/src/features/boss-crystal/pc/BossCrystal.jsx index 5e871ae..8485088 100644 --- a/frontend/src/features/boss-crystal/pc/BossCrystal.jsx +++ b/frontend/src/features/boss-crystal/pc/BossCrystal.jsx @@ -73,9 +73,9 @@ export default function BossCrystal() { return ( {isLoading ? (