"use strict";
const pptxgen = require("pptxgenjs");

// ── Paths ──────────────────────────────────────────────────────────────────
const LOGO   = "C:/Users/PC-Roby/Documents/_adiuvai_workspace/adiuvAI/assets/logo/logo-icon.png";
const SCR_H  = "C:/Users/PC-Roby/Documents/_adiuvai_workspace/adiuvAI/assets/screenshot/home.png";
const SCR_HC = "C:/Users/PC-Roby/Documents/_adiuvai_workspace/adiuvAI/assets/screenshot/home_chat.png";
const OUTPUT = "C:/Users/PC-Roby/Documents/_adiuvai_workspace/docs/adiuvAI-pitch-geopop.pptx";

// ── Color tokens (NO # prefix) ─────────────────────────────────────────────
const C = {
  canvas:   "f4edf3",   // light bg
  ink:      "040404",   // primary text
  golden:   "fbc881",   // accent
  slate:    "8a8ea9",   // secondary text
  lavender: "c8c3cd",   // borders
  void:     "0c0c0c",   // dark bg
  paper:    "fbfbfb",   // text-on-dark / card fill
  graphite: "323232",   // dark card
  green:    "2e7d32",
  red:      "c62828",
};

// ── Shadow factory (NEVER reuse same object) ────────────────────────────────
const mkShadow = () => ({ type: "outer", blur: 8, offset: 2, angle: 135, color: "000000", opacity: 0.08 });

// ── Helpers ────────────────────────────────────────────────────────────────
function eyebrow(sl, text, x, y, w, align = "left") {
  sl.addText(text, {
    x, y, w, h: 0.28,
    fontFace: "Calibri", fontSize: 9, bold: true,
    color: C.golden, charSpacing: 2, align, margin: 0,
  });
}

// ═══════════════════════════════════════════════════════════════════════════
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";   // 10" × 5.625"
pres.title  = "adiuvAI — Pitch Deck";
pres.author = "Roberto Musso";

// ══════════════════════════════════════════════════════════════════
// SLIDE 1 — COVER (dark)
// ══════════════════════════════════════════════════════════════════
{
  const sl = pres.addSlide();
  sl.background = { color: C.void };

  // Logo top-left
  sl.addImage({ path: LOGO, x: 0.4, y: 0.28, w: 0.75, h: 0.75 });

  // Eyebrow top-right
  eyebrow(sl, "BETA · GIUGNO 2026", 1.5, 0.35, 8, "right");

  // Main headline
  sl.addText([
    { text: "Incontra la tua nuova", options: { color: C.paper, breakLine: true } },
    { text: "segretaria.", options: { color: C.golden } },
  ], {
    x: 0.5, y: 1.3, w: 9, h: 2.0,
    fontFace: "Calibri", fontSize: 54, bold: true, align: "center",
  });

  // Subtitle
  sl.addText(
    "Una AI che legge la tua posta, organizza il tuo lavoro,\ne ogni mattina ti dice cosa conta davvero. Tutto sul tuo computer.",
    {
      x: 1, y: 3.4, w: 8, h: 1.15,
      fontFace: "Calibri", fontSize: 18, color: C.slate, align: "center",
    }
  );

  // Footer
  sl.addText("adiuvai.com", {
    x: 0, y: 5.28, w: 10, h: 0.28,
    fontFace: "Calibri", fontSize: 11, color: C.slate, align: "center", margin: 0,
  });
}

