diff --git a/openspec/changes/add-advanced-incontent-ads/design.md b/openspec/changes/add-advanced-incontent-ads/design.md
new file mode 100644
index 00000000..f84f4189
--- /dev/null
+++ b/openspec/changes/add-advanced-incontent-ads/design.md
@@ -0,0 +1,471 @@
+# Design: Sistema Avanzado de In-Content Ads
+
+## Context
+
+El sitio analisisdepreciosunitarios.com ha experimentado una reduccion del 50% en ingresos de AdSense. El analisis indica que el sistema actual solo inserta anuncios despues de parrafos, desperdiciando oportunidades de insercion despues de otros elementos estructurales del contenido (encabezados, imagenes, listas, etc.).
+
+### Stakeholders
+- Propietario del sitio (monetizacion)
+- Usuarios (experiencia de lectura)
+- Google AdSense (politicas de densidad)
+
+### Constraints
+- Politicas de AdSense: No mas de 3 anuncios visibles simultaneamente en viewport
+- UX: Mantener legibilidad del contenido
+- Performance: No afectar tiempos de carga (lazy load existente)
+
+## Goals / Non-Goals
+
+### Goals
+- Incrementar ubicaciones potenciales de anuncios de ~8 a ~15-20
+- Proporcionar control granular por tipo de elemento
+- Mantener cumplimiento con politicas de AdSense
+- Mejorar ingresos sin sacrificar UX drasticamente
+
+### Non-Goals
+- No implementar insercion dentro de parrafos (mid-paragraph)
+- No implementar anuncios de video
+- No cambiar el sistema de delay/lazy load existente
+
+---
+
+## Decisions
+
+### Decision 1: Tipos de ubicacion soportados
+
+**Seleccionados:**
+- Despues de parrafos (existente, mejorado)
+- Despues de encabezados H2
+- Despues de encabezados H3
+- Despues de imagenes/figuras
+- Despues de blockquotes
+- Despues de listas (ul/ol completadas)
+- Despues de tablas
+
+**Rationale:** Estos elementos representan pausas naturales en la lectura donde un anuncio es menos intrusivo.
+
+### Decision 2: Sistema de prioridades (CORREGIDO)
+
+```
+Prioridad (valores fijos, no configurables):
+| Tipo | Prioridad | Justificacion |
+|-------------------|-----------|----------------------------------|
+| Despues de H2 | 10 | Ruptura tematica mayor |
+| Despues de parrafos | 8 | Ubicacion tradicional, probada |
+| Despues de H3 | 7 | Ruptura tematica menor |
+| Despues de imagenes | 6 | Pausa visual natural |
+| Despues de listas | 5 | Fin de enumeracion |
+| Despues de blockquotes | 4 | Fin de cita |
+| Despues de tablas | 3 | Fin de datos tabulares |
+```
+
+**Nota:** El orden numerico refleja la prioridad real. H2 > parrafos > H3 > imagenes.
+
+### Decision 3: Modos de densidad
+
+| Modo | Max Ads | Espaciado Min | Ubicaciones Activas por Defecto |
+|------|---------|---------------|--------------------------------|
+| Legacy | (usa config anterior) | (usa config anterior) | Solo parrafos |
+| Conservador | 5 | 5 elementos | H2, parrafos |
+| Balanceado | 8 | 3 elementos | H2, H3, parrafos, imagenes |
+| Agresivo | 15 | 2 elementos | Todas |
+| Personalizado | Configurable | Configurable | Configurable |
+
+### Decision 4: Estrategia de campos legacy
+
+**Problema:** Existen campos en el grupo `behavior` que se solapan con los nuevos:
+
+| Campo Legacy | Campo Nuevo | Estrategia |
+|--------------|-------------|------------|
+| post_content_enabled | N/A | Se mantiene para modo legacy |
+| post_content_max_ads (1-8) | incontent_max_total_ads (1-15) | Deprecacion suave |
+| post_content_min_paragraphs_between | incontent_min_spacing | Deprecacion suave |
+| post_content_random_mode | Probabilidades por tipo | Mapeo: true → 75% |
+| post_content_after_paragraphs | N/A | Solo aplica en modo legacy |
+
+**Solucion elegida:** Deprecacion suave con modo "legacy"
+- Si `incontent_mode == "legacy"`: usar campos del grupo `behavior`
+- Si `incontent_mode != "legacy"`: usar campos de `incontent_advanced`
+- Mostrar banner de migracion en admin
+
+### Decision 5: Enfoque de parsing HTML
+
+**Opcion A: DOMDocument**
+```php
+$dom = new DOMDocument();
+$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));
+```
+- Pros: Parsing robusto, manejo correcto de anidamiento
+- Contras: Puede modificar HTML, mas lento
+
+**Opcion B: Regex multiple (SELECCIONADA)**
+```php
+preg_split('/(<\/(?:p|h[2-3]|figure|ul|ol|table|blockquote)>)/i', $content, -1, PREG_SPLIT_DELIM_CAPTURE)
+```
+- Pros: Rapido, no modifica HTML
+- Contras: No detecta contexto de anidamiento
+
+**Justificacion:** Regex es suficiente para el caso de uso. El contexto de `` dentro de `
Parrafo 1
+Parrafo 2
+Parrafo 3
+``` +- **WHEN** min_spacing es 3 +- **THEN** la distancia entre A y B es 4 elementos +- **AND** ambas ubicaciones pueden tener ads (4 >= 3) + +#### Scenario: Espaciado insuficiente +- **GIVEN** min_spacing es 5 +- **AND** solo hay 3 elementos entre dos ubicaciones candidatas +- **THEN** la segunda ubicacion se elimina de las candidatas +- **AND** se conserva la de mayor prioridad + +--- + +### Requirement: Estrategia de seleccion configurable + +El sistema DEBE permitir elegir como resolver conflictos cuando dos ubicaciones estan muy cerca. + +#### Scenario: Modo position (default) +- **WHEN** `incontent_priority_mode` es "position" +- **AND** hay un H2 (prioridad 10) en posicion 3 y un parrafo (prioridad 8) en posicion 1 +- **AND** min_spacing es 3 +- **THEN** el parrafo en posicion 1 se selecciona primero (por orden DOM) +- **AND** el H2 en posicion 3 se elimina por violar espaciado (distancia 2 < 3) +- **AND** el resultado favorece distribucion uniforme + +#### Scenario: Modo priority +- **WHEN** `incontent_priority_mode` es "priority" +- **AND** hay un H2 (prioridad 10) en posicion 3 y un parrafo (prioridad 8) en posicion 1 +- **AND** min_spacing es 3 +- **THEN** el H2 se selecciona primero (por mayor prioridad) +- **AND** el parrafo se elimina por violar espaciado con el H2 +- **AND** el resultado maximiza ubicaciones de alto valor + +--- + +### Requirement: Probabilidad deterministica por ubicacion + +El sistema DEBE soportar probabilidad configurable que sea consistente durante el dia. + +#### Scenario: Implementacion de probabilidad deterministica +- **GIVEN** un post_id y una fecha +- **WHEN** se calcula si insertar ad en una ubicacion +- **THEN** el seed es `crc32(post_id . 'YYYY-MM-DD')` +- **AND** se usa `mt_srand(seed)` antes de evaluar probabilidades +- **AND** cada ubicacion consume un `mt_rand(1, 100)` en orden de aparicion + +#### Scenario: Valores de probabilidad disponibles +- **WHEN** el usuario configura probabilidad para cualquier tipo +- **THEN** los valores disponibles son: 25, 50, 75, 100 +- **AND** el valor se interpreta como porcentaje + +--- + +## MODIFIED Requirements + +### Requirement: Estrategia de campos legacy + +Los campos existentes del grupo `behavior` relacionados con in-content ads DEBEN coexistir con el nuevo sistema mediante deprecacion suave. + +#### Scenario: Campos legacy a deprecar +- **GIVEN** los siguientes campos existentes: + - `post_content_enabled` (behavior) + - `post_content_max_ads` (behavior) + - `post_content_after_paragraphs` (behavior) + - `post_content_min_paragraphs_between` (behavior) + - `post_content_random_mode` (behavior) + - `post_content_format` (behavior) +- **WHEN** el sistema tiene ambos grupos de campos +- **THEN** el grupo `incontent_advanced` tiene precedencia si `incontent_mode` != "legacy" +- **AND** si `incontent_mode` == "legacy", se usan los campos del grupo `behavior` + +#### Scenario: Migracion automatica en UI +- **WHEN** el usuario visita el panel de AdSense por primera vez despues de la actualizacion +- **AND** tiene configuracion legacy activa (`post_content_enabled` = true) +- **THEN** se muestra un banner informativo sobre el nuevo sistema +- **AND** se ofrece boton "Migrar a nuevo sistema" que copia valores equivalentes + +#### Scenario: Mapeo de campos legacy a nuevos +| Campo Legacy | Campo Nuevo | Logica de Mapeo | +|--------------|-------------|-----------------| +| post_content_max_ads | incontent_max_total_ads | Copia directa (ampliar opciones) | +| post_content_min_paragraphs_between | incontent_min_spacing | Copia directa | +| post_content_random_mode | N/A | Si true, todas las probabilidades = 75% | +| post_content_after_paragraphs | N/A | Se usa para primer ad, resto aleatorio | + +--- + +### Requirement: UI de In-Content Ads reorganizada + +La interfaz de administracion DEBE organizarse en subsecciones claras usando elementos HTML semanticos. + +#### Scenario: Estructura HTML de la seccion +- **WHEN** se renderiza el card de In-Content Ads Avanzado +- **THEN** DEBE seguir esta estructura: + +```html +