#!/usr/bin/env python3
"""Genera Agenda DOCX + HTML Dashboard para Bruna Peru Weekly Review — 29 junio 2026"""

import sys
sys.path.insert(0, '/home/node/.hermes/venv/lib/python3.13/site-packages')

from docx import Document
from docx.shared import Pt, RGBColor, Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH
import datetime, os

FECHA = "29 de junio, 2026"
FECHA_FILE = "2026-06-29"
OUTPUT_DIR = "/home/node/workspace/bruna-peru/outputs"
os.makedirs(OUTPUT_DIR, exist_ok=True)

# ─── Colores ──────────────────────────────────────────────────────────
NAVY   = RGBColor(0x1B, 0x4F, 0x72)
ACCENT = RGBColor(0x2E, 0x86, 0xC1)
RED    = RGBColor(0xC0, 0x39, 0x2B)
ORANGE = RGBColor(0xE6, 0x7E, 0x22)
GREEN  = RGBColor(0x27, 0xAE, 0x60)
PURPLE = RGBColor(0x8E, 0x44, 0xAD)
YELLOW = RGBColor(0xF1, 0xC4, 0x0F)
GRAY   = RGBColor(0x95, 0xA5, 0xA6)
DARK   = RGBColor(0x2C, 0x3E, 0x50)

STATUS_COLORS = {
    "HECHO": GREEN,
    "AVANZADO": YELLOW,
    "NO AVANZADO": RED,
    "VERIFICAR": ORANGE,
    "NUEVO": PURPLE,
}

def add_heading(doc, text, level=1, color=NAVY):
    p = doc.add_paragraph()
    p.paragraph_format.space_before = Pt(12 if level == 1 else 8)
    p.paragraph_format.space_after = Pt(4)
    run = p.add_run(text)
    run.bold = True
    run.font.size = Pt(18 if level == 1 else 13 if level == 2 else 11)
    run.font.color.rgb = color
    return p

def add_status_item(doc, text, status, responsible="", indent_in=0.3):
    p = doc.add_paragraph()
    p.paragraph_format.left_indent = Inches(indent_in)
    p.paragraph_format.space_before = Pt(2)
    p.paragraph_format.space_after = Pt(2)
    badge = p.add_run(f"[{status}] ")
    badge.bold = True
    badge.font.color.rgb = STATUS_COLORS.get(status, DARK)
    badge.font.size = Pt(10)
    main = p.add_run(text)
    main.font.size = Pt(10)
    if responsible:
        rr = p.add_run(f"  \u2192 {responsible}")
        rr.font.color.rgb = ACCENT
        rr.font.size = Pt(9)
    return p

def add_divider(doc):
    p = doc.add_paragraph("\u2500" * 80)
    p.paragraph_format.space_before = Pt(4)
    p.paragraph_format.space_after = Pt(4)
    p.runs[0].font.color.rgb = ACCENT
    p.runs[0].font.size = Pt(7)

def add_bullet(doc, text):
    p = doc.add_paragraph()
    p.paragraph_format.left_indent = Inches(0.4)
    p.paragraph_format.space_before = Pt(2)
    p.paragraph_format.space_after = Pt(2)
    run = p.add_run(f"\u2022 {text}")
    run.font.size = Pt(10)
    return p