// ══════════════════════════════════════════════════════════════════
// SLIDE 2 — CHI PARLA (light)
// ══════════════════════════════════════════════════════════════════
{
  const sl = pres.addSlide();
  sl.background = { color: C.canvas };

  // Left golden accent bar
  sl.addShape(pres.shapes.RECTANGLE, {
    x: 0.35, y: 0.45, w: 0.06, h: 4.7,
    fill: { color: C.golden }, line: { color: C.golden },
  });

  eyebrow(sl, "IL FONDATORE", 0.62, 0.5, 5);

  sl.addText("Roberto Musso", {
    x: 0.62, y: 0.82, w: 9, h: 0.9,
    fontFace: "Calibri", fontSize: 40, bold: true, color: C.ink, margin: 0,
  });

  sl.addText("AI Senior Architect @ Hewlett Packard Enterprise", {
    x: 0.62, y: 1.72, w: 9, h: 0.45,
    fontFace: "Calibri", fontSize: 18, color: C.slate, margin: 0,
  });

  // Separator
  sl.addShape(pres.shapes.LINE, {
    x: 0.62, y: 2.3, w: 8.7, h: 0,
    line: { color: C.lavender, width: 0.75 },
  });

  // Bullets
  sl.addText([
    { text: "In Hewlett Packard Enterprise dal 2018", options: { bullet: true, breakLine: true } },
    { text: "AI Delivery Team Lead — guido un team di 6 persone", options: { bullet: true, breakLine: true } },
    { text: "Progetto e consegno soluzioni AI enterprise", options: { bullet: true } },
  ], {
    x: 0.62, y: 2.48, w: 8.8, h: 1.55,
    fontFace: "Calibri", fontSize: 17, color: C.ink,
  });

  // Closing line
  sl.addText(
    "adiuvAI nasce da quello che faccio ogni giorno: trasformare l\u2019AI in qualcosa che funziona davvero.",
    {
      x: 0.62, y: 4.25, w: 8.8, h: 0.85,
      fontFace: "Calibri", fontSize: 16, italic: true, color: C.slate, margin: 0,
    }
  );
}

// ══════════════════════════════════════════════════════════════════
// SLIDE 3 — HOOK (dark)
// ══════════════════════════════════════════════════════════════════
{
  const sl = pres.addSlide();
  sl.background = { color: C.void };

  sl.addText("Quante app hai aperto adesso?", {
    x: 0.4, y: 0.5, w: 9.2, h: 1.5,
    fontFace: "Calibri", fontSize: 52, bold: true, color: C.paper, align: "center",
  });

  sl.addText("Ottimista: sei.", {
    x: 0.4, y: 1.95, w: 9.2, h: 0.65,
    fontFace: "Calibri", fontSize: 26, color: C.slate, align: "center",
  });

  // App pills — 8 × (1.0" wide + 0.1" gap) = 8.8" total; start at 0.6
  const apps = ["Gmail", "Outlook", "Teams", "Slack", "Notion", "Trello", "OneDrive", "WhatsApp"];
  const pW = 1.0, pH = 0.38, pGap = 0.115, pY = 2.82, pX0 = 0.58;

  apps.forEach((app, i) => {
    const px = pX0 + i * (pW + pGap);
    sl.addShape(pres.shapes.RECTANGLE, {
      x: px, y: pY, w: pW, h: pH,
      fill: { color: "1c1c1c" }, line: { color: C.golden, width: 1 },
    });
    sl.addText(app, {
      x: px, y: pY, w: pW, h: pH,
      fontFace: "Calibri", fontSize: 12, bold: true,
      color: C.golden, align: "center", valign: "middle", margin: 0,
    });
  });

  // Punchline
  sl.addText(
    "Otto posti dove si nasconde il tuo lavoro importante.\nE tu salti da uno all\u2019altro. Tutto. Il. Giorno.",
    {
      x: 0.5, y: 3.45, w: 9, h: 1.85,
      fontFace: "Calibri", fontSize: 22, bold: true, color: C.golden, align: "center",
    }
  );
}

