diff --git a/Alta-boletin-Brevo.md b/Alta-boletin-Brevo.md
new file mode 100644
index 0000000..a0c7ba0
--- /dev/null
+++ b/Alta-boletin-Brevo.md
@@ -0,0 +1,56 @@
+# Alta al boletín (Brevo)
+
+Formulario de suscripción al boletín. Embebido como iframe del formulario de Brevo (antes SendinBlue).
+
+## Páginas
+
+| Entorno | Page ID | Slug |
+|---|---|---|
+| Local | 43892 | `alta` |
+| Producción | 43893 | `alta` |
+
+Título de ambas: **"Recibir la carta de novedades"**.
+
+## URL del formulario Brevo
+
+Cuenta Brevo ID `c3555982`. URL completa del iframe:
+
+```
+https://c3555982.sibforms.com/serve/MUIFANWlhl9iWHgEiWy2i3jSLlsBjc5BpOUzbn8JmYAR7P7A9V-3KDE3A8IhRNYE4TNG7iL2ahP-3WQlPmDLNe2zVm3bLd2BKdJF6RuF9rhobQCn4q-ryKV0XMSJLpkaLgT4h-DlCVDpt3BDNggapNhNRIT2AZoHvRpfqN91HGQ3p_38M3VAi7o2eVmDgSH4ARfqAK6bz8tlm6Lw0A==
+```
+
+## Contenido de la página (HTML)
+
+Bloque HTML único con CSS embebido + iframe:
+
+```html
+
+
+
+
+
+
+```
+
+## Detalle CSS importante
+
+El selector del título es **`.wp-block-post-title`** (FSE), NO `.entry-title` (Astra). Esto es porque las páginas usan el template FSE de Twenty Twenty-Five, no el layout clásico de Astra.
+
+Si el título no se centra o aparece muy grande, comprobar que estás apuntando al selector FSE correcto. Ver [Arquitectura WordPress](Arquitectura-WordPress) para entender por qué.
+
+## Entrada en el menú principal
+
+Añadida en `wp_navigation` ID=1 (el nav block FSE).
+
+| Entorno | URL |
+|---|---|
+| Local | `https://farmer.taild3aaf6.ts.net/fea/alta/` |
+| Producción | `http://feadulta.org/alta/` |
diff --git a/Arquitectura-WordPress.md b/Arquitectura-WordPress.md
new file mode 100644
index 0000000..8f569f1
--- /dev/null
+++ b/Arquitectura-WordPress.md
@@ -0,0 +1,67 @@
+# Arquitectura WordPress
+
+## Tema y motor de plantillas
+
+El sitio mezcla **dos motores** de plantillas. Esto es importante porque el tema activo NO controla todo.
+
+| Capa | Quién la controla |
+|---|---|
+| Tema activo | **Astra** (clásico, opciones del Customizer) |
+| Single post (post individual) | **Twenty Twenty-Five FSE** (template en BD, `wp_posts` ID 42359, `post_type=wp_template`) |
+| Portada | Plantilla FSE + shortcodes inyectados desde mu-plugin |
+| EFFA, Brevo, Autores, Evangelios | Páginas con HTML plano + shortcodes |
+
+> **Regla:** para modificar el layout del *single post* hay que editar `wp_posts` ID 42359 o ir a *Apariencia → Editor → Plantillas*. Cambiar el Customizer de Astra ahí no tiene efecto.
+
+Ver [CSS y bugs del tema Astra](CSS-y-bugs-Astra) para los problemas conocidos del tema.
+
+## Plugins activos
+
+| Plugin | Función |
+|---|---|
+| **FG Joomla to WordPress Premium + K2** | Importador de la migración. Sigue activo porque maneja redirects 301 K2 (regex automática) y conserva la BD `wp_fg_redirect` con 17.853 entradas |
+| **Yoast SEO** | SEO básico, sitemaps |
+| **Advanced Custom Fields (ACF)** | Campos personalizados (poco uso por ahora) |
+| **Filebird** | Organización en carpetas del media library |
+| **Smart Slider 3** | Slider de la portada (n2-ss-slide) |
+| **UpdraftPlus** | Backups |
+| **Polylang** | Multiidioma — ver [Polylang](Polylang-multiidioma) |
+
+## mu-plugins (must-use)
+
+En `wp-content/mu-plugins/`. Trackeados en git.
+
+| Fichero | Qué hace |
+|---|---|
+| `fea-homepage.php` | Shortcodes de portada, EFFA, autores, evangelios, listado de noticias, CSS condicional |
+| `carta-semana-plugin.php` | Redirects de `/carta-de-la-semana/` → `/category/cartasemana/` y al post directo cuando solo hay uno |
+| `fa-custom-css.php.disabled` | Inactivo |
+| `stop-redirects.php` | Cortocircuita redirects en escenarios de debug |
+
+Ver detalles en [Portada y shortcodes](Portada-y-shortcodes), [Carta de la semana](Carta-de-la-semana), [EFFA (Escuela)](EFFA-Escuela), [Autores](Autores).
+
+> **Aviso de fragilidad:** los mu-plugins se han perdido del contenedor local en sesiones pasadas tras `docker recreate` o restore de UpdraftPlus. La versión canónica vive en producción: `/web/wp-content/mu-plugins/`.
+
+## Menús
+
+- El menú visible en el header usa un **navigation block** (`wp_navigation` ID=1) con URLs hardcodeadas (`kind:"custom"`).
+- El menú clásico `mainmenu` está en BD pero **no se renderiza** — editarlo no tiene efecto.
+- El menú multiidioma se inyecta vía JS en `wp_footer` con un mapa PHP construido con `$wpdb` directo (bypasa el filtro de Polylang).
+
+## Estructura de contenido
+
+- **post**: artículos editoriales (la mayoría del contenido, ~24.700 items)
+- **page**: páginas estáticas (autores, alta, Evangelios convertidos a posts ya, etc.)
+- **attachment**: 6.195 medios migrados
+- **wp_navigation**: menús FSE (ID=1 es el principal)
+- **wp_template / wp_template_part**: plantillas y partes FSE (ej. footer central con `[fea_noticia_centro]`)
+
+## Categorías importantes
+
+Ver [Categorías y términos](Categorias-y-terminos) para el listado completo de term_ids relevantes (EFFA, evangelios, lecturas, eucaristía, multimedia, artículos, cartas).
+
+## URLs y permalinks
+
+- Estructura: `/%postname%/`
+- Idiomas como subdirectorios gestionados por Polylang (`/en/`, `/fr/`, `/it/`, `/pt/`)
+- Categorías: `/category//`
diff --git a/Auditoria-migracion.md b/Auditoria-migracion.md
new file mode 100644
index 0000000..b25ad1e
--- /dev/null
+++ b/Auditoria-migracion.md
@@ -0,0 +1,145 @@
+# Auditoría de migración
+
+Estado de la migración Joomla → WordPress en base a la auditoría del **2026-03-04** y deltas posteriores.
+
+## Resumen de contenido
+
+### Origen: Joomla
+
+| Origen | Total | Publicados | En papelera |
+|---|---|---|---|
+| `jos_content` (Joomla nativo) | 102 | 55 | — |
+| `ew4r_k2_items` (K2) | 17.712 | 15.764 | 54 |
+| `jos_categories` | 33 | 33 | — |
+| `ew4r_k2_categories` | 7 | 7 | — |
+| K2 items en borrador | 1.885 | — | — |
+
+> Los artículos de `jos_content` son páginas de estructura de Joomla (demo, categorías), no contenido editorial. Todo el contenido real vivía en K2.
+
+### Destino: WordPress
+
+| Tipo | Total | Publicados | Borrador |
+|---|---|---|---|
+| `wp_posts` (post) | 26.554 (auditoría) → 24.778 (actual tras delta de mayo) | 24.631 | 1.922 |
+| `wp_posts` (attachment) | 6.195 | 6.195 | — |
+| `wp_posts` (page) | 1 → varias (autores, alta, evangelios convertidos, EFFA) | — | — |
+| Categorías | 1.351 | — | — |
+| Tags | 12 | — | — |
+| Usuarios | 1.182 | — | — |
+| Menús importados | 19 → 6 útiles tras limpieza | — | — |
+
+## Cobertura K2 → WP
+
+| Métrica | Valor |
+|---|---|
+| K2 items publicados (no papelera) en Joomla | **15.764** |
+| WP posts con `_fgj2wp_old_k2_id` (migrados de K2) | **17.649** |
+| WP posts con `_fgj2wp_old_id` (migrados de `jos_content`) | **8.904** |
+
+✅ **No hay artículos K2 publicados sin migrar.** Diferencia ~1.885 = K2 que estaban en borrador en Joomla, también importados como drafts en WP (decisión: se mantienen como drafts).
+
+## Distribución por año (comparativa)
+
+| Año | Joomla K2 | WordPress |
+|---|---|---|
+| 2008 | 217 | 217 |
+| 2009 | 254 | 254 |
+| 2010 | 452 | 451 |
+| 2011 | 630 | 613 |
+| 2012 | 923 | 1.730 |
+| 2013 | 986 | 1.645 |
+| 2014 | 931 | 1.696 |
+| 2015 | 920 | 1.641 |
+| 2016 | 830 | 1.442 |
+| 2017 | 739 | 1.288 |
+| 2018 | 729 | 1.284 |
+| 2019 | 1.002 | 1.495 |
+| 2020 | 1.053 | 1.584 |
+| 2021 | 1.065 | 1.594 |
+| 2022 | 1.032 | 1.615 |
+| 2023 | 1.276 | 1.797 |
+| 2024 | 1.348 | 2.410 |
+| 2025 | 1.380 | 1.814 |
+| 2026 | 51 | 61 |
+
+> Los años 2012-2018 muestran más posts en WP que en Joomla K2 → probablemente por la importación de `jos_content` (páginas de estructura). Revisión pendiente de duplicados en ese rango.
+
+## Problemas detectados y estado
+
+### 🔴 Críticos — todos resueltos
+
+| Problema | Estado | Cómo se resolvió |
+|---|---|---|
+| 1.922 posts en borrador | ✅ Decisión 2026-03-04 | Se mantienen como borradores (eran drafts en Joomla) |
+| 508 posts con enlaces internos rotos (`index.php?option=`) | ✅ 2026-03-04 | `scripts/fix_joomla_links.php` — **93.030 links reemplazados**, 42 sin resolver (K2 papelera) |
+| 429 posts con URLs `/es/ayuda/` | ✅ 2026-03-04 | Mismo script |
+
+### 🟡 Importantes
+
+| Problema | Estado | Cómo se resolvió |
+|---|---|---|
+| 100 categorías con nombres numéricos | ✅ 2026-03-04 | Causa: FG importó el campo K2 "Autor" (extra field id=12) como nombre de categoría. `scripts/fix_numeric_categories.php` → 5 renombradas, 95 fusionadas con autores existentes |
+| 333 posts con URLs absolutas a `feadulta.com` | ✅ 2026-03-04 | Son archivos externos (`/anterior/`, `/ediciones/`) — se mantienen |
+| 81 posts publicados con `< 100` chars | ✅ 2026-03-04 | 13 convertidos a borrador, resto válidos |
+| 1 post publicado con contenido vacío | ✅ 2026-03-04 | Revisado |
+
+### 🟢 Menores
+
+| Problema | Estado | Cómo se resolvió |
+|---|---|---|
+| Redirects 301 | ✅ 2026-03-04 | `scripts/generate_k2_redirects.php` — **17.853 entradas** en `wp_fg_redirect`, regex automática del plugin FG K2. Verificado: 301 funcional para `/es/.../item/NNN-alias.html` |
+| Solo 1 página en WP | ✅ Solucionado | Creadas páginas de Autores, EFFA, Alta, Evangelios convertidos a posts |
+| 13 menús técnicos de Joomla (`art1menu`, `comentmenu`, `eucamenu`…) | ✅ 2026-03-04 | Eliminados. Quedan 6 útiles: `mainmenu`, `secciones`, `colaboradores`, `resumeneslibros`, `idioma`, `libros` |
+
+## Medios (attachments)
+
+| Métrica | Valor |
+|---|---|
+| Attachments en WP | 6.195 |
+| Attachments con archivo asociado | 6.195 ✅ |
+| Posts con URLs absolutas a `feadulta.com` | 333 (archivos externos legítimos) |
+| Imágenes con rutas legacy `/images/stories/` | 0 ✅ |
+| Imágenes con rutas legacy `/media/k2/` | 0 ✅ |
+
+## Usuarios
+
+- **1.182 usuarios** migrados
+- Roles verificados (2026-03-04): 1.162 subscribers, 14 authors, 6 administrators ✅
+
+## Delta de mayo 2026 (post-auditoría)
+
+- **169 K2 items nuevos** (id > 17873) → WP IDs **43914–44082**
+- **8 cartas nuevas** (catid 27/40/41, id > 9043) → WP IDs **44083–44090**
+- **58 ítems `ew4r_content`** no-carta → WP IDs **44091–44151**
+- **8 noticias de alcance del gap** (Joomla ids 8977–9034) → WP IDs **44152–44159**
+- **`_carta_id`** asignado a los 169 K2 items nuevos por matching de fecha
+
+Scripts: ver [Scripts de migración](Scripts-de-migracion).
+
+## Pendientes documentados en su día (auditoría 2026-03-04)
+
+- [ ] Verificar scripts de importación sin log: `import_pensamientos.php`, `import_libros_sub.php`, `import_remaining.php`, `bulk_import.php`, `fix_attachments.php`
+- [ ] (Resuelto en marzo) Estructura "Carta semanal → artículos relacionados" → implementado via `_carta_id`
+- [ ] Configurar página de inicio del sitio → ✅ hecho con 5 portadas Polylang
+
+## Plan de acción priorizado (histórico)
+
+| Prioridad | Tarea | Estado |
+|---|---|---|
+| 1 | Arreglar 508 links `index.php?option=` | ✅ |
+| 1 | Arreglar 429 links `/es/ayuda/` | ✅ |
+| 1 | Renombrar 100 categorías numéricas | ✅ |
+| 2 | 1.922 borradores → revisar | ✅ (decisión: mantener) |
+| 2 | Revisar 81 posts cortos | ✅ |
+| 2 | Revisar 333 referencias a `feadulta.com` | ✅ |
+| 3 | Implementar redirects 301 | ✅ |
+| 3 | Verificar scripts de importación sin log | ⏳ pendiente |
+| 3 | Estructura Cartas Semanales | ✅ (`_carta_id`) |
+| 3 | Revisar roles de usuarios | ✅ |
+| 3 | Simplificar menús | ✅ |
+| 4 | Página de inicio | ✅ |
+| 4 | Plugins post-launch (AdSense, TTS, Wordfence) | ⏳ v2 |
+| 4 | Test completo | ⏳ pre-cutover |
+| 4 | Configurar DNS y lanzar | ⏳ pre-cutover |
+
+Ver [Roadmap](Roadmap) y el board de issues para el estado actual.
diff --git a/Autores.md b/Autores.md
new file mode 100644
index 0000000..aee709a
--- /dev/null
+++ b/Autores.md
@@ -0,0 +1,84 @@
+# Autores
+
+Listado de autores del portal, en una página dedicada con dos shortcodes.
+
+## Página "Listado de Autores"
+
+- **ID:** 18636
+- **Slug:** `autores-lista`
+- **Contenido:** HTML plano con dos shortcodes (sin bloques Gutenberg — ver más abajo)
+
+## Shortcodes (en `fea-homepage.php`)
+
+### `[fea_autores_habituales]`
+
+Autores con **≥ 30 artículos en español**, ordenados por número descendente. Muestra conteo entre paréntesis.
+
+Constantes relevantes:
+
+```php
+FEA_AUTORES_EXCLUIR = [1, 890, 1049, 1540] // Fe Adulta x2, Ediciones Feadulta, José Chicharro
+FEA_LANG_ES_TTID = 1404 // term_taxonomy_id del idioma ES en Polylang
+```
+
+Exclusiones extra para "habituales": IDs 948 y 1048 (Inma Calvo, duplicados de usuario). Por eso la llamada interna es:
+
+```php
+fea_autores_query(30, [948, 1048])
+```
+
+### `[fea_autores_completo]`
+
+Todos los autores con al menos un artículo en ES, orden A-Z. Layout 3 columnas (responsive: 2 en tablet, 1 en móvil). Clase wrapper `fea-autores-completo`.
+
+## Helpers
+
+```php
+fea_autores_query($min_count, $extra_exclude)
+fea_autores_html($rows, $show_count, $extra_class)
+```
+
+`fea_autores_query` hace `JOIN` con `wp_term_relationships` filtrando por el `term_taxonomy_id` del idioma ES — así solo cuenta artículos en español.
+
+## Avatares circulares (solución definitiva)
+
+`border-radius: 50%` y `clip-path` aplicados en CSS son **ignorados por Astra**. La única forma que funciona es un wrapper `` con `overflow:hidden` y los estilos inline:
+
+```html
+
+
+
+```
+
+El `overflow:hidden` del span hace el recorte circular real. CSS externo NO puede sobreescribir inline styles porque la cascada lo posiciona después.
+
+## Bullets eliminados
+
+`list-style: none` aplicado en clase CSS es **también ignorado por Astra**. Solución: inline en el `