# ─── Datos actualizados 29 junio 2026 ─────────────────────────────────────────
pendientes = {
    "Victor Alfaro": {
        "rol": "Gerente General Lima",
        "items": [
            ("Reunion Oscar Rosas (Mineria) — confirmar status post-reunion o reagendar", "VERIFICAR"),
            ("Cold visits Qroma (Baldion) — neopreno, caucho clorado, parafina: reportar avance", "VERIFICAR"),
            ("Prospectos pintura (Anipsa, Perupaint, Soprint, Interpaint) — cold visits: update", "VERIFICAR"),
            ("Plasticos (Tigre, Andinaplast, Nicoll) — cera PE, TiO2: status visitas", "VERIFICAR"),
        ]
    },
    "Jennifer Segura": {
        "rol": "Lider Mercado Peru",
        "items": [
            ("Cotizacion formal Daryza (lista 30+ MPs de Urbina recibida 11 mar) — OVERDUE 16 sem", "NO AVANZADO"),
            ("Seguimiento Aurora Paint — resinas epoxicas VYTA BPA: respuesta recibida?", "VERIFICAR"),
            ("Universal Colors — TiO2 588 y oxidos de hierro (Murillo/Erika): status", "VERIFICAR"),
            ("Profinne — seguimiento materias primas pendientes", "VERIFICAR"),
        ]
    },
    "Andres Bruna": {
        "rol": "Director Nuevos Mercados",
        "items": [
            ("Oral Care — Proyecto pasta dental: coordinar proximos pasos post-reunion 23 jun", "NUEVO"),
            ("Oral Care — tubos, formula, equipos: status completo con equipo tecnico", "VERIFICAR"),
            ("Alimentos — Pursuit, JAVA, Creafoods: acidos y especialidades pipeline", "VERIFICAR"),
            ("Bruna Brain / Pedro Klein — insistir hasta obtener reunion", "VERIFICAR"),
        ]
    },
    "Jorge Bruna": {
        "rol": "Empaques / Oral Care",
        "items": [
            ("Oral Care — coordinar presencia en prueba impresion y armado de tubos (Lurin)", "NUEVO"),
            ("Confirmar con Victor Alfaro asistencia presencial equipo Bruna a pruebas", "NUEVO"),
            ("Romex/Nico — update tapas y liners: status produccion", "VERIFICAR"),
        ]
    },
    "Carlos Artavia": {
        "rol": "Logistica / SPU",
        "items": [
            ("Cafetal K2CO3 — confirmar pago impuestos + liberacion carga con Ileana", "NO AVANZADO"),
            ("CargoFlex: coordinar 6,600 kg restantes + proxima entrega", "VERIFICAR"),
            ("PO Norway — inventario status (OVERDUE 10 sem)", "VERIFICAR"),
        ]
    },
    "Vanessa Garcia": {
        "rol": "BDU / Soporte Comercial",
        "items": [
            ("Org chart actualizado cliente principal pintura + costos reales policloropreno", "VERIFICAR"),
            ("Subida factura al sistema — confirmar con receptora", "VERIFICAR"),
        ]
    },
    "Mildred": {
        "rol": "Admin",
        "items": [
            ("Portal Evis — pagos y facturacion pendientes", "VERIFICAR"),
        ]
    },
    "Lourdes Arley": {
        "rol": "Finanzas",
        "items": [
            ("Confirmacion pago impuestos / fondeos VCB S.A.C.", "VERIFICAR"),
        ]
    },
}