// ══════════════════════════════════════════════════════════════════
// SLIDE 4 — PAIN POINTS (light)
// ══════════════════════════════════════════════════════════════════
{
  const sl = pres.addSlide();
  sl.background = { color: C.canvas };

  eyebrow(sl, "COSA SUCCEDE DAVVERO", 0.4, 0.25, 6);

  sl.addText("Il tuo lavoro importante ti sta scappando.", {
    x: 0.4, y: 0.55, w: 9.2, h: 0.75,
    fontFace: "Calibri", fontSize: 30, bold: true, color: C.ink, margin: 0,
  });

  const cards = [
    { icon: "\u2709\uFE0F", title: "Email importanti", body: "Si nascondono tra le newsletter.\nLe leggi tardi o non le leggi affatto." },
    { icon: "\u2705", title: "I tuoi task", body: "Vivono in tre app diverse.\nNe perderai sempre uno." },
    { icon: "\uD83D\uDCDD", title: "Note riunione", body: "Stanno in un doc che non riaprirai mai.\nLe azioni restano senza seguito." },
  ];

  const cW = 2.93, cH = 2.75, cY = 1.5, cGap = 0.2, cX0 = 0.41;

  cards.forEach((card, i) => {
    const cx = cX0 + i * (cW + cGap);

    sl.addShape(pres.shapes.RECTANGLE, {
      x: cx, y: cY, w: cW, h: cH,
      fill: { color: C.paper }, line: { color: C.lavender, width: 1.5 },
      shadow: mkShadow(),
    });

    // Golden top bar
    sl.addShape(pres.shapes.RECTANGLE, {
      x: cx, y: cY, w: cW, h: 0.05,
      fill: { color: C.golden }, line: { color: C.golden },
    });

    sl.addText(card.icon, {
      x: cx + 0.18, y: cY + 0.18, w: 0.7, h: 0.7,
      fontFace: "Segoe UI Emoji", fontSize: 28, margin: 0,
    });

    sl.addText(card.title, {
      x: cx + 0.18, y: cY + 0.98, w: cW - 0.3, h: 0.45,
      fontFace: "Calibri", fontSize: 16, bold: true, color: C.ink, margin: 0,
    });

    sl.addText(card.body, {
      x: cx + 0.18, y: cY + 1.48, w: cW - 0.3, h: 1.1,
      fontFace: "Calibri", fontSize: 14, color: C.slate, margin: 0,
    });
  });

  // Punchline
  sl.addText("Spoiler: il problema non sei tu. Sono gli strumenti.", {
    x: 0.4, y: 4.52, w: 9.2, h: 0.72,
    fontFace: "Calibri", fontSize: 19, bold: true, color: C.golden, align: "center", margin: 0,
  });
}

// ══════════════════════════════════════════════════════════════════
// SLIDE 5 — TWIST (dark, minimal)
// ══════════════════════════════════════════════════════════════════
{
  const sl = pres.addSlide();
  sl.background = { color: C.void };

  sl.addText("Non ti serve un altro tool.", {
    x: 0.5, y: 0.95, w: 9, h: 1.3,
    fontFace: "Calibri", fontSize: 50, bold: false, color: C.paper, align: "center",
  });

  sl.addText("Ti serve una segretaria.", {
    x: 0.5, y: 2.35, w: 9, h: 1.6,
    fontFace: "Calibri", fontSize: 64, bold: true, color: C.golden, align: "center",
  });

  sl.addText("Una che legge tutto al posto tuo. E ti dice dove guardare.", {
    x: 1, y: 4.25, w: 8, h: 0.65,
    fontFace: "Calibri", fontSize: 18, color: C.slate, align: "center",
  });
}

