feat(identidad): logos SVG oficiales, wordmark trazado y tokens del manual

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>
This commit is contained in:
erikghandClaude Opus 5 committed 2026-07-31 10:44:20 -06:00
1 parent edf921eae7
commit a9758a92f9
15 files changed
+287 -27

No files matched your search

@@ -11,4 +11,22 @@ describe('<CTA />', () => {
render(<CTA href="#contacto" label="x" />);
expect(screen.getByRole('link').getAttribute('href')).toBe('#contacto');
});
it('renders the ghost variant outlined, so it reads as secondary', () => {
render(<CTA href="#mecanismo" label="Ver cómo trabajo" variant="ghost" />);
const classes = screen.getByRole('link').className.split(/\s+/);
expect(classes).toContain('border-azul-profundo');
expect(classes).not.toContain('bg-azul-profundo'); // sólo se rellena en hover
expect(classes).toContain('hover:bg-azul-profundo');
});
it('keeps every variant the same height', () => {
const { container } = render(
<>
<CTA href="#a" label="a" variant="light" />
<CTA href="#b" label="b" variant="ghost" />
</>,
);
const [light, ghost] = Array.from(container.querySelectorAll('a'));
expect(light.className).toContain('border-2');
expect(ghost.className).toContain('border-2');
});
});