cuentas = [
    ("Grupo Romero — Pintura / Polimeros", "VERIFICAR", [
        ("Lufarol, CaCO3, 12 productos aprobados — status muestras y pipeline", "Jennifer Segura", "P1"),
        ("Org chart actualizado + costos reales policloropreno", "Vanessa Garcia", "P2"),
        ("Rafa Villa, Pedro Clay, Estefania Loza — proximas reuniones?", "Andres Bruna", "P2"),
    ]),
    ("Cafetal (K2CO3 grado oral)", "AVANZADO", [
        ("CargoFlex: coordinar 6,600 kg restantes con cliente", "Carlos Artavia", "P1"),
        ("Confirmar pago impuestos + liberacion de carga (Ileana)", "Carlos Artavia", "P1"),
        ("Seguimiento postentrega — satisfaccion cliente", "Victor Alfaro", "P2"),
    ]),
    ("Romex / Nico", "VERIFICAR", [
        ("Liners y tapas — status produccion y problemas calidad", "Jorge Bruna", "P1"),
        ("Update tecnico: chat liners pendiente confirmar", "Jorge Bruna", "P2"),
    ]),
    ("Daryza", "NO AVANZADO", [
        ("Lista 30+ MPs recibida (11 mar) — cotizacion formal OVERDUE 16 SEMANAS", "Jennifer Segura", "P1"),
        ("MPs prioritarias: Lauril Eter Sulfato 82t, Ac. Sulfonico 58t, NaOH 50% 46t, PEAD 38t", "", "P1"),
        ("Reunion seguimiento con Jose Urbina — agendar urgente", "Jennifer Segura", "P1"),
    ]),
    ("Aurora Paint", "VERIFICAR", [
        ("Resinas epoxicas VYTA BPA — respuesta cotizacion pendiente", "Jennifer Segura", "P1"),
        ("Seguimiento activo: confirmar interes o cerrar paso", "Jennifer Segura", "P2"),
    ]),
    ("Universal Colors", "VERIFICAR", [
        ("TiO2 588 y oxidos de hierro — Google Alerts activos (Lomon, Kronos, Tronox)", "Jennifer Segura", "P2"),
        ("Murillo/Erika — status cotizacion y muestras", "Jennifer Segura", "P2"),
    ]),
    ("Qroma", "VERIFICAR", [
        ("Carlos Baldion — neopreno, caucho clorado, parafina: sin avance reciente", "Victor Alfaro", "P2"),
        ("Profinne — seguimiento MPs especiales: confirmar status", "Jennifer Segura", "P2"),
    ]),
    ("Prospectos Pintura", "VERIFICAR", [
        ("Anipsa, Perupaint, Soprint, Interpaint — cold visits pendientes", "Victor Alfaro", "P3"),
        ("Preparar lista contactos y materiales para visitas semana", "Victor Alfaro", "P3"),
    ]),
    ("Plasticos", "VERIFICAR", [
        ("Tigre, Andinaplast, Inproplast, Nicoll — cera PE, TiO2, masterbatch", "Victor Alfaro", "P3"),
        ("Lufarol / CaCO3 para plasticos — oferta lista?", "Jennifer Segura", "P3"),
    ]),
    ("Mineria", "AVANZADO", [
        ("Oscar Rosas — status reunion / propuesta MIBC y xantatos", "Victor Alfaro", "P1"),
        ("Preparar ficha tecnica + pricing MIBC, xantatos, lubricantes", "Andres Bruna", "P2"),
        ("Oscar J (referido mineria) — coordinar visita", "Victor Alfaro", "P1"),
    ]),
    ("Oral Care", "NUEVO", [
        ("Proyecto pasta dental: reunion realizada 23 jun — proximos pasos", "Andres Bruna", "P1"),
        ("Prueba impresion y armado tubos en planta Lurin — agendar con Diego Gomez", "Jorge Bruna", "P1"),
        ("Confirmar: tratamiento Corona disponible? Energia superficial muestras verificada?", "Jorge Bruna", "P1"),
        ("Formula Ruby, tubos, equipos — status completo", "Andres Bruna", "P2"),
    ]),
    ("Alimentos", "VERIFICAR", [
        ("Pursuit, JAVA, Creafoods — acidos y especialidades: pipeline status", "Victor Alfaro", "P2"),
        ("Andres: coordinar seguimiento reunion anterior (Read AI agotado)", "Andres Bruna", "P2"),
    ]),
]

# ─── DOCX ──────────────────────────────────────────────────────────────
doc = Document()
for section in doc.sections:
    section.top_margin = Inches(0.8)
    section.bottom_margin = Inches(0.8)
    section.left_margin = Inches(1.0)
    section.right_margin = Inches(1.0)

# Titulo
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("AGENDA REVISION SEMANAL — BRUNA PERU")
run.bold = True
run.font.size = Pt(20)
run.font.color.rgb = NAVY

p2 = doc.add_paragraph()
p2.alignment = WD_ALIGN_PARAGRAPH.CENTER
r2 = p2.add_run(f"Semana del {FECHA}  |  VCB S.A.C.")
r2.bold = True
r2.font.size = Pt(13)
r2.font.color.rgb = ACCENT

p3 = doc.add_paragraph()
p3.alignment = WD_ALIGN_PARAGRAPH.CENTER
r3 = p3.add_run("Confidencial — Uso Interno")
r3.italic = True
r3.font.size = Pt(9)
r3.font.color.rgb = GRAY

add_divider(doc)

# PARTE 1
add_heading(doc, "PARTE 1 — REVISION PENDIENTES (semana anterior)", level=1, color=NAVY)
doc.add_paragraph("Fuente: Read AI (23 jun — Oral Care), Gmail, iCloud. Emails Peru relevantes escaneados.").runs[0].font.size = Pt(9)