// ══════════════════════════════════════════════════════════════════
// SLIDE 6 — SOLUZIONE (light)
// ══════════════════════════════════════════════════════════════════
{
  const sl = pres.addSlide();
  sl.background = { color: C.canvas };

  eyebrow(sl, "LA SOLUZIONE", 0.4, 0.22, 5);

  sl.addText("adiuvAI \u2014 la tua segretaria AI.", {
    x: 0.4, y: 0.52, w: 9.2, h: 0.85,
    fontFace: "Calibri", fontSize: 36, bold: true, color: C.ink, margin: 0,
  });

  sl.addText("Gli altri tool aspettano che tu li usi. adiuvAI lavora per te.", {
    x: 0.4, y: 1.38, w: 9.2, h: 0.48,
    fontFace: "Calibri", fontSize: 17, italic: true, color: C.slate, margin: 0,
  });

  const cols = [
    { icon: "\uD83D\uDCE7", title: "Legge la tua posta",       body: "Filtra, prioritizza, segnala solo ci\u00F2 che richiede la tua attenzione." },
    { icon: "\uD83D\uDCC5", title: "Tiene in ordine l\u2019agenda", body: "Scadenze, impegni, follow-up \u2014 tutto tracciato senza chiederti nulla." },
    { icon: "\uD83D\uDCCB", title: "Prepara il briefing",       body: "Ogni mattina un piano chiaro: ecco cosa conta oggi." },
    { icon: "\uD83D\uDE80", title: "Ti aiuta a eseguire",       body: "Prepara bozze, organizza documenti, ti accompagna mentre lavori." },
  ];

  const coW = 2.2, coH = 3.05, coY = 2.0, coGap = 0.17, coX0 = 0.41;

  cols.forEach((col, i) => {
    const cx = coX0 + i * (coW + coGap);

    sl.addShape(pres.shapes.RECTANGLE, {
      x: cx, y: coY, w: coW, h: coH,
      fill: { color: C.paper }, line: { color: C.lavender, width: 1 },
    });

    // Left golden accent bar
    sl.addShape(pres.shapes.RECTANGLE, {
      x: cx, y: coY, w: 0.05, h: coH,
      fill: { color: C.golden }, line: { color: C.golden },
    });

    sl.addText(col.icon, {
      x: cx + 0.15, y: coY + 0.18, w: 0.55, h: 0.6,
      fontFace: "Segoe UI Emoji", fontSize: 26, margin: 0,
    });

    sl.addText(col.title, {
      x: cx + 0.1, y: coY + 0.88, w: coW - 0.18, h: 0.7,
      fontFace: "Calibri", fontSize: 14, bold: true, color: C.ink, margin: 0,
    });

    sl.addText(col.body, {
      x: cx + 0.1, y: coY + 1.65, w: coW - 0.18, h: 1.22,
      fontFace: "Calibri", fontSize: 13, color: C.slate, margin: 0,
    });
  });
}

// ══════════════════════════════════════════════════════════════════
// SLIDE 7 — DAILY BRIEF + CAROSELLO (light + screenshot)
// ══════════════════════════════════════════════════════════════════
{
  const sl = pres.addSlide();
  sl.background = { color: C.canvas };

  eyebrow(sl, "LA MATTINA, DIVERSA", 0.35, 0.2, 4.3);

  sl.addText("Il briefing del mattino.\nPoi ti prende per mano.", {
    x: 0.35, y: 0.5, w: 4.4, h: 1.25,
    fontFace: "Calibri", fontSize: 26, bold: true, color: C.ink, margin: 0,
  });

  sl.addText(
    "Ogni mattina, un briefing personalizzato: cosa \u00E8 cambiato, cosa scade, cosa conta oggi.",
    {
      x: 0.35, y: 1.85, w: 4.4, h: 0.75,
      fontFace: "Calibri", fontSize: 14, color: C.ink, margin: 0,
    }
  );

  sl.addText([
    { text: "Il carosello attivit\u00E0 ti guida scheda per scheda, passo passo.", options: { bullet: true, breakLine: true } },
    { text: "Chatti con lei mentre lavori. Come se ti fosse al fianco.", options: { bullet: true } },
  ], {
    x: 0.35, y: 2.7, w: 4.4, h: 0.85,
    fontFace: "Calibri", fontSize: 14, color: C.ink,
  });

  // Quote box
  sl.addShape(pres.shapes.RECTANGLE, {
    x: 0.35, y: 3.68, w: 4.4, h: 1.5,
    fill: { color: C.paper }, line: { color: C.golden, width: 2 },
    shadow: mkShadow(),
  });

  sl.addText(
    "\u00ABCliente X di solito paga in ritardo.\nLa tua fattura \u00E8 ancora aperta.\u00BB",
    {
      x: 0.55, y: 3.8, w: 4.0, h: 0.78,
      fontFace: "Calibri", fontSize: 14, italic: true, color: C.ink, margin: 0,
    }
  );

  sl.addText("\u2014 il Daily Brief, con memoria relazionale", {
    x: 0.55, y: 4.65, w: 4.0, h: 0.38,
    fontFace: "Calibri", fontSize: 11, color: C.slate, margin: 0,
  });

  // Screenshot right half
  sl.addImage({
    path: SCR_H,
    x: 4.95, y: 0.18, w: 4.75, h: 5.25,
    sizing: { type: "contain", w: 4.75, h: 5.25 },
  });
}

