docs: spec de la nueva animación del hero — «Las Tres Líneas»
This commit is contained in:
1 parent
50726dad91
commit
4e2932292c
1 file changed
+97
@@ -0,0 +1,97 @@
|
||||
# Las Tres Líneas — nueva animación del hero
|
||||
|
||||
**Fecha:** 2026-08-21
|
||||
**Estado:** aprobado por Erik (brainstorming con visual companion)
|
||||
**Reemplaza a:** el "Astrolabio de Claridad" actual de `components/primitives/EscenaClaridad.tsx`
|
||||
|
||||
## Contexto
|
||||
|
||||
La animación Three.js actual del hero (anillos-giroscopio que se alinean en túnel + barras
|
||||
doradas que se proyectan) fue rechazada por la dirección: "no tiene sentido, no existe
|
||||
coherencia, y está mal hecha". En brainstorming con visual companion se compararon tres
|
||||
conceptos animados que narraban literalmente CLARIDAD → DIRECCIÓN → CRECIMIENTO.
|
||||
**Erik eligió el concepto A · «Las Tres Líneas»** (clic registrado en el companion),
|
||||
con comportamiento final **"una vez + reposo vivo"**.
|
||||
|
||||
Decisión previa que se mantiene: la animación sigue siendo Three.js
|
||||
(`three` + `@react-three/fiber` ya en `package.json`).
|
||||
|
||||
## Concepto
|
||||
|
||||
El símbolo de la marca cuenta la historia de los tres pilares. Tres barras doradas
|
||||
—las tres líneas del `≡` de `cre≡er`— pasan de caos a ascenso:
|
||||
|
||||
| Fase | Tiempo | Qué pasa |
|
||||
|---|---|---|
|
||||
| Caos | 0–3 s | Las barras flotan enredadas: rotación libre, deriva sinusoidal desacoplada por línea, sin rumbo. |
|
||||
| CLARIDAD | 3–5.2 s | Se asientan y forman el **≡**: quietas, niveladas, exactas. |
|
||||
| DIRECCIÓN | 5.2–7.2 s | En conjunto se inclinan ~9° y se escalonan: dejan de ser símbolo y se vuelven peldaños. |
|
||||
| CRECIMIENTO | 7.2–9.6 s | Cada línea se prolonga hacia adelante (la superior más); brillo dorado (emissive) creciente. |
|
||||
| Reposo vivo | ∞ | Pose final quieta + deriva mínima de cámara y pulso de brillo casi imperceptible. Viva, sin distraer del CTA. |
|
||||
|
||||
Paleta y materiales idénticos a los validados en el preview: dorado `#C4942E`
|
||||
metálico (metalness 0.8, roughness 0.25, emissive dorado en crecimiento),
|
||||
sobre fondo transparente (el blanco del hero).
|
||||
|
||||
## Alcance
|
||||
|
||||
**Solo se reescribe el interior de `EscenaClaridad.tsx`.** Misma ruta, misma API
|
||||
(`className`), mismo componente exportado.
|
||||
|
||||
Queda intacto (cero cambios):
|
||||
|
||||
- `ClaridadHero.tsx` — dynamic import con `ssr: false`, carga lazy por
|
||||
IntersectionObserver (rootMargin 300px), hueco reservado en `Hero.tsx`.
|
||||
- `Hero.tsx` — el contenedor `h-64 lg:h-[28rem]` que reserva el espacio.
|
||||
- Las 4 pruebas de `components/primitives/__tests__/EscenaClaridad.test.tsx`
|
||||
(son de envoltorio: aria-hidden, tamaño por el caller, frameloop
|
||||
always/demand). Siguen pasando sin edits.
|
||||
|
||||
Dentro de `EscenaClaridad.tsx`:
|
||||
|
||||
- **Se eliminan:** `Anillos` (giroscopio), el túnel, la proyección del ≡,
|
||||
`Suelo` + `texturaSombra` (textura canvas) y la `pointLight` azul claro de
|
||||
relleno. **Se conservan** ambient + directional + pointLight dorada (las
|
||||
tres luces del preview aprobado).
|
||||
- **Queda:** un único componente `TresLineas` con las 3 barras
|
||||
(`BoxGeometry` trasladada para que el origen quede en un extremo y así
|
||||
"crecer" al escalar en X), cámara frontal con deriva sutil, `SiHayWebGL`,
|
||||
IntersectionObserver para pausar fuera de vista.
|
||||
- Escena final: 3 meshes + 3 luces. De ~10 objetos a 6.
|
||||
|
||||
## Comportamiento
|
||||
|
||||
- **Relato una vez** (~9.6 s de coreografía) **+ reposo vivo**: tras la fase
|
||||
de crecimiento, la escena queda en pose de escalera con (a) deriva mínima
|
||||
de cámara (sin(t·0.25)·~0.5 en X, la misma del preview) y (b) pulso de
|
||||
emissive ~0.06–0.12 lento. Nada de saltos ni reinicios.
|
||||
- `prefers-reduced-motion`: se monta directo en la pose final de la escalera,
|
||||
estático (`estatico` → `frameloop: demand`). Mismo patrón que hoy.
|
||||
- Fuera de vista: `frameloop: demand` vía IntersectionObserver existente.
|
||||
- El tiempo no avanza cuando `estatico` (patrón `time.current` actual), pero
|
||||
el reposo vivo sigue corriendo para lectores sin reduced-motion mientras
|
||||
la escena esté en vista.
|
||||
|
||||
## Parámetros de la coreografía (del preview aprobado)
|
||||
|
||||
- easeOut cúbico (`1-(1-t)^3`) y `tramo(t, inicio, duración)` como hoy.
|
||||
- Caos: posiciones `sin/cos(t·f_i + φ_i)` con frecuencias desacopladas por
|
||||
línea; rotación euler libre por línea.
|
||||
- ≡: posiciones y = 0.7 / 0 / −0.7, x = 0, escala base 1; quaternions identidad.
|
||||
- Dirección: inclinación grupal −0.16 rad (~9°); escalonado x = i·1.15−1.15,
|
||||
y = 0.35 + i·0.8.
|
||||
- Crecimiento: escala X = 1 + 0.1·direccion + (0.35 + i·0.35)·crecimiento;
|
||||
emissiveIntensity = crecimiento·(0.1 + i·0.06), en reposo pulsa ±0.03 lento.
|
||||
- Cámara: (0, 0.9, 8) mirando a (0, 0.7, 0); X += sin(t·0.25)·0.5.
|
||||
|
||||
## Pruebas
|
||||
|
||||
- Las 4 existentes siguen igual (envoltorio). No se agregan pruebas nuevas:
|
||||
la coreografía es visual y el wrapper ya está blindado.
|
||||
- Único cambio textual: actualizar el comentario de concepto del archivo
|
||||
("El Astrolabio de Claridad" → "Las Tres Líneas").
|
||||
|
||||
## Fuera de alcance
|
||||
|
||||
- Touch/click interactivity, scroll-driven states, variante por `variant`
|
||||
del hero (hormozi/editorial), cambios de copy, cambios en ClaridadHero.
|
||||
Reference in new issue
Block a user