for persona, data in pendientes.items():
    add_heading(doc, f"  {persona}  |  {data['rol']}", level=2, color=ACCENT)
    for tarea, status in data["items"]:
        add_status_item(doc, tarea, status, indent_in=0.5)

add_divider(doc)

# PARTE 2
add_heading(doc, "PARTE 2 — NOVEDADES DE LA SEMANA (23-29 jun 2026)", level=1, color=NAVY)

add_heading(doc, "Reunion Oral Care — 23 jun 2026 (Read AI)", level=2, color=ACCENT)
add_bullet(doc, "PLANTA: Armado de tubos trasladado de Chorrillos a Lurin. Prensa flexo permanece en Lurin. Planta estuvo inhabilitada temporalmente.")
add_bullet(doc, "MUESTRAS: Confirmado recepcion — en laboratorio, no utilizadas aun por inhabilitacion de planta.")
add_bullet(doc, "ACTION: Diego Gomez debe enviar requerimiento formal para programar prueba impresion y armado. Planeamiento responde viernes.")
add_bullet(doc, "ACTION: Jorge Bruna coordinar presencia equipo Bruna en pruebas (impresion + armado).")
add_bullet(doc, "TECNICO: Sin tratamiento Corona disponible. Bruna pidio verificar energia superficial con marcadores antes de imprimir.")

add_heading(doc, "Proyecto Pasta Dental / Oral Care — 24 jun", level=2, color=ACCENT)
add_bullet(doc, "Reunion Teams agendada con equipo desarrollo (24 jun) — Andres coordina proximos pasos.")
add_bullet(doc, "Formula, tubos y equipos: status tecnico pendiente de confirmar esta semana.")

add_heading(doc, "Market Intel — TiO2 (Google Alerts 26-28 jun)", level=2, color=ACCENT)
add_bullet(doc, "Alertas activas: Lomon (China), Kronos, Tronox, Henan Billions, ilmenite. Mercado TiO2 en movimiento.")
add_bullet(doc, "Implicacion: oportunidad pricing para Universal Colors; monitorear para pinturas (Aurora, Qroma, prospectos).")

add_heading(doc, "Alertas Operativas", level=2, color=ACCENT)
add_status_item(doc, "Daryza: OVERDUE 16 semanas. Lista 30+ MPs sin cotizacion formal. CRITICO.", "NO AVANZADO", "Jennifer Segura")
add_status_item(doc, "Cafetal: 6,600 kg K2CO3 restantes sin coordinar. Impuestos pendientes con Ileana.", "NO AVANZADO", "Carlos Artavia")
add_status_item(doc, "PO Norway: inventario sin update (OVERDUE 10 sem)", "VERIFICAR", "Carlos Artavia")

add_divider(doc)

# PARTE 3
add_heading(doc, "PARTE 3 — AGENDA POR CUENTA (12 cuentas)", level=1, color=NAVY)

for i, (nombre, status, items) in enumerate(cuentas, 1):
    add_heading(doc, f"  {i}. {nombre}", level=2, color=ACCENT)
    sp = doc.add_paragraph()
    sp.paragraph_format.left_indent = Inches(0.4)
    sr = sp.add_run(f"Status: [{status}]")
    sr.bold = True
    sr.font.size = Pt(10)
    sr.font.color.rgb = STATUS_COLORS.get(status, DARK)

    for tarea, responsable, prioridad in items:
        p_color = RED if prioridad == "P1" else ORANGE if prioridad == "P2" else GRAY
        p = doc.add_paragraph()
        p.paragraph_format.left_indent = Inches(0.6)
        p.paragraph_format.space_before = Pt(2)
        p.paragraph_format.space_after = Pt(2)
        pr = p.add_run(f"[{prioridad}] ")
        pr.font.color.rgb = p_color
        pr.bold = True
        pr.font.size = Pt(10)
        tr = p.add_run(tarea)
        tr.font.size = Pt(10)
        if responsable:
            rr = p.add_run(f"  \u2192 {responsable}")
            rr.font.color.rgb = ACCENT
            rr.font.size = Pt(9)