// ══════════════════════════════════════════════════════════════════
// SLIDE 8 — CHAT (light + screenshot)
// ══════════════════════════════════════════════════════════════════
{
  const sl = pres.addSlide();
  sl.background = { color: C.canvas };

  sl.addText("Parla con lei.\nIn italiano. In linguaggio naturale.", {
    x: 0.35, y: 0.28, w: 4.4, h: 1.2,
    fontFace: "Calibri", fontSize: 24, bold: true, color: C.ink, margin: 0,
  });

  const bubbles = [
    "\u00ABQual \u00E8 la prossima attivit\u00E0 su cui concentrarmi?\u00BB",
    "\u00ABRiassumi le email arrivate stamattina.\u00BB",
    "\u00ABCrea un\u2019attivit\u00E0: richiamare Luca gioved\u00EC.\u00BB",
    "\u00ABCosa \u00E8 cambiato sul progetto Patient Portal?\u00BB",
  ];

  bubbles.forEach((bub, i) => {
    const by = 1.62 + i * 0.77;
    sl.addShape(pres.shapes.RECTANGLE, {
      x: 0.35, y: by, w: 4.4, h: 0.6,
      fill: { color: C.paper }, line: { color: C.golden, width: 1.5 },
    });
    sl.addText(bub, {
      x: 0.5, y: by, w: 4.1, h: 0.6,
      fontFace: "Calibri", fontSize: 13, italic: true, color: C.ink, valign: "middle", margin: 0,
    });
  });

  sl.addText(
    "Niente prompt engineering. Niente modelli da scegliere.\nL\u2019AI giusta lavora in background.",
    {
      x: 0.35, y: 4.82, w: 4.4, h: 0.65,
      fontFace: "Calibri", fontSize: 12, italic: true, color: C.slate, margin: 0,
    }
  );

  // Screenshot right
  sl.addImage({
    path: SCR_HC,
    x: 4.95, y: 0.18, w: 4.75, h: 5.25,
    sizing: { type: "contain", w: 4.75, h: 5.25 },
  });
}

// ══════════════════════════════════════════════════════════════════
// SLIDE 9 — 11 AGENTI (dark)
// ══════════════════════════════════════════════════════════════════
{
  const sl = pres.addSlide();
  sl.background = { color: C.void };

  eyebrow(sl, "NON \u00C8 UN WRAPPER DI CHATGPT", 0.5, 0.2, 9, "center");

  sl.addText("Sono 11 agenti AI specializzati che lavorano insieme.", {
    x: 0.4, y: 0.5, w: 9.2, h: 0.85,
    fontFace: "Calibri", fontSize: 32, bold: true, color: C.paper, align: "center", margin: 0,
  });

  const agents = [
    "Intent Classifier", "Home Agent", "Floating Agent", "Unified Processor",
    "Cloud Processor", "Brief Agent", "Setup Agent", "Memory Extractor",
    "Memory Miner", "Memory Auditor", "Embeddings",
  ];

  // Layout: row1=[0..3], row2=[4..7], row3=[8..10] centered
  const bW = 2.12, bH = 0.48, bGX = 0.17, bGY = 0.18;
  const rowDefs = [
    { items: [0,1,2,3], y: 1.58 },
    { items: [4,5,6,7], y: 1.58 + bH + bGY },
    { items: [8,9,10],  y: 1.58 + 2 * (bH + bGY) },
  ];

  rowDefs.forEach(({ items, y }) => {
    const rowW = items.length * bW + (items.length - 1) * bGX;
    const x0 = (10 - rowW) / 2;

    items.forEach((idx, ci) => {
      const bx = x0 + ci * (bW + bGX);

      sl.addShape(pres.shapes.RECTANGLE, {
        x: bx, y, w: bW, h: bH,
        fill: { color: C.graphite }, line: { color: C.golden, width: 1 },
      });
      sl.addText(agents[idx], {
        x: bx, y, w: bW, h: bH,
        fontFace: "Calibri", fontSize: 13, bold: true,
        color: C.paper, align: "center", valign: "middle", margin: 0,
      });
    });
  });

  sl.addText("Una tua richiesta \u2192 cinque agenti al lavoro.", {
    x: 0.5, y: 3.88, w: 9, h: 1.38,
    fontFace: "Calibri", fontSize: 28, bold: true, color: C.golden, align: "center",
  });
}

