Task Description
To improve perceived performance and reduce layout shift (CLS), replace the current blank state with a CSS-animated shimmer placeholder during the FETCH_SCAN_RESULTS lifecycle.
Context and Background
Create a reusable SkeletonCard component in src/components/shared.
Ensure dimensions match the final rendered ScanResultCard to prevent "jumping" content.
Animation: Linear gradient shift from #f0f0f0 to #e0e0e0 over a 1.5s loop.
Acceptance Criteria
[ ] Skeleton displays immediately upon triggering scan.
[ ] Skeleton is replaced by data-driven components once the Promise resolves.
[ ] No "white flash" visible on 3G throttle testing.
Hints
No response
Task Description
To improve perceived performance and reduce layout shift (CLS), replace the current blank state with a CSS-animated shimmer placeholder during the FETCH_SCAN_RESULTS lifecycle.
Context and Background
Create a reusable SkeletonCard component in src/components/shared.
Ensure dimensions match the final rendered ScanResultCard to prevent "jumping" content.
Animation: Linear gradient shift from #f0f0f0 to #e0e0e0 over a 1.5s loop.
Acceptance Criteria
[ ] Skeleton displays immediately upon triggering scan.
[ ] Skeleton is replaced by data-driven components once the Promise resolves.
[ ] No "white flash" visible on 3G throttle testing.
Hints
No response