'use client'; import { motion } from 'framer-motion'; import { Container } from '@/components/primitives/Container'; import { Antetitulo } from '@/components/primitives/Antetitulo'; import { FondoFoto } from '@/components/primitives/FondoFoto'; import { PatronPuntos } from '@/components/primitives/PatronPuntos'; import { SimboloMarca } from '@/components/primitives/SimboloMarca'; import { TarjetaSpotlight } from '@/components/primitives/TarjetaSpotlight'; import { Icono, type IconoNombre } from '@/components/primitives/Icono'; import { proceso } from '@/lib/content'; import { fadeInUp, viewportOnce, usePrefersReducedMotion, motionProps } from '@/lib/motion'; // The eight stages of the dueña's working lámina for a real client, rebuilt to // its own anatomy: eight blocks laid flat, each with its number in a circle, // its own icon, and a block labelled ENTREGABLES where every line carries its // own mark. Everything identifying that client is stripped out in // lib/content.ts. // // The three phases of deck slide 7 survive as a strip under the lead: the // framework is the dueña's and worth keeping, it just does not dictate the // layout — the lámina runs its eight blocks flat, and grouping them into three // banded sections split one grid into three. // // Stage 08 sits full width at the foot, where the lámina puts One Year Plan, // and goes navy — it is the payoff the other seven point at. const ICONOS: Record = { '01': 'compania', // company analysis + FODA — the company from outside '02': 'inmersion', // internal analysis — dives through the layers '03': 'consumidor', // Consumer Knowledge — the insight inside the person '04': 'estrategia', // brand strategy — the path to the flag '05': 'comunicacion', // communication and branding — the bubbles '06': 'ventas', // marketing and sales — the rising bars '07': 'desafiar', // commercial innovation — the cracked assumption '08': 'plan', // One Year Plan — the checklist }; // One mark per deliverable, the way the lámina gives every line its own rather // than repeating a tick. Keyed by the copy itself, so a Proceso.test guard // checks every deliverable in lib/content.ts has an icon here — otherwise a // reworded line would silently render blank. const ICONOS_ENTREGABLE: Record = { // 01 · Análisis de compañía y FODA 'FODA': 'matriz', 'Diagnóstico ejecutivo': 'diagnostico', 'Prioridades': 'prioridades', 'Quick wins': 'rayo', // 02 · Análisis interno 'Mapa de capacidades': 'mapa', 'Restricciones del negocio': 'restriccion', 'Oportunidades de crecimiento': 'brote', // 03 · Consumer Knowledge 'Segmentación': 'segmentos', 'Buyer persona': 'ficha', 'Customer journey': 'recorrido', 'Necesidades no cubiertas': 'hueco', // 04 · Estrategia de marca 'Posicionamiento': 'diana', 'Arquitectura de marcas': 'arquitectura', 'Manual estratégico': 'libro', // 05 · Comunicación y branding 'Plataforma de comunicación': 'megafono', 'Campaña anual': 'calendario', 'Estrategia de medios': 'ondas', 'Plan de contenido': 'documento', // 06 · Marketing y ventas 'Dashboard CEO': 'medidor', 'Dashboard comercial': 'tablero', 'Comité de crecimiento': 'comite', // 07 · Innovación comercial 'Roadmap de innovación': 'hitos', 'Go to market': 'cohete', 'Prioridades de innovación': 'bombilla', // 08 · One Year Plan 'Roadmap a 12 meses': 'anio', 'Iniciativas prioritarias': 'prioridades', 'Gobernanza del crecimiento': 'escudo', }; export function Proceso() { const reduced = usePrefersReducedMotion(); return (
{/* ── Header ── */} {proceso.eyebrow} {proceso.title} {proceso.lead} {/* ── The three approved phases, as a strip rather than as structure ── */} {proceso.fases.map((fase, i) => (
  • {i > 0 && } {fase}
  • ))}
    {/* ── The eight blocks, flat. An
      , because the sequence is the point: it carries the order for assistive tech, which lets the drawn number stay decorative. ── */} {/* Each card reveals on its own. The list used to be one stagger container with viewportOnce's amount of 0.3 — on a phone the eight stacked cards run ~3000px against an ~850px screen, so 30% of the list is never on screen at once and nothing below the header ever appeared. */}
        {proceso.etapas.map((etapa, i) => { const destacada = 'destacada' in etapa && etapa.destacada; return ( {destacada && ( // In the foot of the card, which the grid's equal-height rows // leave empty — decoration that fills dead space instead of // crowding the deliverables. )} {/* ── Photo band, with the number and the icon riding on it. The duotone is what makes eight photographs by eight different people read as one set: FondoFoto throws away their colour with mix-blend-luminosity and relights them navy-to-gold. Every file here is CC0 and credited by path in `creditosFotos`, which a test enforces. ── */}

        {etapa.name}

        {/* Beside the title, not in the card's foot: pinned to the bottom-right corner it sat on top of the third deliverable once the three ran in a row. Gold needs real alpha on navy — at 25% it reads as a skeleton. */} {destacada && }
        {/* ── ENTREGABLES ── */}
        {/* La 08 va sobre navy y conserva el dorado del manual; las otras siete son tarjetas blancas y necesitan el tono legible. */}

        {proceso.etiquetaEntregables}

          {etapa.entregables.map((entregable) => (
        • {entregable}
        • ))}
        ); })}
    ); }