// ══════════════════════════════════════════════════════════════════
// SLIDE 10 — PRIVACY + COMPLIANCE (dark)
// ══════════════════════════════════════════════════════════════════
{
  const sl = pres.addSlide();
  sl.background = { color: C.void };

  sl.addText("I tuoi dati non lasciano il tuo computer.", {
    x: 0.4, y: 0.28, w: 9.2, h: 1.2,
    fontFace: "Calibri", fontSize: 42, bold: true, color: C.paper, align: "center", margin: 0,
  });

  sl.addText("Local-first. Non un claim di marketing, un\u2019architettura.", {
    x: 0.4, y: 1.52, w: 9.2, h: 0.5,
    fontFace: "Calibri", fontSize: 18, color: C.golden, align: "center", margin: 0,
  });

  const pcCards = [
    { icon: "\uD83D\uDD12", title: "Local-first",  body: "DB cifrato sul tuo disco.\nNessun server adiuvAI vede i tuoi contenuti." },
    { icon: "\uD83C\uDDEA\uD83C\uDDFA", title: "EU AI Act", body: "Conforme by design,\nnon adattato a posteriori." },
    { icon: "\uD83D\uDEE1\uFE0F", title: "GDPR",        body: "Zero trasferimenti a terzi.\nDPA art. 28 con ogni provider LLM." },
    { icon: "\uD83D\uDEAB", title: "No Training",  body: "I tuoi dati non addestrano modelli AI.\nZero Data Retention contrattuale." },
  ];

  const pCW = 4.35, pCH = 1.55, pCGX = 0.25, pCGY = 0.18;
  const pCPositions = [
    { x: 0.4,            y: 2.18 },
    { x: 0.4 + pCW + pCGX, y: 2.18 },
    { x: 0.4,            y: 2.18 + pCH + pCGY },
    { x: 0.4 + pCW + pCGX, y: 2.18 + pCH + pCGY },
  ];

  pcCards.forEach((card, i) => {
    const { x, y } = pCPositions[i];

    sl.addShape(pres.shapes.RECTANGLE, {
      x, y, w: pCW, h: pCH,
      fill: { color: C.graphite }, line: { color: C.golden, width: 1 },
    });

    sl.addText(card.icon + "  " + card.title, {
      x: x + 0.18, y: y + 0.12, w: pCW - 0.3, h: 0.45,
      fontFace: "Calibri", fontSize: 16, bold: true, color: C.golden, margin: 0,
    });

    sl.addText(card.body, {
      x: x + 0.18, y: y + 0.62, w: pCW - 0.3, h: 0.82,
      fontFace: "Calibri", fontSize: 13, color: C.paper, margin: 0,
    });
  });

  // Footer note
  sl.addText("Private by design, not by promise.", {
    x: 0, y: 5.27, w: 10, h: 0.28,
    fontFace: "Calibri", fontSize: 12, italic: true, color: C.slate, align: "center", margin: 0,
  });
}

