feat: ParaQuien section (03) — audience filter

This commit is contained in:
erikgh committed 2026-07-21 10:28:44 -06:00
1 parent d2fe1fcf64
commit e380e9751a
3 files changed
+47

No files matched your search

+2
View File
@@ -1,11 +1,13 @@
import { Hero } from '@/components/sections/Hero'; import { Hero } from '@/components/sections/Hero';
import { FraseAncla } from '@/components/sections/FraseAncla'; import { FraseAncla } from '@/components/sections/FraseAncla';
import { ParaQuien } from '@/components/sections/ParaQuien';
export default function Home() { export default function Home() {
return ( return (
<main> <main>
<Hero variant="editorial" /> <Hero variant="editorial" />
<FraseAncla /> <FraseAncla />
<ParaQuien />
</main> </main>
); );
} }
+29
View File
@@ -0,0 +1,29 @@
'use client';
import { motion } from 'framer-motion';
import { Container } from '@/components/primitives/Container';
import { paraQuien } from '@/lib/content';
import { fadeInUp, staggerContainer, viewportOnce } from '@/lib/motion';
export function ParaQuien() {
return (
<section className="bg-base">
<Container className="py-24 md:py-32">
<motion.div variants={staggerContainer} initial="hidden" whileInView="visible" viewport={viewportOnce} className="max-w-3xl">
<motion.h2 variants={fadeInUp} className="font-serif italic font-bold text-3xl md:text-5xl text-ink leading-tight">
{paraQuien.title}
</motion.h2>
<motion.p variants={fadeInUp} className="mt-6 text-lg text-muted">{paraQuien.lead}</motion.p>
<motion.ul variants={fadeInUp} className="mt-8 space-y-3">
{paraQuien.criteria.map((c) => (
<li key={c} className="flex items-start gap-3">
<span className="text-gold font-bold mt-1" aria-hidden="true">✓</span>
<span className="text-ink text-lg">{c}</span>
</li>
))}
</motion.ul>
</motion.div>
</Container>
</section>
);
}
@@ -0,0 +1,16 @@
import { render, screen } from '@testing-library/react';
import { describe, it, expect } from 'vitest';
import { ParaQuien } from '../ParaQuien';
describe('<ParaQuien />', () => {
it('renders the section title', () => {
render(<ParaQuien />);
expect(screen.getByText(/punto de inflexión/i)).toBeInTheDocument();
});
it('renders all 3 criteria', () => {
render(<ParaQuien />);
expect(screen.getByText(/tienes tracción/i)).toBeInTheDocument();
expect(screen.getByText(/trabajar más ya no rinde/i)).toBeInTheDocument();
expect(screen.getByText(/necesitas claridad/i)).toBeInTheDocument();
});
});