add_divider(doc)

# PARTE 3B
add_heading(doc, "PARTE 3B — PROYECTOS ESTRATEGICOS", level=1, color=NAVY)

proyectos = [
    ("Oral Care / Pasta Dental", PURPLE, [
        "Prueba impresion y armado tubos: Jorge coordina presencia Bruna en planta Lurin",
        "Diego Gomez envia requerimiento formal esta semana",
        "Formula Ruby, tubos, equipos — Andres coordina tecnicamente",
        "Energia superficial y linaje: verificar antes de impresion",
    ]),
    ("Mineria", PURPLE, [
        "Oscar Rosas — status reunion + propuesta MIBC y xantatos",
        "Victor Alfaro: Oscar J referido mineria — visita pendiente",
        "Preparar ficha tecnica + pricing: Andres",
    ]),
    ("Alimentos", PURPLE, [
        "Pursuit, JAVA, Creafoods: acidos y especialidades",
        "Victor: follow-up presencial Lima",
        "Andres: recuperar resumen reunion anterior",
    ]),
    ("Daryza — CRITICO", RED, [
        "16 semanas sin cotizacion formal desde lista recibida",
        "Jennifer: entregar cotizacion esta semana SIN EXCEPCION",
        "Agendar reunion con Jose Urbina inmediatamente",
    ]),
]

for nombre, color, items in proyectos:
    add_heading(doc, f"  {nombre}", level=2, color=color)
    for item in items:
        add_bullet(doc, item)

add_divider(doc)

# RESUMEN
add_heading(doc, "RESUMEN EJECUTIVO", level=1, color=NAVY)

add_heading(doc, "HOY — Urgente", level=2, color=RED)
for item in [
    ("Jorge Bruna: Confirmar con Diego Gomez programacion prueba impresion/tubos en Lurin", "NUEVO", "Jorge Bruna"),
    ("Jennifer Segura: Cotizacion formal Daryza — 16 semanas overdue, entregar esta semana", "NO AVANZADO", "Jennifer Segura"),
    ("Carlos Artavia: Confirmar pago impuestos Cafetal + liberacion carga con Ileana", "NO AVANZADO", "Carlos Artavia"),
    ("Victor Alfaro: Oscar Rosas Mineria — confirmar status reunion y propuesta", "VERIFICAR", "Victor Alfaro"),
    ("Andres Bruna: Oral Care — proximos pasos post-reunion 23 jun", "NUEVO", "Andres Bruna"),
]:
    add_status_item(doc, item[0], item[1], indent_in=0.4)

add_heading(doc, "ESTA SEMANA", level=2, color=ORANGE)
for item in [
    "Jennifer: Cotizacion Daryza entregada (no negociable)",
    "Jorge: Presencia en prueba impresion+tubos Lurin",
    "Jennifer: Seguimiento Aurora Paint VYTA BPA",
    "Carlos: Coordinar CargoFlex 6,600 kg restantes",
    "Jennifer: Universal Colors — TiO2 588 status",
    "Victor: Cold visits Qroma y prospectos pintura",
]:
    add_status_item(doc, item, "VERIFICAR", indent_in=0.4)

add_heading(doc, "OVERDUE CRONICO", level=2, color=RED)
for tarea, resp, sem in [
    ("Cotizacion Daryza (lista recibida 11 mar 2026)", "Jennifer Segura", 16),
    ("Inventario PO Norway", "Carlos Artavia", 10),
    ("Org chart cliente principal pintura actualizado", "Vanessa Garcia", 11),
]:
    p = doc.add_paragraph()
    p.paragraph_format.left_indent = Inches(0.4)
    pr = p.add_run(f"[{sem} sem OVERDUE] ")
    pr.bold = True
    pr.font.color.rgb = RED
    pr.font.size = Pt(10)
    tr = p.add_run(f"{tarea}  -> {resp}")
    tr.font.size = Pt(10)

add_divider(doc)

# Footer
fp = doc.add_paragraph()
fp.alignment = WD_ALIGN_PARAGRAPH.CENTER
fr = fp.add_run(f"Generado por Causita (Hermes Agent) | {FECHA} | Confidencial — Bruna Peru / VCB S.A.C.")
fr.font.size = Pt(8)
fr.font.color.rgb = GRAY
fr.italic = True

