'use client'; import { useState } from 'react'; import { motion } from 'framer-motion'; import { Container } from '@/components/primitives/Container'; import { Antetitulo } from '@/components/primitives/Antetitulo'; import { TarjetaSpotlight } from '@/components/primitives/TarjetaSpotlight'; import { Resplandor } from '@/components/primitives/Resplandor'; import { Icono, type IconoNombre } from '@/components/primitives/Icono'; import { IlustracionConvergencia } from '@/components/primitives/IlustracionConvergencia'; import { disciplinas } from '@/lib/content'; import { fadeInUp, staggerContainer, viewportOnce, usePrefersReducedMotion, motionProps } from '@/lib/motion'; const ICONOS: IconoNombre[] = ['comunicacion', 'digital', 'experiencias']; export function Disciplinas() { const reduced = usePrefersReducedMotion(); // Which discipline the reader is pointing at, so its strand lights up in the // drawing above. A pointer-only enhancement on purpose: it reveals nothing — // all three cards and all three strands are fully there without it — so // nobody loses anything by not having a mouse. const [senalada, setSenalada] = useState(null); return ( // Azul profundo, no blanco: al mover esta sección delante de Proceso // quedaba pegada a Dolores, que también es blanca, y las dos se fundían. // Además rompe el tramo de seis secciones claras seguidas que había entre // FraseAncla y Cierre, y le da a la página un latido oscuro a media altura.
{/* Title and lead on the left, the drawing on the right at the same height. The lead is the sentence this section exists for — Proceso sits after it so it lands first — and it used to be small grey text lost in the gap under the title, with the drawing floating loose below. */}
{/* sobre="oscuro": la sección es azul profundo, así que aquí el dorado del manual se queda tal cual — 6,07:1. */} {disciplinas.eyebrow}

{disciplinas.title}

{/* Two unbreakable halves, the dash closing the first. On a phone the line used to break wherever it fell — before the dash, or before «medios» — and left a stray fragment alone. */} {(() => { const [antes, despues] = disciplinas.lead.split(' — '); if (!despues) return disciplinas.lead; // copy without a dash return ( <> {antes} —{' '} {despues} ); })()}

{disciplinas.items.map((item, i) => ( setSenalada(i)} onPointerLeave={() => setSenalada(null)} // No lift: the cards are not links. What answers the pointer is // the card's own strand lighting up in the drawing above, plus a // gold edge so the reader sees which card that strand belongs to. className="group"> {/* Tarjetas invertidas al pasar la sección a azul: `text-gris-medio` se leía bien sobre navy, pero sobre blanco cae a ~2,3:1 y no pasa contraste. La descripción va en azul rebajado. */}

{item.name}

{item.desc}

))}
); }