Revisada la página con Chromium a 1440x900 y 390x844 en nueve alturas de
scroll, y verificado cada cambio contra capturas nuevas.
- El ≡ deja de leerse como icono de menú. lib/simbolo.ts se anunciaba como
single source of truth pero no coincidía con Wordmark.tsx, que traza la
marca con las proporciones medidas del Manual: barra de largo 5.919× su
grosor, hueco de 2×, extremos de píldora. Ahora se derivan de ahí. De
paso, las líneas se meten medio grosor por cada extremo: el remate
redondo alargaba el trazo un grosor entero sobre la barra que debía
reproducir.
- Banda: 12px en escritorio y 7px en móvil vía CSS (14px era el 3,6% de
una pantalla de 390px y partía los párrafos), opacidad al 18%, y muelle
de 90/30 a 210/40 — sobreamortiguado tardaba ~2s en asentar y la punta
se arrastraba a media pantalla. El punto suelto que aparecía centrado
arriba al cargar era el remate redondo pintándose en el origen con
longitud cero: ahora la opacidad sigue al avance.
- Ritmo vertical un 25-30% más apretado en las diez secciones. La página
pasa de 8.061 a 7.457px sin tocar contenido.
- Números 01-06: de marca de agua de 48px al 6% (que chocaba con títulos
y reglas) a índice dorado sentado sobre la regla.
- Hero: los dos CTA al mismo ancho en móvil, el patrón de puntos fuera
del logotipo, y la secuencia visible en todos los tamaños — oculta bajo
lg dejaba el hero del móvil sin ninguna pieza gráfica. La convergencia
de la variante "hero" se cierra más para que se lea como líneas
buscando su eje y no como un garabato tachado.
- Estratega: fuera la retícula de puntos del retrato, que parecía el
recuadro de imagen rota del navegador; la etiqueta del 30+ cabía en
menos de lo que mide "construyendo" y salía en tres líneas.
- El nudo de Dolores, más pequeño y con algo más de contraste.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Un <svg> con viewBox es un elemento reemplazado con proporción intrínseca
(100:1200). Al dimensionarlo con top-0 + bottom-20 y dejar la altura en
auto, el navegador la resolvía desde el ancho — 1152 × 12 = 13.824px — y
esa altura ganaba silenciosamente a `bottom`.
Consecuencias, todas visibles en el navegador y ninguna en los tests:
- 5.840px de blanco vacío scrolleable por debajo del footer.
- scrollYProgress repartido sobre 13.901px en vez de 8.061, así que el
trazo nunca terminaba sobre contenido real.
- la onda estirada 1,8x de más, otra vez casi recta.
Altura explícita con h-[calc(100%-5rem)], y test que lo fija: jsdom no
hace layout, así que el guardián es la clase.
El trazo pasa a completarse a mitad de scroll (FIN 0.85 → 0.5). Con 0.85
la punta se quedaba a media pantalla durante el 42% de la página, que es
justo lo que se leía como "sin terminar".
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sólo comprobaba que hubiera algún svg, así que seguía en verde aunque
SecuenciaClaridad desapareciera del hero: los campos de puntos bastaban.
Ahora exige las líneas de la secuencia (18, y ninguna viene de otra
parte — FondoPuntos dibuja círculos) y que ninguna lleve data-resolucion:
el hero plantea la tensión, resolverla es cosa de FraseAncla.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
SimboloTresLineas se quedó sin consumidores cuando SecuenciaClaridad
ocupó sus dos sitios (hero y FraseAncla). Sólo lo usaba su propio test.
La geometría del ≡ ya vive en lib/simbolo.ts, así que no se pierde nada.
Los cinco comentarios de código que quedaban en español pasan a inglés,
como pide CLAUDE.md. Los créditos de foto se quedan en español: son
atribución, y el footer que los recoge está en español.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
El grosor nunca se decidió: la primera versión ocupaba toda la columna,
así que el viewBox se estiraba por 11.5 y un strokeWidth de 1.5 se
pintaba a ~17px reales. Al mudar el hilo a una banda de 56px el mismo
valor quedó en 0.84px, y con eso dejó de leerse.
- Grosor fijado en 14px reales con non-scaling-stroke, ya no heredado
del escalado del viewBox.
- Banda de vuelta a toda la columna: ±184px de recorrido lateral.
- Cuatro ondulaciones largas en vez de una sola (que se aplanaba) o
diez cortas (que se leían inquietas).
- El trazo termina al 85% del scroll: colgado del scroll de página sólo
llegaba al 100% pasado el footer, así que el final no se veía nunca.
- Remata en el ≡ del wordmark, con la geometría de lib/simbolo.ts. Es
lo que pedía el spec y era lo que faltaba.
Test nuevo que exige stroke-width >= 10: el grosor ya se había perdido
dos veces por accidente.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
El nudo vivía arriba a la derecha, donde el hilo conductor no lo tocaba.
Centrado, el hilo lo atraviesa: el dolor cosido por lo mismo que lo va a
desatar, y el remate "se resuelve con una estrategia clara" queda justo
debajo.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
El nudo, la bifurcación y la convergencia usaban 2.5 y 3.5 sueltos, así que
las tres se veían de pesos distintos puestas una al lado de otra.
Un test de contrato por ilustración exige ahora que todo trazo pertenezca a
{1.5, 2, 3}, de modo que la escala no se pueda romper en silencio más
adelante. SecuenciaClaridad queda fuera a propósito: resuelve en las barras
reales del ≡ y su grosor lo manda LINEAS_SIMBOLO.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ComoEmpezar deja de rotar pasos: las tres anotaciones se leen de una, sin
botones ni opacidad. Mecanismo conserva su autoplay pero distingue el paso
activo por borde y elevación, no apagando los demás. Las dos fotos
(fondo del Mecanismo y panel del ComoEmpezar) reciben un parallax suave
ligado al scroll de página.
El test de autoplay que Comompezar tenía se retira: afirmaba el
comportamiento que este cambio borra, y choca con el test nuevo que pide
cero botones.
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.
El hilo pintaba encima del texto en las secciones sin position:relative
(Dolores, Disciplinas, Estratega, ComoEmpezar) y detrás del texto en las
que sí la tienen, por el orden de pintado del navegador. Se mueve a la
banda vacía a la izquierda de la columna max-w-content (oculto bajo 2xl,
donde no hay margen seguro) y gana un z-index explícito por debajo del
header.
Cada línea resuelta tomaba el grosor de LINEAS_SIMBOLO[0] sin importar a
qué barra pertenecía; funcionaba por coincidencia porque las tres barras
del manual comparten height: 8. Se indexa ahora por DISPERSAS[i].barra, y
se agrega una prueba de regresión que fija el grosor de cada línea al de
su propia barra (derivado de LINEAS_SIMBOLO, no hardcodeado).
El scan previo a la ejecución encontró que el plan mandaba repetir el
bloque del IntersectionObserver en las cuatro ilustraciones nuevas, sobre
las dos copias que ya existen. Se añade la Task 1b, que lo extrae a un
hook y migra las dos existentes.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Cada tarea trae test primero, código completo y commit propio.
En el self-review salieron tres cosas que se corrigieron en el plan: el
spread de las líneas dispersas mandaba `barra` al DOM como atributo SVG
inválido; el paso de parallax decía "mismo tratamiento para Mecanismo" en
vez de mostrar el código (FondoFoto no acepta style, necesita envoltorio);
y el compactado del header que pide el spec no tenía tarea asignada.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diseño aprobado para la siguiente tanda visual, en respuesta al mensaje de
la dueña del 30/jul ("sólo le falta algo de gráfico y movimiento").
Concepto rector: una línea dorada continua atraviesa la landing y se
dibuja con el scroll, cosiendo las secciones y resolviendo en el ≡ del
wordmark. Aporta ilustración, movimiento y continuidad de una sola vez.
Además, rebalancea el movimiento existente en vez de sumarle encima: sale
el carrusel del hero (duplica la sección Dolores), sale el autoplay
repetido de Cómo empezar, y sale el opacity-40 que hoy deja ilegibles dos
de cada tres pasos.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Dos secciones nuevas tomadas del deck de la dueña, verbatim y sin
reescribir: los 6 puntos de inflexión y los 4 dolores en primera persona.
El resto de las secciones incorpora la capa gráfica: fondos de puntos,
duotono sobre foto en Mecanismo y Cómo empezar, pantalla partida sí/no en
Para quién, y pasos conectados con línea de progreso.
Las fotos son CC BY-SA 4.0 y llevan crédito en el footer, como exige la
licencia al haberlas modificado.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diez primitivas que dan a la landing el "gráfico y movimiento" que pidió
la dueña, todas con guarda de prefers-reduced-motion:
- FondoPuntos / PatronPuntos — el patrón de puntos del manual
- TarjetaSpotlight, TextoDesenfoque, ContadorNumero — realce y reveal
- Carrusel — deslizable, con contador, autoplay pausable
- Icono, SimboloTresLineas, IlustracionInflexion — línea, sin relleno
- FondoFoto — duotono azul/dorado sobre foto
useAutoStep en lib/motion.ts comparte la forma del autoplay del carrusel
para indicadores de paso que no son carrusel.
IlustracionInflexion documenta un detalle que muerde: motion.path aplica
su propio andamiaje de dasharray aunque no reciba initial/animate, así
que la rama de reduced motion renderiza <path> planos en vez de intentar
neutralizar los animados.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
El wordmark deja de depender del glifo tipográfico ≡ y pasa a un trazado
SVG propio (SimboloTresLineas), que es lo que permite cumplir la
instrucción de la dueña: que se lea como E, no como tres líneas sueltas.
Incluye las tres versiones del logotipo (principal, negativa, secundaria)
y alinea los tokens de color con el Manual de Identidad Visual v1.0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Incorpora los mensajes verbatim del 28–30/jul (tipografía Open Sans, el ≡
que debe leerse como E, "claridad estratégica" como oferta, estructura de
en-ti.com) y el material del deck "Rumbo Estratégico": los 6 puntos de
inflexión y los 4 dolores en primera persona.
Corrige Azul Profundo a #0A1D3D según el manual, y añade CLAUDE.md.
Quedan abiertas dos preguntas para la dueña, anotadas en el doc: si el ≡
lleva espina vertical, y si la "Generación Fundadora" puede vivir fuera
del hero.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
settings.local.json es configuración por máquina; .claude/skills/ sí se
comparte porque react-doctor es parte del flujo del proyecto.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Aptos descartada para web: su EULA (Microsoft) prohíbe distribuirla o
servirla públicamente. Open Sans (OFL) es la open-source más cercana —
comparte diseñador con Aptos (Steve Matteson). Cargada vía next/font/google,
autoalojada en el build estático (cero requests externos en runtime).
- app/layout.tsx: Inter → Open_Sans (pesos 400/600/700/800 + itálicas)
- tailwind.config.ts: sans → var(--font-open-sans); token 'narrow' eliminado
- app/globals.css: body font-family
- docs (AGENTS, dueña-directrices, spec): Open Sans documentado,
decisión registrada (28/jul/2026)
Typecheck, lint, 27/27 tests y build verdes.
Reemplaza el favicon viejo (e. en navy+gold-bright, Georgia) por el símbolo
≡ (tres líneas) en Dorado #C4942E sobre Azul Profundo #0A1D5D, según la
versión 'Ícono' del Manual de Identidad Visual v1.0.
Migra todo el sitio a la marca oficial aprobada por la dueña:
- Logotipo cre≡er (el símbolo ≡ reemplaza la 'e' central, en dorado)
- Paleta: Azul Profundo #0A1D5D + Dorado Estratégico #C4942E + Blanco + neutros
- Tipografía: Aptos (Inter como fallback web), fin del sistema híbrido Georgia/Inter
- Tagline 'CLARIDAD · DIRECCIÓN · CRECIMIENTO' + eslogan 'Estrategia que transforma.'
Componentes, tokens de Tailwind, lib/content.ts, docs (dueña-directrices + spec)
y tests actualizados. Typecheck, lint, 27/27 tests y build estática verdes.
Basado en docs/branding.jpeg (Manual v1.0, mayo 2026).
- Hero: subtle ink grid texture (radial-masked) + gold glow blob
- Hero kicker: small gold dot before the eyebrow
- Header: desktop anchor nav (Método/Disciplinas/La estratega) with
scroll-elevation shadow; mobile keeps wordmark + CTA only
- Sections gain ids + scroll-mt-24 as anchor targets
- CTA: subtle hover lift, gated with motion-reduce
Concepts studied from ~/dev/BenditaRed (grid+glow hero background,
kicker-with-dot, scrolled navbar state, pill hover lift). Animated
stats were skipped — no real metrics from the owner to show.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replaces the default Next favicon.ico and the solid-navy og-image
placeholder. All generated from the brand tokens (ink bg, gold-bright
accents, Georgia italic):
- app/icon.svg — vector favicon "e." for modern browsers
- app/favicon.ico — 48/32/16 raster fallback
- app/apple-icon.png — 180x180 apple-touch-icon (auto-linked by Next)
- public/og-image.png — 1200x630 wordmark + tagline for link previews
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Disciplinas cards and Mecanismo/ComoEmpezar steps get a subtle lift +
border intensify on hover; the CTA arrow slides right. All gated with
motion-reduce so prefers-reduced-motion users see no movement.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
'Estrategia ejecutable' appeared verbatim as step 03 in both Mecanismo
(her method) and ComoEmpezar (client on-ramp), reading repetitive on
scroll. Mecanismo keeps the term; the on-ramp now names the client
outcome.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Last leftover npm reference after the pnpm migration (3f0a15e);
README.md was already migrated. Also states pnpm as the required
package manager.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Expands app/layout.tsx metadata (openGraph, twitter, canonical),
adds ProfessionalService JSON-LD to app/page.tsx, focus-visible
styles in globals.css, robots.txt/sitemap.xml, and a placeholder
og-image.png (navy background, no wordmark text — needs a real
design asset before launch).
Also adds .eslintrc.json (next/core-web-vitals) so next lint runs
non-interactively, and decouples ESLint from next build via
next.config.mjs (eslint.ignoreDuringBuilds) so a pre-existing,
out-of-scope lint issue in Cierre.tsx doesn't block the static
export.