Files
Creeer-Web/components/sections/ParaQuien.tsx
T
erikgh ca949f35c2 feat(para-quien): la bifurcación dibujada junto al split sí/no
La ruta del 'no' se revela por opacidad (no por pathLength): el stroke
dasharray '1 8' sobrevive y el camino queda realmente punteado, en lugar
de que framer-motion lo pise con el dasharray que usa para dibujar el
trazo. El test afina la aserción al valor '1 8' para no contar la
inyección de pathLength en las dos rutas sólidas.
2026-07-31 11:39:12 -06:00

54 lines
3.2 KiB
TypeScript

'use client';
import { motion } from 'framer-motion';
import { Container } from '@/components/primitives/Container';
import { IlustracionBifurcacion } from '@/components/primitives/IlustracionBifurcacion';
import { paraQuien } from '@/lib/content';
import { fadeInUp, staggerContainer, viewportOnce, usePrefersReducedMotion, motionProps } from '@/lib/motion';
export function ParaQuien() {
const reduced = usePrefersReducedMotion();
return (
<section className="bg-white relative overflow-hidden">
<Container className="relative pt-24 md:pt-32 pb-12 md:pb-16 md:flex md:items-center md:justify-between md:gap-12">
<motion.h2 variants={fadeInUp} initial="hidden" whileInView="visible" viewport={viewportOnce} {...motionProps(reduced)}
className="font-sans font-black text-4xl md:text-6xl text-azul-profundo leading-[0.95] max-w-3xl tracking-tight">{paraQuien.title}</motion.h2>
<motion.div variants={fadeInUp} initial="hidden" whileInView="visible" viewport={viewportOnce} {...motionProps(reduced)}
className="mt-8 md:mt-0 shrink-0">
<IlustracionBifurcacion className="w-56 md:w-72 h-auto mx-auto" />
</motion.div>
</Container>
{/* Pantalla partida: luz contra oscuridad, para dramatizar la bifurcación
"sí es para ti / no es para ti" — sale del ancho del Container a
propósito, a todo lo ancho de la ventana. */}
<motion.div variants={staggerContainer} initial="hidden" whileInView="visible" viewport={viewportOnce} {...motionProps(reduced)}
className="grid md:grid-cols-2">
<motion.div variants={fadeInUp} className="bg-white px-6 md:px-16 py-16 md:py-20 border-t-4 border-dorado">
<p className="text-xs tracking-[0.3em] uppercase font-black text-dorado">Sí</p>
<p className="mt-3 text-2xl font-sans font-bold text-azul-profundo max-w-sm">{paraQuien.lead}</p>
<ul className="mt-8 space-y-4">
{paraQuien.criteria.map((c) => (
<li key={c} className="flex items-start gap-3">
<span aria-hidden="true" className="grid place-items-center w-7 h-7 rounded-full bg-dorado text-azul-profundo font-black text-sm shrink-0">✓</span>
<span className="text-azul-profundo text-lg leading-snug">{c}</span>
</li>
))}
</ul>
</motion.div>
<motion.div variants={fadeInUp} className="bg-azul-profundo text-white px-6 md:px-16 py-16 md:py-20 border-t-4 border-white/10">
<p className="text-xs tracking-[0.3em] uppercase font-black text-white/50">No</p>
<p className="mt-3 text-2xl font-sans font-bold text-white/70 max-w-sm">{paraQuien.leadNo}</p>
<ul className="mt-8 space-y-4">
{paraQuien.criteriaNo.map((c) => (
<li key={c} className="flex items-start gap-3">
<span aria-hidden="true" className="grid place-items-center w-7 h-7 rounded-full border border-white/30 text-white/50 font-black text-sm shrink-0">✕</span>
<span className="text-white/60 text-lg leading-snug">{c}</span>
</li>
))}
</ul>
</motion.div>
</motion.div>
</section>
);
}