// ══════════════════════════════════════════════════════════════════
// SLIDE 11 — POSIZIONAMENTO vs COMPETITOR (light)
// ══════════════════════════════════════════════════════════════════
{
  const sl = pres.addSlide();
  sl.background = { color: C.canvas };

  eyebrow(sl, "PERCH\u00C9 NON GLI ALTRI", 0.4, 0.2, 6);

  sl.addText("Motion, Notion AI, Copilot: tutti cloud-first, tutti generalisti.", {
    x: 0.4, y: 0.5, w: 9.2, h: 0.72,
    fontFace: "Calibri", fontSize: 26, bold: true, color: C.ink, margin: 0,
  });

  // Build table rows — fresh cell objects per row (no shared references)
  const hdrOpts  = (txt, al = "center") => ({ text: txt, options: { bold: true, fontSize: 13, color: C.void, fill: { color: C.golden }, align: al } });
  const dataOpts = (txt, clr = C.ink, al = "left") => ({ text: txt, options: { fontSize: 13, color: clr, fill: { color: C.paper }, align: al } });
  const emoOpts  = (txt) => ({ text: txt, options: { fontSize: 15, fill: { color: C.paper }, align: "center" } });

  const tableData = [
    [ hdrOpts("Funzionalit\u00E0", "left"), hdrOpts("adiuvAI"), hdrOpts("Motion"), hdrOpts("Notion AI"), hdrOpts("Copilot") ],
    [ dataOpts("Locale, dati sul tuo PC"), emoOpts("\u2705"), emoOpts("\u274C"), emoOpts("\u274C"), emoOpts("\u274C") ],
    [ dataOpts("EU AI Act compliant"), emoOpts("\u2705"), dataOpts("\u2014", C.slate, "center"), dataOpts("\u2014", C.slate, "center"), emoOpts("\u26A0\uFE0F") ],
    [ dataOpts("Legge email + file + chat"), emoOpts("\u2705"), emoOpts("\u26A0\uFE0F"), emoOpts("\u274C"), emoOpts("\u2705") ],
    [ dataOpts("Daily Brief proattivo"), emoOpts("\u2705"), emoOpts("\u274C"), emoOpts("\u274C"), emoOpts("\u274C") ],
    [ dataOpts("AI invisibile (zero prompt)"), emoOpts("\u2705"), emoOpts("\u274C"), emoOpts("\u274C"), emoOpts("\u274C") ],
  ];

  sl.addTable(tableData, {
    x: 0.4, y: 1.38, w: 9.2, h: 3.45,
    colW: [3.4, 1.45, 1.45, 1.45, 1.45],
    border: { pt: 1, color: C.lavender },
    fontFace: "Calibri",
  });

  sl.addText("adiuvAI \u00E8 locale, proattiva, pensata per chi lavora con dati propri.", {
    x: 0.4, y: 5.08, w: 9.2, h: 0.4,
    fontFace: "Calibri", fontSize: 16, bold: true, color: C.golden, align: "center", margin: 0,
  });
}

// ══════════════════════════════════════════════════════════════════
// SLIDE 12 — CTA / CLOSING (dark)
// ══════════════════════════════════════════════════════════════════
{
  const sl = pres.addSlide();
  sl.background = { color: C.void };

  eyebrow(sl, "BETA \u00B7 GIUGNO 2026", 0.5, 0.28, 9, "center");

  sl.addText("Gli early adopter\nguidano il roadmap.", {
    x: 0.4, y: 0.65, w: 9.2, h: 2.0,
    fontFace: "Calibri", fontSize: 46, bold: true, color: C.paper, align: "center", margin: 0,
  });

  sl.addText(
    "Accesso prioritario, canale diretto con il team,\nvoce in capitolo sulle prossime feature.",
    {
      x: 1, y: 2.75, w: 8, h: 0.9,
      fontFace: "Calibri", fontSize: 17, color: C.slate, align: "center",
    }
  );

  // CTA button
  sl.addShape(pres.shapes.RECTANGLE, {
    x: 3.2, y: 3.78, w: 3.6, h: 0.7,
    fill: { color: C.golden }, line: { color: C.golden },
  });
  sl.addText("Iscriviti alla waitlist \u2192", {
    x: 3.2, y: 3.78, w: 3.6, h: 0.7,
    fontFace: "Calibri", fontSize: 18, bold: true,
    color: C.ink, align: "center", valign: "middle", margin: 0,
  });

  sl.addText("adiuvai.com", {
    x: 0.5, y: 4.62, w: 9, h: 0.55,
    fontFace: "Calibri", fontSize: 28, bold: true, color: C.paper, align: "center",
  });

  // Logo small bottom-left watermark
  sl.addImage({ path: LOGO, x: 0.4, y: 4.95, w: 0.55, h: 0.55 });

  sl.addText("Roberto Musso \u00B7 roby9115@gmail.com", {
    x: 1.1, y: 5.12, w: 8.5, h: 0.28,
    fontFace: "Calibri", fontSize: 11, color: C.slate, align: "left", margin: 0,
  });
}

// ── Write output ────────────────────────────────────────────────────────────
pres.writeFile({ fileName: OUTPUT })
  .then(() => console.log("OK deck generated:", OUTPUT))
  .catch(err => { console.error("ERROR:", err); process.exit(1); });