docx_path = f"{OUTPUT_DIR}/Agenda_BrunaPeru_{FECHA_FILE}.docx"
doc.save(docx_path)
print(f"DOCX saved: {docx_path}")

# ─── HTML ──────────────────────────────────────────────────────────────
def badge(status):
    cls = status.replace(" ", "-")
    return f'<span class="badge badge-{cls}">{status}</span>'

def prio_badge(p):
    return f'<span class="badge badge-{p}">{p}</span>'

cards_html = ""
for i, (nombre, status, items) in enumerate(cuentas, 1):
    items_html = ""
    for tarea, responsable, prioridad in items:
        resp_html = f'<br><span class="item-resp">&rarr; {responsable}</span>' if responsable else ""
        items_html += f'<li>{prio_badge(prioridad)} <div><span class="item-text">{tarea}</span>{resp_html}</div></li>\n'
    cards_html += f'''
  <div class="card">
    <div class="card-title">{i}. {nombre} {badge(status)}</div>
    <ul class="item-list">{items_html}</ul>
  </div>
'''

resp_sections_html = ""
for persona, data in pendientes.items():
    items_html = ""
    for tarea, status in data["items"]:
        items_html += f'<li><div class="checkbox"></div><div><span class="item-text">{tarea}</span> {badge(status)}</div></li>\n'
    resp_sections_html += f'''
<div class="resp-section">
  <div class="resp-name">{persona}</div>
  <div class="resp-rol">{data["rol"]}</div>
  <ul class="resp-items">{items_html}</ul>
</div>
'''

