# Gate anti-slop — antes de entregar

> **Es una compuerta, no una sugerencia.** Se corre antes de mostrarle el sitio al
> cliente. Cada punto se verifica por búsqueda o inspección de código, no por
> impresión.
>
> Un sitio que pasa todo menos un punto **no está terminado**.

---

## Cómo se reporta

Al terminar, entregar la tabla llena. Los hits encontrados y resueltos se
documentan; no se borran en silencio.

| # | Check | Estado | Hits |
|---|---|---|---|
| 1 | Marcadores de posición | ☐ | |
| 2 | Guion largo | ☐ | |
| 3 | Paleta prohibida | ☐ | |
| 4 | Ración de eyebrows | ☐ | |
| 5 | Activos reales y referenciados | ☐ | |
| 6 | Head completo | ☐ | |
| 7 | Alturas de viewport | ☐ | |
| 8 | Movimiento reducido | ☐ | |
| 9 | Integridad de CTA | ☐ | |
| 10 | Revelados seguros a captura | ☐ | |
| 11 | Anti-convergencia | ☐ | |
| 12 | Datos genéricos | ☐ | |
| 13 | UI falsa con divs | ☐ | |
| 14 | Repetición de layout | ☐ | |
| 15 | Móvil declarado | ☐ | |
| 16 | Accesibilidad | ☐ | |

---

## 1. Marcadores de posición

Cero tokens tipo `<nombre de marca>`, `lorem`, `TODO`, `PENDIENTE`, `src=""` vacío.

```bash
grep -rniE 'lorem ipsum|TODO|PENDIENTE|REMOVE_THIS' .
grep -rn 'src=""\|href="#"' .
```

`href="#"` sólo se permite en anclas reales que existen en la página.

## 2. Guion largo

```bash
grep -rn "—\|–" .
```

Debe devolver **cero** sobre texto visible. Comentarios de código exentos.

## 3. Paleta prohibida

Ninguna de las familias prohibidas de `anti-slop.md` §8 aparece en los tokens:

- Beige/crema (`#f5f1ea`, `#f7f5f1`, `#fbf8f1`, `#efeae0`, `#faf7f1`)
- Latón/arcilla/ocre (`#b08947`, `#b6553a`, `#9a2436`, `#bc7c3a`)
- Café espresso como texto (`#1a1714`, `#1a1814`)
- Morado/violeta con glow
- **La familia de paleta del proyecto anterior**

Sólo se anula si el cliente dio esos colores explícitamente, y se justifica en la
lectura de diseño.

## 4. Ración de eyebrows

Contar sólo los que están en posición de eyebrow (etiqueta chica en mayúsculas
directamente encima del titular, misma columna).

```bash
grep -rn "uppercase" . | grep -i "tracking"
```

Debe ser **≤ techo(número de secciones / 3)**.

## 5. Activos reales y referenciados

- Cada archivo en la carpeta de imágenes está referenciado por alguna sección
- El hero usa un activo real (foto del cliente o imagen generada), **no** un
  degradado CSS solo ni un placeholder
- Cero enlaces rotos
- Los íconos vienen de una librería, no dibujados a mano

## 6. Head completo

Favicon (ico/svg + png), apple-touch-icon, `theme-color`, título, meta
descripción, bloque completo de Open Graph y Twitter Card con URLs absolutas.
Un `<head>` vacío o el favicon por defecto reprueba.

## 7. Alturas de viewport

```bash
grep -rn "100vh\|h-screen" .
```

Cero ocurrencias. Usar `dvh` / `min-h-dvh` — `vh` se rompe con la barra del
navegador móvil.

## 8. Movimiento reducido

Cada fuente de animación tiene su guarda:

```bash
grep -rn "prefers-reduced-motion" .
```

Debe existir al menos una regla, y cubrir todas las animaciones presentes.

## 9. Integridad de CTA

- **Una etiqueta por intención en toda la página.** No conviven "Contáctanos" y
  "Escríbenos" para lo mismo.
- Ningún CTA primario pasa de ~3 palabras.
- Un solo color de acento en toda la página.
- Un solo sistema de radio de esquina.

## 10. Revelados seguros a captura

Nada puede quedar en `opacity: 0` esperando un disparador de scroll. Una captura
de pantalla completa debe mostrar **todas** las secciones.

Los videos necesitan `poster` para que una captura no muestre una caja negra.

Estados de hover en opacity 0 sí están bien.

## 11. Anti-convergencia

La tabla de `design-read.md` §5 está llena y este sitio difiere del anterior en
**≥ 4 de 6 ejes**: paleta, tipografía, arquitectura del hero, efecto de firma,
estilo de botones, lenguaje de esquinas.

## 12. Datos genéricos

Cero "Juan Pérez", "Acme", "Lorem", 99.99%, teléfonos tipo 555-1234, avatares de
ícono. Todo dato visible sale de la ficha del cliente o es realista y local.

**Ningún dato del cliente inventado.** Si no estaba en la ficha, se preguntó.

## 13. UI falsa con divs

Cero dashboards, terminales, listas de tareas o capturas de producto construidas
con rectángulos. Foto real, imagen generada, o nada.

## 14. Repetición de layout

- Ninguna familia de layout aparece dos veces
- Máximo 2 secciones seguidas con el patrón imagen+texto alternado
- Ocho secciones = mínimo cuatro familias distintas
- Ninguna retícula con celdas vacías de relleno

## 15. Móvil declarado

Cada layout multi-columna declara su colapso bajo 768px. Probado a 375 px:
navegación funcional, hero legible, CTA ≥ 48px, formularios sin desbordamiento.

## 16. Accesibilidad

- Contraste AA mínimo en todo texto, incluido el que va sobre imágenes
- Jerarquía real de encabezados (un solo H1, sin saltos de nivel)
- `alt` descriptivo en toda imagen con contenido
- Navegación por teclado funcional, foco visible
- Áreas táctiles ≥ 44px

---

## Qué hacer con un hit

1. Arreglarlo
2. Anotarlo en la tabla
3. Volver a correr el check

**No se entrega con hits abiertos.** Si un check no aplica al proyecto, se anota
por qué, no se salta en silencio.
