feat: add blog pages, components, and update homepage sections
This commit is contained in:
@@ -101,7 +101,6 @@ function StageCard({
|
||||
return (
|
||||
<div
|
||||
ref={cardRef}
|
||||
data-stage-card={index}
|
||||
className={`wwd-card relative group ${isYellow ? 'wwd-card-yellow' : 'wwd-card-white'} ${active ? 'wwd-card-active' : ''}`}
|
||||
onMouseMove={onMouseMove}
|
||||
onMouseEnter={onMouseEnter}
|
||||
@@ -170,46 +169,8 @@ export default function WhatWeDo({ isLoaded = false }: WhatWeDoProps) {
|
||||
}
|
||||
);
|
||||
|
||||
// Cards: modern 3D lift + unblur reveal, smoothly staggered across the row
|
||||
const cards = gsap.utils.toArray<HTMLElement>('.wwd-card');
|
||||
const grid = document.querySelector('.wwd-grid-container');
|
||||
|
||||
if (prefersReducedMotion) {
|
||||
gsap.fromTo(
|
||||
cards,
|
||||
{ opacity: 0 },
|
||||
{
|
||||
opacity: 1,
|
||||
duration: 0.5,
|
||||
stagger: 0.08,
|
||||
scrollTrigger: { trigger: grid, start: 'top 85%', toggleActions: 'play none none reset' },
|
||||
}
|
||||
);
|
||||
} else {
|
||||
gsap.fromTo(
|
||||
cards,
|
||||
{
|
||||
opacity: 0,
|
||||
y: 72,
|
||||
scale: 0.92,
|
||||
rotationX: 14,
|
||||
transformOrigin: '50% 100%',
|
||||
transformPerspective: 900,
|
||||
filter: 'blur(10px)',
|
||||
},
|
||||
{
|
||||
opacity: 1,
|
||||
y: 0,
|
||||
scale: 1,
|
||||
rotationX: 0,
|
||||
filter: 'blur(0px)',
|
||||
duration: 1,
|
||||
ease: 'power3.out',
|
||||
stagger: 0.13,
|
||||
scrollTrigger: { trigger: grid, start: 'top 82%', toggleActions: 'play none none reset' },
|
||||
}
|
||||
);
|
||||
}
|
||||
// The cards have no reveal animation by design — they render in place.
|
||||
// Hover interactions live in StageCard.
|
||||
}, containerRef);
|
||||
|
||||
return () => ctx.revert();
|
||||
@@ -252,7 +213,7 @@ export default function WhatWeDo({ isLoaded = false }: WhatWeDoProps) {
|
||||
</div>
|
||||
|
||||
{/* 4-up grid */}
|
||||
<div className="relative z-10 wwd-grid-container max-w-6xl mx-auto">
|
||||
<div className="relative z-10 max-w-6xl mx-auto">
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 lg:gap-7">
|
||||
{STAGES.map((stage, i) => (
|
||||
<StageCard key={stage.title} stage={stage} index={i} active={active === i} onHover={setActive} />
|
||||
|
||||
Reference in New Issue
Block a user