html = f"""<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dashboard Bruna Peru - 29 Jun 2026</title>
<style>
  * {{ box-sizing: border-box; margin: 0; padding: 0; }}
  body {{ font-family: 'Segoe UI', Arial, sans-serif; background: #0d1b2a; color: #e8edf2; min-height: 100vh; }}
  .header {{ background: linear-gradient(135deg, #1B4F72 0%, #0d2d44 100%); padding: 24px 32px; border-bottom: 3px solid #2E86C1; }}
  .header h1 {{ font-size: 1.7rem; font-weight: 700; color: #fff; }}
  .header .sub {{ color: #85c1e9; font-size: 0.9rem; margin-top: 4px; }}
  .header .meta {{ color: #7fb3d3; font-size: 0.78rem; margin-top: 8px; }}
  .conf {{ display: inline-block; background: #c0392b; color: #fff; padding: 2px 10px; border-radius: 3px; font-size: 0.72rem; font-weight: 700; margin-top: 8px; }}
  .container {{ max-width: 1400px; margin: 0 auto; padding: 24px 16px; }}
  .section-title {{ font-size: 1.15rem; font-weight: 700; color: #2E86C1; border-left: 4px solid #2E86C1; padding-left: 12px; margin: 28px 0 14px; }}
  .grid {{ display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 14px; }}
  .card {{ background: #1a2a3a; border-radius: 10px; padding: 14px; border: 1px solid #243647; }}
  .card-title {{ font-size: 0.95rem; font-weight: 700; color: #fff; margin-bottom: 8px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }}
  .badge {{ display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 0.7rem; font-weight: 700; }}
  .badge-HECHO {{ background: #1a5c36; color: #27AE60; border: 1px solid #27AE60; }}
  .badge-AVANZADO {{ background: #4a3f00; color: #F1C40F; border: 1px solid #F1C40F; }}
  .badge-VERIFICAR {{ background: #4a2c00; color: #E67E22; border: 1px solid #E67E22; }}
  .badge-NO-AVANZADO {{ background: #4a1515; color: #C0392B; border: 1px solid #C0392B; }}
  .badge-NUEVO {{ background: #2d1a4a; color: #8E44AD; border: 1px solid #8E44AD; }}
  .badge-OVERDUE {{ background: #4a0000; color: #ff4444; border: 1px solid #ff4444; }}
  .badge-P1 {{ background: #4a1515; color: #e74c3c; border: 1px solid #e74c3c; }}
  .badge-P2 {{ background: #4a2c00; color: #E67E22; border: 1px solid #E67E22; }}
  .badge-P3 {{ background: #1a2a3a; color: #7f8c8d; border: 1px solid #7f8c8d; }}
  .item-list {{ list-style: none; margin-top: 6px; }}
  .item-list li {{ display: flex; align-items: flex-start; gap: 6px; padding: 4px 0; border-bottom: 1px solid #1e3347; font-size: 0.82rem; line-height: 1.4; }}
  .item-list li:last-child {{ border-bottom: none; }}
  .item-text {{ flex: 1; color: #c5d5e4; }}
  .item-resp {{ color: #2E86C1; font-size: 0.75rem; font-style: italic; }}
  .news-card {{ background: #162030; border-radius: 8px; padding: 14px; border-left: 4px solid #2E86C1; margin-bottom: 12px; }}
  .news-card h4 {{ color: #2E86C1; font-size: 0.9rem; margin-bottom: 6px; }}
  .news-card p {{ color: #95a5a6; font-size: 0.82rem; line-height: 1.5; }}
  .news-card .tag {{ font-size: 0.7rem; background: #1B4F72; color: #85c1e9; padding: 2px 8px; border-radius: 10px; display: inline-block; margin-top: 6px; }}
  .alert-card {{ border-left-color: #C0392B; }}
  .alert-card h4 {{ color: #e74c3c; }}
  .resp-section {{ background: #1a2a3a; border-radius: 10px; padding: 14px; margin-bottom: 12px; border: 1px solid #243647; }}
  .resp-name {{ font-size: 1rem; font-weight: 700; color: #fff; margin-bottom: 3px; }}
  .resp-rol {{ color: #7fb3d3; font-size: 0.8rem; margin-bottom: 10px; }}
  .resp-items {{ list-style: none; }}
  .resp-items li {{ display: flex; align-items: flex-start; gap: 8px; padding: 5px 0; border-bottom: 1px solid #1e3347; font-size: 0.82rem; }}
  .resp-items li:last-child {{ border-bottom: none; }}
  .checkbox {{ width: 15px; height: 15px; border: 2px solid #2E86C1; border-radius: 3px; flex-shrink: 0; margin-top: 2px; }}
  .overdue-section {{ background: #1a0a0a; border: 1px solid #4a1515; border-radius: 10px; padding: 14px; margin: 24px 0; }}
  .overdue-title {{ color: #e74c3c; font-size: 1rem; font-weight: 700; margin-bottom: 12px; }}
  .footer {{ text-align: center; padding: 20px; color: #4a6278; font-size: 0.75rem; border-top: 1px solid #1e3347; margin-top: 24px; }}
  @media (max-width: 768px) {{ .grid {{ grid-template-columns: 1fr; }} .header h1 {{ font-size: 1.2rem; }} }}
</style>
</head>
<body>
<div class="header">
  <h1>&#127477;&#127466; BRUNA PERU &mdash; REVISION SEMANAL</h1>
  <div class="sub">VCB S.A.C. | Semana del 29 de junio, 2026</div>
  <div class="meta">Generado: 29 Jun 2026 | Fuentes: Read AI (23 jun Oral Care), Gmail, iCloud, Google Alerts TiO2</div>
  <span class="conf">CONFIDENCIAL &mdash; Uso Interno Bruna Peru / VCB S.A.C.</span>
</div>

<div class="container">

<div class="section-title">&#128240; SECCION 1 &mdash; NOVEDADES SEMANA (23-29 jun 2026)</div>

<div class="news-card">
  <h4>&#128203; Oral Care &mdash; Reunion 23 jun (Read AI) + Proyecto Pasta Dental 24 jun</h4>
  <p><strong>Planta:</strong> Armado de tubos trasladado de Chorrillos a Lur&iacute;n. Prensa flexo en Lur&iacute;n. Planta inhabilitada temporalmente por mudanza.<br>
  <strong>Muestras:</strong> En laboratorio &mdash; confirmado recepci&oacute;n, no utilizadas a&uacute;n.<br>
  <strong>Action:</strong> Diego G&oacute;mez env&iacute;a requerimiento formal &rarr; planeamiento agenda prueba. Jorge Bruna coordina presencia equipo Bruna.<br>
  <strong>T&eacute;cnico:</strong> Sin tratamiento Corona. Verificar energ&iacute;a superficial con marcadores antes de imprimir.<br>
  <strong>Proyecto Pasta Dental:</strong> Reuni&oacute;n Teams 24 jun. Andr&eacute;s coordina pr&oacute;ximos pasos.</p>
  <span class="tag">Oral Care &middot; Jorge Bruna &middot; Andr&eacute;s &middot; NUEVO</span>
</div>

<div class="news-card">
  <h4>&#128202; TiO2 &mdash; Market Intel Activo (Google Alerts 26-28 jun)</h4>
  <p>Alertas activas: <strong>Lomon (China), Kronos, Tronox, Henan Billions, ilmenite.</strong> Mercado TiO2 en movimiento. Oportunidad de pricing para Universal Colors. Monitorear para Aurora Paint, Qroma y prospectos pintura.</p>
  <span class="tag">Universal Colors &middot; Pintura &middot; Mercado</span>
</div>

<div class="news-card alert-card">
  <h4>&#9888; Daryza &mdash; OVERDUE CR&Iacute;TICO: 16 Semanas</h4>
  <p>Lista 30+ MPs recibida de Jos&eacute; Urbina el 11 mar 2026. <strong>Sin cotizaci&oacute;n formal desde entonces.</strong> Prioridades: Lauril Eter Sulfato 70% (82,000 kg/a&ntilde;o), Ac. Sulf&oacute;nico C8 (58,000 kg), NaOH 50% (46,000 kg), PEAD LH 735 (38,000 kg). Jennifer Segura debe entregar cotizaci&oacute;n esta semana.</p>
  <span class="tag">Daryza &middot; Jennifer Segura &middot; OVERDUE 16 sem &middot; CR&Iacute;TICO</span>
</div>

<div class="news-card alert-card">
  <h4>&#9888; Cafetal K2CO3 &mdash; Log&iacute;stica Pendiente</h4>
  <p>6,600 kg restantes sin coordinar con CargoFlex. Pago de impuestos y liberaci&oacute;n de carga sin confirmar con Ileana. Carlos Artavia debe resolver hoy.</p>
  <span class="tag">Log&iacute;stica &middot; Carlos Artavia &middot; P1</span>
</div>

<div class="section-title">&#128196; SECCION 2 &mdash; PENDIENTES POR CUENTA (12 cuentas)</div>
<div class="grid">
{cards_html}
</div>

<div class="section-title">&#128101; SECCION 3 &mdash; RESPONSABLES</div>
{resp_sections_html}

<div class="overdue-section">
  <div class="overdue-title">&#8987; OVERDUE CR&Oacute;NICO</div>
  <ul class="item-list">
    <li><span class="badge badge-OVERDUE">16 sem</span> <div class="item-text">Cotizaci&oacute;n Daryza (lista recibida 11 mar 2026)<br><span class="item-resp">&rarr; Jennifer Segura</span></div></li>
    <li><span class="badge badge-OVERDUE">11 sem</span> <div class="item-text">Org chart cliente principal pintura actualizado<br><span class="item-resp">&rarr; Vanessa Garcia</span></div></li>
    <li><span class="badge badge-OVERDUE">10 sem</span> <div class="item-text">Inventario PO Norway<br><span class="item-resp">&rarr; Carlos Artavia</span></div></li>
  </ul>
</div>

</div>

<div class="footer">
  Generado por Causita (Hermes Agent) &middot; 29 Jun 2026 &middot; Confidencial &mdash; Bruna Peru / VCB S.A.C.<br>
  Fuentes: Gmail (andybruna@gmail.com), iCloud, Read AI (23 jun), Google Alerts TiO2
</div>
</body>
</html>
"""

html_path = f"{OUTPUT_DIR}/Dashboard_BrunaPeru_{FECHA_FILE}.html"
with open(html_path, 'w', encoding='utf-8') as f:
    f.write(html)
print(f"HTML saved: {html_path}")
