Create a slide deck / presentation on EBOLA VIRUS as a topic pandemic module in subheading : Heading for slides : 1. Clinical case 2. ⁠Differential diagnosis 3. ⁠Epidemiology 4. ⁠Pathogenesis 5. ⁠Lab diagnosis 6. ⁠Treatment 7. ⁠Prevention control and management 8. ⁠Summary Everything should be detailed and elaborated with good visuals and images And reference website is : https://www.cdc.gov/ebola/about/index.html You can create is as a presentation only but it should editable and there should sub topic and have 2 slides each for each subtopic

Reading File
Reading Web Page

https://www.cdc.gov/ebola/about/index.html

Reading File
Searching the Web

Ebola virus disease epidemiology pathogenesis lab diagnosis treatment 2024

Running Command

node /home/daytona/skills/shared/scripts/fetch_images.js \ "https://upload.wik…

Running Command

ls /home/daytona/workspace/ 2>/dev/null && echo "OK"

Running Command

mkdir -p /home/daytona/workspace/ebola-ppt && echo "dir created"

Writing File

~/ebola-ppt/ebola.js

const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Ebola Virus Disease – Pandemic Module";
pres.author = "Pandemic Module";

// ─── PALETTE ────────────────────────────────────────────────────────────────
const BG_DARK   = "1A0A0A";   // deep blood-red-black
const BG_MID    = "2C1010";   // dark red
const BG_LIGHT  = "F7F0F0";   // off-white for content slides
const ACCENT    = "C0392B";   // vivid red accent
const ACCENT2   = "E74C3C";   // lighter red
const GOLD      = "F39C12";   // gold for highlights
const TEXT_DARK = "1A0A0A";
const TEXT_LT   = "FFFFFF";
const TEXT_BODY = "2C2C2C";
const RULE_COL  = "C0392B";

// ─── HELPERS ────────────────────────────────────────────────────────────────
function addBg(slide, dark = false) {
  slide.background = { color: dark ? BG_DARK : BG_LIGHT };
}

function addHeader(slide, title, subtitle = "") {
  // Dark top bar
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 10, h: 1.0,
    fill: { color: ACCENT }, line: { color: ACCENT }
  });
  slide.addText(title, {
    x: 0.3, y: 0.08, w: 9.4, h: 0.78,
    fontSize: 22, bold: true, color: TEXT_LT, valign: "middle", margin: 0
  });
  if (subtitle) {
    slide.addShape(pres.ShapeType.rect, {
      x: 0, y: 1.0, w: 10, h: 0.35,
      fill: { color: BG_MID }, line: { color: BG_MID }
    });
    slide.addText(subtitle, {
      x: 0.3, y: 1.02, w: 9.4, h: 0.3,
      fontSize: 12, italic: true, color: GOLD, valign: "middle", margin: 0
    });
  }
}

function footerBar(slide, ref = "Source: CDC (cdc.gov/ebola) | WHO") {
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 5.35, w: 10, h: 0.28,
    fill: { color: BG_MID }, line: { color: BG_MID }
  });
  slide.addText(ref, {
    x: 0.2, y: 5.36, w: 9.6, h: 0.26,
    fontSize: 8, color: "CCAAAA", italic: true, valign: "middle", margin: 0
  });
}

function bulletBox(slide, items, x, y, w, h, fontSize = 13) {
  const arr = items.map((t, i) => ({
    text: t,
    options: { bullet: { type: "bullet" }, breakLine: i < items.length - 1, fontSize, color: TEXT_BODY, paraSpaceAfter: 4 }
  }));
  slide.addText(arr, {
    x, y, w, h,
    fontFace: "Calibri", valign: "top",
    fill: { color: "FFFFFF" }, line: { color: "E0C8C8", pt: 1 },
    shadow: { type: "outer", blur: 4, offset: 2, angle: 45, color: "DDCCCC", opacity: 0.3 }
  });
}

function sectionCard(slide, icon, label, value, x, y, w = 2.2, h = 1.0) {
  slide.addShape(pres.ShapeType.rect, {
    x, y, w, h,
    fill: { color: ACCENT }, line: { color: ACCENT }
  });
  slide.addText(icon, { x, y: y + 0.05, w, h: 0.4, fontSize: 20, align: "center", color: TEXT_LT });
  slide.addText(label, { x, y: y + 0.42, w, h: 0.25, fontSize: 9, bold: true, align: "center", color: GOLD });
  slide.addText(value, { x, y: y + 0.68, w, h: 0.28, fontSize: 11, align: "center", color: TEXT_LT, bold: true });
}

function twoColLayout(slide, leftItems, rightItems, yStart = 1.4, rowH = 3.7) {
  bulletBox(slide, leftItems, 0.25, yStart, 4.7, rowH);
  bulletBox(slide, rightItems, 5.05, yStart, 4.7, rowH);
}

function accentLine(slide, y = 1.38) {
  slide.addShape(pres.ShapeType.line, {
    x: 0.25, y, w: 9.5, h: 0,
    line: { color: ACCENT, pt: 2 }
  });
}

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 1 – TITLE SLIDE
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: BG_DARK };

  // Big red diagonal block
  s.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 10, h: 5.625,
    fill: { color: BG_DARK }, line: { color: BG_DARK }
  });
  s.addShape(pres.ShapeType.rect, {
    x: 6.5, y: 0, w: 3.5, h: 5.625,
    fill: { color: BG_MID }, line: { color: BG_MID }
  });
  // Red accent stripe
  s.addShape(pres.ShapeType.rect, {
    x: 6.3, y: 0, w: 0.3, h: 5.625,
    fill: { color: ACCENT }, line: { color: ACCENT }
  });

  // MODULE label
  s.addText("PANDEMIC MODULE", {
    x: 0.5, y: 0.5, w: 5.5, h: 0.4,
    fontSize: 11, bold: true, color: ACCENT2, charSpacing: 5, align: "left"
  });

  // Main title
  s.addText("EBOLA VIRUS", {
    x: 0.5, y: 1.0, w: 5.8, h: 1.2,
    fontSize: 54, bold: true, color: TEXT_LT, align: "left"
  });
  s.addText("DISEASE", {
    x: 0.5, y: 2.1, w: 5.8, h: 0.9,
    fontSize: 54, bold: true, color: ACCENT, align: "left"
  });

  // Subtitle
  s.addText("A Comprehensive Clinical & Public Health Overview", {
    x: 0.5, y: 3.1, w: 5.8, h: 0.45,
    fontSize: 14, italic: true, color: "DDBBBB", align: "left"
  });

  // Rule line
  s.addShape(pres.ShapeType.line, {
    x: 0.5, y: 3.6, w: 5.5, h: 0,
    line: { color: ACCENT, pt: 2 }
  });

  // Topics overview on right
  const topics = ["01  Clinical Case", "02  Differential Diagnosis", "03  Epidemiology", "04  Pathogenesis",
                  "05  Lab Diagnosis", "06  Treatment", "07  Prevention & Control", "08  Summary"];
  topics.forEach((t, i) => {
    s.addText(t, {
      x: 6.6, y: 0.45 + i * 0.59, w: 3.2, h: 0.52,
      fontSize: 11, color: i % 2 === 0 ? TEXT_LT : GOLD, bold: i === 0
    });
  });

  // Source note
  s.addText("Reference: www.cdc.gov/ebola  |  WHO Fact Sheet  |  PMC", {
    x: 0.5, y: 4.9, w: 9, h: 0.3,
    fontSize: 8.5, italic: true, color: "886666", align: "left"
  });
})();

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 2 – CLINICAL CASE (Part 1)
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  addBg(s);
  addHeader(s, "01 | CLINICAL CASE", "Real-world presentation of Ebola Virus Disease");

  // Case vignette box
  s.addShape(pres.ShapeType.rect, {
    x: 0.25, y: 1.45, w: 9.5, h: 1.4,
    fill: { color: "FFF0F0" }, line: { color: ACCENT, pt: 1.5 }
  });
  s.addText([
    { text: "CASE VIGNETTE:  ", options: { bold: true, color: ACCENT, fontSize: 12 } },
    { text: "A 32-year-old male healthcare worker presents to a referral hospital in Kikwit, DRC with a 4-day history of sudden-onset high-grade fever (39.8°C), severe headache, myalgia, and fatigue. He reports caring for an Ebola-confirmed patient 10 days prior without adequate PPE. On day 6, he develops profuse watery diarrhea, vomiting, abdominal pain, and unexplained conjunctival hemorrhage. His BP is 90/60 mmHg. The team initiates isolation immediately.", options: { fontSize: 11.5, color: TEXT_BODY } }
  ], { x: 0.4, y: 1.5, w: 9.2, h: 1.3, valign: "top" });

  // Symptom timeline
  s.addText("SYMPTOM PROGRESSION TIMELINE", {
    x: 0.25, y: 2.95, w: 9.5, h: 0.3,
    fontSize: 11, bold: true, color: ACCENT, align: "center"
  });

  const phases = [
    { day: "Day 0", label: "Exposure", color: "C0392B", icon: "☠" },
    { day: "Day 2-4", label: "Incubation\n(Asymptomatic)", color: "884444", icon: "⏳" },
    { day: "Day 5-7", label: "Dry Phase:\nFever, Myalgia,\nHeadache", color: "A93226", icon: "🌡" },
    { day: "Day 8-12", label: "Wet Phase:\nD&V, Hemorrhage,\nShock", color: "C0392B", icon: "🩸" },
    { day: "Day 10-16", label: "Outcome:\nRecovery\nor Death", color: "922B21", icon: "⚕" },
  ];

  phases.forEach((p, i) => {
    const x = 0.3 + i * 1.88;
    s.addShape(pres.ShapeType.rect, {
      x, y: 3.3, w: 1.7, h: 1.7,
      fill: { color: p.color }, line: { color: "FFFFFF", pt: 2 }
    });
    s.addText(p.icon, { x, y: 3.32, w: 1.7, h: 0.5, fontSize: 20, align: "center", color: TEXT_LT });
    s.addText(p.day, { x, y: 3.78, w: 1.7, h: 0.28, fontSize: 10, bold: true, align: "center", color: GOLD });
    s.addText(p.label, { x, y: 4.04, w: 1.7, h: 0.9, fontSize: 9.5, align: "center", color: TEXT_LT, valign: "top" });
    if (i < phases.length - 1) {
      s.addShape(pres.ShapeType.line, {
        x: x + 1.72, y: 4.17, w: 0.14, h: 0,
        line: { color: ACCENT, pt: 2 }
      });
    }
  });

  footerBar(s);
})();

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 3 – CLINICAL CASE (Part 2)
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  addBg(s);
  addHeader(s, "01 | CLINICAL CASE (cont.)", "Signs, Symptoms & Clinical Features");
  accentLine(s);

  const left = [
    "EARLY (Dry Phase) – Days 1-5:",
    "  • Sudden high-grade fever (>38.6°C)",
    "  • Severe headache, myalgia, arthralgia",
    "  • Extreme fatigue and weakness",
    "  • Sore throat, chest pain",
    "  • Anorexia, nausea",
    "",
    "LATE (Wet Phase) – Days 6-12:",
    "  • Profuse watery diarrhea (>10 L/day)",
    "  • Vomiting, abdominal cramping",
    "  • Maculopapular rash (trunk) – Day 5-7",
    "  • Hiccups (bad prognostic sign)",
    "  • Impaired kidney & liver function",
  ];

  const right = [
    "HEMORRHAGIC FEATURES (< 50% cases):",
    "  • Conjunctival injection/hemorrhage",
    "  • Petechiae, ecchymoses",
    "  • Melena, hematemesis",
    "  • Bleeding from IV sites, gums",
    "  • Internal hemorrhage",
    "",
    "NEUROLOGICAL:",
    "  • Confusion, delirium",
    "  • Seizures (severe cases)",
    "",
    "OUTCOME INDICATORS (Poor prognosis):",
    "  • High viral load at admission",
    "  • Early confusion, hiccups, bleeding",
    "  • CFR: 25–90% (avg ~50%)",
  ];

  twoColLayout(s, left, right, 1.42, 3.75);
  footerBar(s);
})();

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 4 – DIFFERENTIAL DIAGNOSIS (Part 1)
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  addBg(s);
  addHeader(s, "02 | DIFFERENTIAL DIAGNOSIS", "Diseases to rule out before confirming EVD");
  accentLine(s);

  s.addText("Key question: Which other diseases mimic Ebola's presentation?", {
    x: 0.25, y: 1.45, w: 9.5, h: 0.32,
    fontSize: 12, italic: true, color: ACCENT, align: "left"
  });

  const diffs = [
    { disease: "Malaria", features: "Fever, headache, myalgia – most common co-mimicker in endemic regions; RDT/smear required", priority: "HIGH" },
    { disease: "Typhoid Fever", features: "Sustained fever, rose spots, hepatosplenomegaly; Widal/culture", priority: "HIGH" },
    { disease: "Lassa Fever", features: "Haemorrhagic fever, facial swelling, deafness; RT-PCR specific", priority: "HIGH" },
    { disease: "Marburg Virus", features: "Clinically identical to Ebola; requires PCR for species differentiation", priority: "HIGH" },
    { disease: "Yellow Fever", features: "Jaundice, haemorrhage; serology + travel hx", priority: "MED" },
    { disease: "Meningococcal disease", features: "Purpuric rash, meningism, septicaemia; CSF culture", priority: "MED" },
  ];

  const colW = [2.1, 5.8, 1.0];
  const colX = [0.25, 2.4, 8.25];
  const headers = ["DISEASE", "DISTINGUISHING FEATURES", "PRIORITY"];

  headers.forEach((h, i) => {
    s.addShape(pres.ShapeType.rect, { x: colX[i], y: 1.82, w: colW[i], h: 0.35, fill: { color: ACCENT }, line: { color: ACCENT } });
    s.addText(h, { x: colX[i], y: 1.82, w: colW[i], h: 0.35, fontSize: 10, bold: true, color: TEXT_LT, align: "center", valign: "middle" });
  });

  diffs.forEach((d, i) => {
    const rowY = 2.2 + i * 0.5;
    const bg = i % 2 === 0 ? "FFF5F5" : "FFFFFF";
    colX.forEach((x, ci) => {
      s.addShape(pres.ShapeType.rect, { x, y: rowY, w: colW[ci], h: 0.47, fill: { color: bg }, line: { color: "E8D0D0", pt: 0.5 } });
    });
    s.addText(d.disease, { x: colX[0], y: rowY, w: colW[0], h: 0.47, fontSize: 11, bold: true, color: TEXT_DARK, align: "center", valign: "middle" });
    s.addText(d.features, { x: colX[1], y: rowY, w: colW[1], h: 0.47, fontSize: 9.5, color: TEXT_BODY, valign: "middle", margin: 4 });
    const pc = d.priority === "HIGH" ? ACCENT : GOLD;
    s.addShape(pres.ShapeType.rect, { x: colX[2], y: rowY + 0.07, w: 1.0, h: 0.33, fill: { color: pc }, line: { color: pc } });
    s.addText(d.priority, { x: colX[2], y: rowY + 0.07, w: 1.0, h: 0.33, fontSize: 9, bold: true, color: TEXT_LT, align: "center", valign: "middle" });
  });

  footerBar(s);
})();

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 5 – DIFFERENTIAL DIAGNOSIS (Part 2)
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  addBg(s);
  addHeader(s, "02 | DIFFERENTIAL DIAGNOSIS (cont.)", "Additional conditions and diagnostic approach");
  accentLine(s);

  const left = [
    "MORE DIFFERENTIALS:",
    "  • Crimean-Congo Haemorrhagic Fever",
    "    (tick exposure, haemorrhage)",
    "  • Dengue Fever (thrombocytopenia, bone pain)",
    "  • Rift Valley Fever (animal contact)",
    "  • Viral hepatitis (jaundice dominant)",
    "  • Septicaemia / Septic shock",
    "  • Shigellosis / severe gastroenteritis",
    "  • Meningitis (CNS signs)",
    "  • Rickettsial disease (rash)",
    "  • COVID-19 (respiratory >GI)",
  ];

  const right = [
    "DIAGNOSTIC APPROACH:",
    "  • Detailed travel & exposure history",
    "  • Epidemiological link to EVD case",
    "  • Assess onset, duration & progression",
    "  • Vitals: fever curve, BP, SpO2",
    "",
    "KEY TESTS to exclude mimics:",
    "  • Malaria RDT / blood film",
    "  • RT-PCR for Ebola (gold standard)",
    "  • FBC, LFT, RFT, coagulation screen",
    "  • Blood culture, Widal, dengue NS1",
    "  • Isolate FIRST, test concurrently",
    "  ⚠ Do NOT delay isolation to complete workup",
  ];

  twoColLayout(s, left, right, 1.42, 3.75);
  footerBar(s);
})();

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 6 – EPIDEMIOLOGY (Part 1)
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  addBg(s);
  addHeader(s, "03 | EPIDEMIOLOGY", "Global distribution, outbreaks & transmission dynamics");

  // Key stats cards
  const stats = [
    { icon: "🦠", label: "Discovered", value: "1976" },
    { icon: "🌍", label: "Primary Region", value: "Sub-Saharan Africa" },
    { icon: "💀", label: "Avg Case Fatality", value: "25–90%" },
    { icon: "⏱", label: "Incubation", value: "2–21 days" },
  ];
  stats.forEach((st, i) => {
    sectionCard(s, st.icon, st.label, st.value, 0.25 + i * 2.4, 1.05);
  });

  s.addText("MAJOR OUTBREAKS TIMELINE", {
    x: 0.25, y: 2.18, w: 9.5, h: 0.3,
    fontSize: 12, bold: true, color: ACCENT
  });

  const outbreaks = [
    { year: "1976", location: "DRC / Sudan", cases: "601", cfr: "53–88%", note: "First identified outbreak" },
    { year: "1995", location: "Kikwit, DRC", cases: "315", cfr: "81%", note: "Urban spread" },
    { year: "2000-01", location: "Uganda", cases: "425", cfr: "53%", note: "Sudan species" },
    { year: "2014-16", location: "W. Africa (Guinea, Sierra Leone, Liberia)", cases: "28,616", cfr: "40%", note: "Largest outbreak ever" },
    { year: "2018-20", location: "DRC (North Kivu)", cases: "3,481", cfr: "66%", note: "2nd largest; conflict zone" },
    { year: "2022", location: "Uganda", cases: "164", cfr: "55%", note: "Sudan species; no approved vaccine" },
    { year: "2025-26", location: "DRC / Uganda (Bundibugyo)", cases: "Ongoing", cfr: "~40%", note: "Active outbreak 2026" },
  ];

  const hds = ["Year", "Location", "Cases", "CFR", "Note"];
  const hws = [0.7, 3.1, 0.8, 0.7, 3.55];
  const hxs = [0.25, 0.98, 4.11, 4.94, 5.67];

  hds.forEach((h, i) => {
    s.addShape(pres.ShapeType.rect, { x: hxs[i], y: 2.52, w: hws[i], h: 0.3, fill: { color: BG_MID }, line: { color: BG_MID } });
    s.addText(h, { x: hxs[i], y: 2.52, w: hws[i], h: 0.3, fontSize: 9.5, bold: true, color: GOLD, align: "center", valign: "middle" });
  });

  outbreaks.forEach((o, i) => {
    const ry = 2.85 + i * 0.36;
    const bg = i % 2 === 0 ? "FFF5F5" : "FFFFFF";
    hxs.forEach((x, ci) => {
      s.addShape(pres.ShapeType.rect, { x, y: ry, w: hws[ci], h: 0.34, fill: { color: bg }, line: { color: "EEDDDD", pt: 0.5 } });
    });
    const vals = [o.year, o.location, o.cases, o.cfr, o.note];
    vals.forEach((v, ci) => {
      s.addText(v, { x: hxs[ci], y: ry, w: hws[ci], h: 0.34, fontSize: 9, color: ci === 4 ? "555555" : TEXT_BODY, align: "center", valign: "middle", italic: ci === 4 });
    });
  });

  footerBar(s);
})();

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 7 – EPIDEMIOLOGY (Part 2)
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  addBg(s);
  addHeader(s, "03 | EPIDEMIOLOGY (cont.)", "Transmission, reservoir & risk factors");
  accentLine(s);

  const left = [
    "TRANSMISSION ROUTES:",
    "  • Direct contact with blood/body fluids",
    "    of infected persons (alive or dead)",
    "  • Contact with contaminated objects",
    "    (needles, PPE, bedding)",
    "  • Unsafe burial practices",
    "  • Sexual contact (virus persists in",
    "    semen up to 500+ days post-recovery)",
    "  • Zoonotic spillover: bats, NHP",
    "",
    "NOT transmitted by:",
    "  • Air/aerosol (normal conditions)",
    "  • Water or food",
    "  • Mosquitoes or insects",
    "  • Casual contact / proximity",
  ];

  const right = [
    "NATURAL RESERVOIR:",
    "  • Fruit bats (Pteropodidae family)",
    "    – Hypsignathus monstrosus",
    "    – Epomops franqueti",
    "    – Myonycteris torquata",
    "  • Bats are likely amplifying hosts",
    "",
    "HIGH-RISK GROUPS:",
    "  • Healthcare workers (HCW)",
    "  • Family caregivers",
    "  • Burial ceremony participants",
    "  • Laboratory workers",
    "  • Hunters / bushmeat handlers",
    "",
    "R0 (Basic Reproduction Number): 1.5–2.5",
    "  (Lower than COVID, higher than MERS)",
  ];

  twoColLayout(s, left, right, 1.42, 3.75);
  footerBar(s);
})();

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 8 – PATHOGENESIS (Part 1)
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  addBg(s);
  addHeader(s, "04 | PATHOGENESIS", "How Ebola virus invades and destroys the host");
  accentLine(s);

  s.addText("VIRAL ENTRY & REPLICATION", {
    x: 0.25, y: 1.44, w: 9.5, h: 0.3, fontSize: 12, bold: true, color: ACCENT
  });

  // Flow steps
  const steps = [
    { n: "1", title: "ENTRY", body: "GP protein binds NPC1 receptor on macrophages, DCs, monocytes via endosomal route" },
    { n: "2", title: "REPLICATION", body: "Rapid viral replication inside macrophages & dendritic cells; innate immunity is disabled" },
    { n: "3", title: "SPREAD", body: "Virus disseminates via lymphatics to liver, spleen, adrenals, kidney, ovaries/testes" },
    { n: "4", title: "CYTOKINE STORM", body: "Massive TNF-α, IL-6, IL-8, MCP-1 release; vascular endothelial damage, fluid leak" },
    { n: "5", title: "ORGAN FAILURE", body: "Hepatic necrosis, adrenal failure, DIC, shock, multi-organ failure" },
  ];

  steps.forEach((st, i) => {
    const x = 0.25 + i * 1.9;
    s.addShape(pres.ShapeType.rect, { x, y: 1.82, w: 1.75, h: 0.42, fill: { color: ACCENT }, line: { color: ACCENT } });
    s.addText(`${st.n}. ${st.title}`, { x, y: 1.82, w: 1.75, h: 0.42, fontSize: 10, bold: true, color: TEXT_LT, align: "center", valign: "middle" });
    s.addShape(pres.ShapeType.rect, { x, y: 2.27, w: 1.75, h: 1.55, fill: { color: i % 2 === 0 ? "FFF0F0" : "FFE8E8" }, line: { color: "E8D0D0", pt: 1 } });
    s.addText(st.body, { x: x + 0.05, y: 2.3, w: 1.65, h: 1.48, fontSize: 10, color: TEXT_BODY, valign: "top", wrap: true });
    if (i < steps.length - 1) {
      s.addShape(pres.ShapeType.line, { x: x + 1.77, y: 2.0, w: 0.12, h: 0, line: { color: ACCENT, pt: 2 } });
    }
  });

  s.addText("KEY VIRULENCE FACTOR: VP35 and VP24 proteins block interferon (IFN-α/β) signaling → immune evasion", {
    x: 0.25, y: 3.9, w: 9.5, h: 0.32,
    fontSize: 11, italic: true, color: BG_MID,
    fill: { color: "FFE8E8" }, line: { color: ACCENT, pt: 1 }
  });

  const bullet2 = [
    "Glycoprotein (GP): mediates cell entry; shed form (sGP) absorbs antibodies → immune evasion",
    "VP40: matrix protein; drives budding of new viral particles",
    "NP (Nucleoprotein): encapsidates viral RNA genome",
    "VP30: transcription activator; required for viral mRNA synthesis",
    "L protein (RNA-dependent RNA polymerase): replication & transcription of negative-sense ssRNA genome",
  ];
  bulletBox(s, bullet2, 0.25, 4.26, 9.5, 0.98, 10.5);

  footerBar(s);
})();

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 9 – PATHOGENESIS (Part 2)
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  addBg(s);
  addHeader(s, "04 | PATHOGENESIS (cont.)", "Immune evasion, coagulopathy & organ damage");
  accentLine(s);

  const left = [
    "IMMUNE SYSTEM SUBVERSION:",
    "  • VP35 blocks IFN-β induction",
    "  • VP24 blocks JAK-STAT signaling",
    "  • sGP decoys neutralising antibodies",
    "  • Massive DC dysfunction → no",
    "    T-cell priming → lymphopenia",
    "  • NK cells impaired",
    "",
    "COAGULOPATHY (DIC):",
    "  • Tissue factor upregulation",
    "  • Platelet activation & depletion",
    "  • ↑ FDP, ↓ fibrinogen, ↑ PT/PTT",
    "  • Microthrombi + bleeding simultaneously",
    "  • Endothelial disruption → fluid leak",
  ];

  const right = [
    "ORGAN-SPECIFIC DAMAGE:",
    "  LIVER:",
    "  • Kupffer cell infection → hepatocyte necrosis",
    "  • ↑↑ AST > ALT (hepatic damage marker)",
    "  • Impaired coagulation factor synthesis",
    "",
    "  ADRENAL GLANDS:",
    "  • Cortical necrosis → adrenal insufficiency",
    "  • Contributes to hypotension, shock",
    "",
    "  KIDNEYS:",
    "  • Proteinuria, oliguria, acute kidney injury",
    "",
    "  VASCULAR ENDOTHELIUM:",
    "  • Increased permeability → 3rd spacing",
    "  • Hypovolemic shock, circulatory collapse",
  ];

  twoColLayout(s, left, right, 1.42, 3.75);
  footerBar(s);
})();

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 10 – LAB DIAGNOSIS (Part 1)
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  addBg(s);
  addHeader(s, "05 | LAB DIAGNOSIS", "Confirming Ebola – Tests, Biosafety & Interpretation");
  accentLine(s);

  s.addText("⚠ BIOSAFETY FIRST: All samples = BSL-4 precautions. Inactivate samples before testing outside BSL-4 facilities.", {
    x: 0.25, y: 1.44, w: 9.5, h: 0.36,
    fontSize: 11, bold: true, color: "FFFFFF",
    fill: { color: ACCENT }, line: { color: ACCENT }
  });

  const tests = [
    { test: "RT-PCR (Real-Time)", type: "Molecular", timing: "Days 3+", notes: "Gold standard. Detects viral RNA. 24-48h result. Preferred method.", status: "GOLD STD" },
    { test: "ELISA – Antigen Capture", type: "Immunological", timing: "Days 3-7", notes: "Detects viral antigen (NP, GP). High sensitivity in acute phase.", status: "CONFIRM" },
    { test: "IgM / IgG ELISA", type: "Serology", timing: "Days 8+", notes: "IgM rises early; IgG later. Useful for serosurveys & survivors.", status: "CONFIRM" },
    { test: "Virus Isolation", type: "Culture", timing: "Days 1+", notes: "BSL-4 only. Reference labs. Not routine. Definitive proof.", status: "RESEARCH" },
    { test: "Rapid Antigen Test", type: "POC", timing: "Days 3-10", notes: "Field use in outbreak. Less sensitive than PCR. Triage tool.", status: "SCREEN" },
    { test: "Electron Microscopy", type: "Morphology", timing: "Any", notes: "Characteristic filamentous 'shepherd's crook' morphology.", status: "RESEARCH" },
  ];

  const ths = ["TEST", "TYPE", "TIMING", "NOTES", "USE"];
  const tws = [2.0, 1.4, 0.9, 4.2, 1.0];
  const txs = [0.25, 2.28, 3.71, 4.64, 8.88];

  ths.forEach((h, i) => {
    s.addShape(pres.ShapeType.rect, { x: txs[i], y: 1.86, w: tws[i], h: 0.3, fill: { color: BG_MID }, line: { color: BG_MID } });
    s.addText(h, { x: txs[i], y: 1.86, w: tws[i], h: 0.3, fontSize: 9.5, bold: true, color: GOLD, align: "center", valign: "middle" });
  });

  tests.forEach((t, i) => {
    const ry = 2.19 + i * 0.49;
    const bg = i % 2 === 0 ? "FFF5F5" : "FFFFFF";
    txs.forEach((x, ci) => {
      s.addShape(pres.ShapeType.rect, { x, y: ry, w: tws[ci], h: 0.46, fill: { color: bg }, line: { color: "EDD8D8", pt: 0.5 } });
    });
    const vals = [t.test, t.type, t.timing, t.notes, t.status];
    const sc = t.status === "GOLD STD" ? ACCENT : t.status === "CONFIRM" ? "1A5276" : t.status === "SCREEN" ? GOLD : "555555";
    vals.forEach((v, ci) => {
      if (ci === 4) {
        s.addShape(pres.ShapeType.rect, { x: txs[ci] + 0.05, y: ry + 0.07, w: tws[ci] - 0.1, h: 0.32, fill: { color: sc }, line: { color: sc } });
        s.addText(v, { x: txs[ci] + 0.05, y: ry + 0.07, w: tws[ci] - 0.1, h: 0.32, fontSize: 8, bold: true, color: TEXT_LT, align: "center", valign: "middle" });
      } else {
        s.addText(v, { x: txs[ci], y: ry, w: tws[ci], h: 0.46, fontSize: ci === 3 ? 9 : 10, color: TEXT_BODY, align: ci === 3 ? "left" : "center", valign: "middle", italic: ci === 3, margin: ci === 3 ? 3 : 0 });
      }
    });
  });

  footerBar(s, "Source: WHO Interim Guidance Dec 2024 | CDC | cdc.gov/ebola");
})();

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 11 – LAB DIAGNOSIS (Part 2)
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  addBg(s);
  addHeader(s, "05 | LAB DIAGNOSIS (cont.)", "Haematology, biochemistry & sample handling");
  accentLine(s);

  const left = [
    "HAEMATOLOGICAL FINDINGS:",
    "  • Leukopenia (early) → leukocytosis (late)",
    "  • Thrombocytopenia (often <50,000/µL)",
    "  • Atypical lymphocytes, band cells",
    "  • Neutrophilia with left shift (severe)",
    "",
    "BIOCHEMISTRY:",
    "  • ↑↑ AST > ALT (hepatic injury)",
    "  • ↑ Creatinine, ↑ BUN (AKI)",
    "  • Hypoproteinaemia, hypoalbuminaemia",
    "  • ↑ CRP, ↑ ferritin",
    "  • Electrolyte imbalance (K+, Na+)",
  ];

  const right = [
    "COAGULATION PANEL:",
    "  • ↑ PT, ↑ aPTT",
    "  • ↑ D-dimer, ↑ FDP",
    "  • ↓ Fibrinogen → DIC",
    "",
    "SAMPLE COLLECTION (WHO/CDC):",
    "  • Preferred: whole blood / EDTA plasma",
    "  • Avoid oral/buccal swabs in live patients",
    "  • Chemical inactivation before transport",
    "  • Triple packaging per IATA P650",
    "  • Send to national reference/BSL-4 lab",
    "",
    "DISCHARGE CRITERIA (WHO):",
    "  • 2× negative RT-PCR ≥48 h apart",
    "  • Asymptomatic before discharge",
  ];

  twoColLayout(s, left, right, 1.42, 3.75);
  footerBar(s, "Source: WHO Diagnostic Testing Guidance Dec 2024 | CDC");
})();

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 12 – TREATMENT (Part 1)
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  addBg(s);
  addHeader(s, "06 | TREATMENT", "FDA-approved therapies & supportive care");
  accentLine(s);

  s.addText("FDA-APPROVED SPECIFIC THERAPIES (Orthoebolavirus zairense only)", {
    x: 0.25, y: 1.44, w: 9.5, h: 0.3,
    fontSize: 12, bold: true, color: ACCENT
  });

  // Drug cards
  const drugs = [
    {
      name: "INMAZEB™ (Atoltivimab + Maftivimab + Odesivimab-ebgn)",
      type: "Monoclonal antibody cocktail (3 mAbs)",
      mech: "Binds GP protein at 3 sites → blocks viral entry into host cells",
      route: "Single IV infusion",
      approval: "FDA approved Oct 2020",
      efficacy: "PALM RCT: ~36% vs ~49% mortality (vs ZMapp)",
      color: "7B241C"
    },
    {
      name: "EBANGA™ (Ansuvimab-zykl / mAb114)",
      type: "Single monoclonal antibody",
      mech: "Binds GP receptor-binding domain → prevents NPC1 interaction",
      route: "Single IV infusion",
      approval: "FDA approved Dec 2020",
      efficacy: "PALM RCT: ~35% mortality vs ~49% (best survival in trial)",
      color: "922B21"
    }
  ];

  drugs.forEach((d, i) => {
    const y = 1.82 + i * 1.6;
    s.addShape(pres.ShapeType.rect, { x: 0.25, y, w: 9.5, h: 1.5, fill: { color: d.color }, line: { color: "FFFFFF", pt: 1.5 } });
    s.addText(d.name, { x: 0.4, y: y + 0.05, w: 9.2, h: 0.35, fontSize: 12, bold: true, color: TEXT_LT });
    s.addText(`Type: ${d.type}   |   Route: ${d.route}   |   Approval: ${d.approval}`, {
      x: 0.4, y: y + 0.37, w: 9.2, h: 0.25, fontSize: 10, color: GOLD
    });
    s.addText(`Mechanism: ${d.mech}`, { x: 0.4, y: y + 0.63, w: 9.2, h: 0.3, fontSize: 10, italic: true, color: "FFCCCC" });
    s.addText(`Efficacy: ${d.efficacy}`, { x: 0.4, y: y + 0.93, w: 9.2, h: 0.3, fontSize: 10, color: TEXT_LT });
    s.addShape(pres.ShapeType.line, { x: 0.25, y: y + 1.3, w: 9.5, h: 0, line: { color: GOLD, pt: 0.5 } });
  });

  footerBar(s, "Source: FDA Drug Approvals | PALM RCT DRC 2019 | cdc.gov/ebola");
})();

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 13 – TREATMENT (Part 2)
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  addBg(s);
  addHeader(s, "06 | TREATMENT (cont.)", "Supportive care, investigational agents & clinical management");
  accentLine(s);

  const left = [
    "SUPPORTIVE CARE (improves survival):",
    "  • IV fluid resuscitation (isotonic NS/RL)",
    "  • Electrolyte correction (K+, Ca2+, Mg2+)",
    "  • Oral Rehydration Solution if tolerated",
    "  • Antipyretics (acetaminophen; avoid NSAIDs)",
    "  • Anti-emetics (ondansetron)",
    "  • Anti-diarrhoeal agents (loperamide)",
    "  • Nutritional support (NG/parenteral)",
    "  • Pain management (morphine/fentanyl)",
    "  • Vasopressors for refractory shock",
    "  • Dialysis for AKI",
    "",
    "COAGULOPATHY MANAGEMENT:",
    "  • FFP, cryoprecipitate for DIC",
    "  • Vitamin K supplementation",
  ];

  const right = [
    "INVESTIGATIONAL / PRIOR AGENTS:",
    "  • ZMapp (3 mAb cocktail) – superseded",
    "  • Remdesivir – limited EVD efficacy",
    "  • Favipiravir – trialled in W. Africa 2014",
    "    (inconclusive for severe cases)",
    "  • Convalescent plasma – variable results",
    "",
    "CLINICAL PRINCIPLES:",
    "  • Isolate IMMEDIATELY on suspicion",
    "  • Dedicated EVD treatment unit (ETU)",
    "  • Strict infection control / full PPE",
    "  • Psychological support for patients",
    "  • Safe burial after death",
    "",
    "NOTE: No approved treatment for Sudan,",
    "  Bundibugyo, or Taï Forest species →",
    "  supportive care + investigational trials",
  ];

  twoColLayout(s, left, right, 1.42, 3.75);
  footerBar(s, "Source: CDC Clinical Guidance for Ebola | cdc.gov/ebola/hcp");
})();

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 14 – PREVENTION, CONTROL & MANAGEMENT (Part 1)
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  addBg(s);
  addHeader(s, "07 | PREVENTION, CONTROL & MANAGEMENT", "Vaccines, IPC, contact tracing & outbreak response");
  accentLine(s);

  s.addText("VACCINES", {
    x: 0.25, y: 1.44, w: 9.5, h: 0.3, fontSize: 12, bold: true, color: ACCENT
  });

  const vaccines = [
    {
      name: "ERVEBO® (rVSV-ZEBOV-GP) — Merck",
      target: "Orthoebolavirus zairense (Zaire/Ebola)",
      indication: "Ring vaccination in outbreak response; preventive in HCW",
      efficacy: ">97% protective in Guinea 2015 Lancet trial; FDA approved 2019",
      notes: "Live attenuated VSV vector; single dose; can cause arthritis side-effect"
    },
    {
      name: "ZABDENO® + MVABEA® (2-dose) — Janssen",
      target: "Orthoebolavirus zairense (Zaire/Ebola)",
      indication: "Preventive vaccination; prime-boost regimen",
      efficacy: "Ad26.ZEBOV prime / MVA-BN-Filo boost; approved EU/UK",
      notes: "56-day interval between doses; not for acute outbreak use"
    }
  ];

  vaccines.forEach((v, i) => {
    const y = 1.8 + i * 1.35;
    const col = i === 0 ? "7B241C" : "922B21";
    s.addShape(pres.ShapeType.rect, { x: 0.25, y, w: 9.5, h: 1.28, fill: { color: col }, line: { color: "FFFFFF", pt: 1 } });
    s.addText(v.name, { x: 0.4, y: y + 0.04, w: 9.2, h: 0.32, fontSize: 12, bold: true, color: TEXT_LT });
    s.addText(`Target: ${v.target}   |   ${v.indication}`, { x: 0.4, y: y + 0.37, w: 9.2, h: 0.25, fontSize: 10, color: GOLD });
    s.addText(`Efficacy: ${v.efficacy}`, { x: 0.4, y: y + 0.62, w: 9.2, h: 0.25, fontSize: 10, italic: true, color: "FFCCCC" });
    s.addText(`Notes: ${v.notes}`, { x: 0.4, y: y + 0.88, w: 9.2, h: 0.28, fontSize: 9.5, color: "FFE8E8" });
  });

  s.addShape(pres.ShapeType.rect, { x: 0.25, y: 4.54, w: 9.5, h: 0.45,
    fill: { color: "FFF0F0" }, line: { color: ACCENT, pt: 1 } });
  s.addText("⚠ No approved vaccine for Sudan, Bundibugyo, or Taï Forest species. Candidate vaccines in clinical trials as of 2026.", {
    x: 0.35, y: 4.56, w: 9.3, h: 0.4,
    fontSize: 10.5, italic: true, color: ACCENT, valign: "middle"
  });

  footerBar(s, "Source: WHO SAGE July 2024 | Merck | Janssen | cdc.gov/ebola");
})();

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 15 – PREVENTION, CONTROL & MANAGEMENT (Part 2)
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  addBg(s);
  addHeader(s, "07 | PREVENTION, CONTROL & MANAGEMENT (cont.)", "IPC, contact tracing, community engagement & outbreak response");
  accentLine(s);

  const left = [
    "INFECTION PREVENTION & CONTROL (IPC):",
    "  • Full PPE for HCW: gloves (double), gown,",
    "    apron, mask (FFP2/3), goggles/face shield",
    "  • Strict hand hygiene (alcohol-based rub)",
    "  • Dedicated EVD Treatment Unit (ETU)",
    "  • Separate clean/dirty zones in ETU",
    "  • Safe injection practices; no needle recapping",
    "  • Decontamination of equipment/environment",
    "  • Biomedical waste: double-bag, autoclave",
    "",
    "CONTACT TRACING:",
    "  • Identify all contacts in 21-day window",
    "  • Daily symptom monitoring × 21 days",
    "  • Ring vaccination of contacts",
    "  • Quarantine high-risk contacts",
  ];

  const right = [
    "SAFE AND DIGNIFIED BURIALS (SDB):",
    "  • Virus shed from corpse for days",
    "  • Trained burial teams with full PPE",
    "  • No touching of body by community",
    "  • Chlorine disinfection of body bags",
    "  • GPS-tagged graves for surveillance",
    "",
    "COMMUNITY ENGAGEMENT:",
    "  • Community health workers",
    "  • Overcome mistrust & cultural barriers",
    "  • Radio/SMS public health messaging",
    "  • Involve religious & community leaders",
    "",
    "OUTBREAK RESPONSE PILLARS (WHO):",
    "  1. Case detection & isolation",
    "  2. Contact tracing & surveillance",
    "  3. Vaccination (ring)",
    "  4. Clinical management",
    "  5. Community engagement",
    "  6. Safe burials",
    "  7. Cross-border coordination",
  ];

  twoColLayout(s, left, right, 1.42, 3.75);
  footerBar(s, "Source: WHO Ebola Response Roadmap | CDC Emergency Operations");
})();

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 16 – SUMMARY (Part 1)
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  addBg(s);
  addHeader(s, "08 | SUMMARY", "Key takeaways from the Ebola Virus Disease module");
  accentLine(s);

  const summary = [
    { icon: "🦠", head: "THE VIRUS", body: "Orthoebolavirus (formerly Ebolavirus) – 4 human species. Filamentous -ssRNA virus (Filoviridae). GP protein = key virulence factor." },
    { icon: "🌍", head: "EPIDEMIOLOGY", body: "Discovered 1976, DRC. Largest outbreak 2014-16 West Africa (~29K cases). Fruit bats = likely reservoir. R0 ~1.5-2.5." },
    { icon: "🌡", head: "CLINICAL", body: "Dry phase: fever, myalgia; Wet phase: D&V, haemorrhage. CFR 25-90%. Transmission via bodily fluids only – NOT airborne." },
    { icon: "🔬", head: "DIAGNOSIS", body: "RT-PCR (gold standard). ELISA antigen/antibody. BSL-4 handling. Lab: leukopenia, thrombocytopenia, ↑AST, DIC." },
    { icon: "💊", head: "TREATMENT", body: "Inmazeb™ & Ebanga™ (FDA approved for Zaire species). Supportive care = cornerstone. No approved Rx for other species." },
    { icon: "🛡", head: "PREVENTION", body: "Ervebo® & Zabdeno+Mvabea vaccines (Zaire species). Full PPE, ETU, contact tracing, safe burial = outbreak control." },
  ];

  summary.forEach((item, i) => {
    const col = i % 3;
    const row = Math.floor(i / 3);
    const x = 0.25 + col * 3.22;
    const y = 1.44 + row * 1.85;
    s.addShape(pres.ShapeType.rect, { x, y, w: 3.0, h: 1.75, fill: { color: "FFFFFF" }, line: { color: ACCENT, pt: 1.5 } });
    s.addShape(pres.ShapeType.rect, { x, y, w: 3.0, h: 0.42, fill: { color: ACCENT }, line: { color: ACCENT } });
    s.addText(`${item.icon}  ${item.head}`, { x: x + 0.08, y: y + 0.05, w: 2.85, h: 0.34, fontSize: 11.5, bold: true, color: TEXT_LT, valign: "middle" });
    s.addText(item.body, { x: x + 0.1, y: y + 0.47, w: 2.82, h: 1.2, fontSize: 10, color: TEXT_BODY, wrap: true, valign: "top" });
  });

  footerBar(s);
})();

// ════════════════════════════════════════════════════════════════════════════
// SLIDE 17 – SUMMARY (Part 2) / Key Messages & References
// ════════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: BG_DARK };

  // Header
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 1.0, fill: { color: ACCENT }, line: { color: ACCENT } });
  s.addText("08 | SUMMARY – KEY MESSAGES & REFERENCES", {
    x: 0.3, y: 0.08, w: 9.4, h: 0.78, fontSize: 20, bold: true, color: TEXT_LT, valign: "middle", margin: 0
  });

  const msgs = [
    "Early recognition & IMMEDIATE ISOLATION are the most critical interventions in EVD management.",
    "RT-PCR is the gold standard diagnostic test; all samples must follow BSL-4 biosafety protocols.",
    "Two FDA-approved monoclonal antibody therapies exist ONLY for Orthoebolavirus zairense (Zaire species).",
    "Supportive care (aggressive fluid management, electrolytes, nutritional support) significantly improves survival.",
    "The Ervebo® vaccine has >97% efficacy and is the cornerstone of ring vaccination in outbreaks.",
    "Community engagement, safe burial practices, and contact tracing are critical to outbreak containment.",
    "Ebola does NOT spread through the air – transmission requires direct contact with bodily fluids.",
    "The 2026 DRC/Uganda Bundibugyo outbreak is active – highlighting urgent need for broader species vaccines.",
  ];

  s.addText("CRITICAL LEARNING POINTS:", {
    x: 0.4, y: 1.1, w: 9.2, h: 0.3, fontSize: 12, bold: true, color: GOLD
  });

  msgs.forEach((m, i) => {
    s.addShape(pres.ShapeType.rect, { x: 0.4, y: 1.45 + i * 0.39, w: 0.3, h: 0.3, fill: { color: ACCENT }, line: { color: ACCENT } });
    s.addText(`${i + 1}`, { x: 0.4, y: 1.45 + i * 0.39, w: 0.3, h: 0.3, fontSize: 10, bold: true, color: TEXT_LT, align: "center", valign: "middle" });
    s.addText(m, { x: 0.78, y: 1.45 + i * 0.39, w: 8.9, h: 0.36, fontSize: 10.5, color: TEXT_LT, valign: "middle" });
  });

  // References box
  s.addShape(pres.ShapeType.rect, { x: 0.25, y: 4.62, w: 9.5, h: 0.72, fill: { color: BG_MID }, line: { color: ACCENT, pt: 1 } });
  s.addText("REFERENCES: ", { x: 0.4, y: 4.65, w: 1.1, h: 0.25, fontSize: 9, bold: true, color: GOLD });
  s.addText("1. CDC Ebola Disease Basics – cdc.gov/ebola   2. WHO Ebola Disease Fact Sheet – who.int   3. WHO Diagnostic Testing Guidance Dec 2024   4. Mulangu S et al. PALM RCT. NEJM 2019   5. Henao-Restrepo AM et al. Lancet 2017 (Ervebo trial)   6. PMC Article: Clinical Manifestations & Lab Diagnosis of EVD (PMC7149730)", {
    x: 0.4, y: 4.9, w: 9.3, h: 0.4, fontSize: 8, color: "CCAAAA", wrap: true
  });
})();

// ════════════════════════════════════════════════════════════════════════════
// WRITE FILE
// ════════════════════════════════════════════════════════════════════════════
pres.writeFile({ fileName: "/home/daytona/workspace/ebola-ppt/Ebola_Virus_Disease_Pandemic_Module.pptx" })
  .then(() => console.log("SUCCESS: PPTX written"))
  .catch(e => { console.error("ERROR:", e); process.exit(1); });
Running Command

cd /home/daytona/workspace/ebola-ppt && node ebola.js 2>&1

Running Command

ls -lh /home/daytona/workspace/ebola-ppt/Ebola_Virus_Disease_Pandemic_Module.ppt…

Your Ebola Virus Disease presentation is ready!

Ebola Virus Disease Pandemic Module

Presentation · PPTX


What's inside (17 slides total)

#SlideContent
1Title SlideModule overview with all 8 section labels
2-3Clinical CasePatient vignette, symptom progression timeline, dry vs wet phase signs, haemorrhagic features, prognostic indicators
4-5Differential DiagnosisPriority-ranked table of 10+ mimics (malaria, typhoid, Lassa, Marburg, dengue, etc.) + diagnostic approach
6-7EpidemiologyKey stats cards, full outbreak timeline 1976-2026, transmission routes, reservoir hosts, R0, risk groups
8-9Pathogenesis5-step entry-to-organ-failure flow, virulence proteins (GP, VP35, VP24, VP40), immune evasion, DIC mechanism, organ damage
10-11Lab DiagnosisFull test comparison table (RT-PCR, ELISA, culture, RDT, EM), haematology & biochemistry findings, BSL-4 sample handling, discharge criteria
12-13TreatmentInmazeb™ & Ebanga™ drug cards (mechanism, route, FDA approval, PALM RCT data), supportive care protocol, investigational agents
14-15Prevention, Control & ManagementErvebo® & Zabdeno+Mvabea vaccine cards, PPE/IPC, contact tracing, safe burial, 7 WHO outbreak response pillars
16-17Summary6-cell visual summary grid + 8 critical learning points + full references
Design: Deep red/dark theme with gold accents on title/dark slides, clean off-white content slides, color-coded tables, status badge labels, and structured visual layouts throughout. Fully editable in PowerPoint or Google Slides.

Create

Asking for Preferences
Please describe what you'd like me to create! For example:
  • A study guide or notes document
  • A quiz or flashcards
  • A poster or infographic
  • A chart or diagram
  • Something on a completely different topic
Just type out what you have in mind and I'll get started right away!

Can you also add visual and change template from red and black to red and white or blue and white

Asking for Preferences
Running Command

cd /home/daytona/workspace/ebola-ppt && \ curl -sL --max-time 20 "https://upload…

Running Command

file /home/daytona/workspace/ebola-ppt/ebola_em.png

Running Command

cd /home/daytona/workspace/ebola-ppt && \ # Try CDC/WHO direct image URLs curl -…

Running Command

cd /home/daytona/workspace/ebola-ppt && \ ls -lh ebola_phil.jpg && \ # Try more …

Running Command

cd /home/daytona/workspace/ebola-ppt && \ # Get more PHIL images - PPE worker, t…

Running Command

cd /home/daytona/workspace/ebola-ppt && \ # Convert all valid jpegs to base64 fo…

Writing File

~/ebola-ppt/ebola_v2.js

const pptxgen = require("pptxgenjs");
const fs = require("fs");
const path = require("path");

const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Ebola Virus Disease – Pandemic Module";
pres.author = "Pandemic Module";

// ─── PALETTE: RED & WHITE ────────────────────────────────────────────────
const RED_DARK   = "B71C1C";   // deep red
const RED_MID    = "C62828";   // medium red
const RED_LIGHT  = "EF5350";   // bright red accent
const RED_PALE   = "FFEBEE";   // very light pink background
const RED_STRIP  = "D32F2F";   // header strip
const WHITE      = "FFFFFF";
const OFFWHITE   = "FAFAFA";
const GRAY_LT    = "F5F5F5";
const GRAY_MD    = "EEEEEE";
const GRAY_TXT   = "424242";
const DARK_TXT   = "212121";
const GOLD       = "F57F17";   // amber accent
const BLUE_ACC   = "1565C0";   // blue accent for contrast tags

// ─── LOAD IMAGES ─────────────────────────────────────────────────────────
function loadImg(filename) {
  const fp = path.join(__dirname, filename);
  if (!fs.existsSync(fp)) return null;
  const buf = fs.readFileSync(fp);
  if (buf[0] === 0xFF && buf[1] === 0xD8) {
    return "image/jpeg;base64," + buf.toString("base64");
  }
  return null;
}

const IMG_VIRUS   = loadImg("ebola_phil.jpg");   // Ebola virus EM
const IMG_KIT     = loadImg("ebola_kit.jpg");    // lab / PCR kit
const IMG_PPE     = loadImg("ebola_ppe.jpg");    // PPE healthcare worker
const IMG_PPE2    = loadImg("ebola_ppe2.jpg");   // PPE 2
const IMG_LAB     = loadImg("ebola_lab.jpg");    // laboratory

// ─── HELPERS ─────────────────────────────────────────────────────────────
function bgWhite(slide) { slide.background = { color: WHITE }; }
function bgPale(slide)  { slide.background = { color: RED_PALE }; }

// Red top header bar with white title
function addHeader(slide, title, subtitle) {
  // Full-width red bar
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 10, h: 1.08,
    fill: { color: RED_DARK }, line: { color: RED_DARK }
  });
  // Left accent stripe
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 0.18, h: 1.08,
    fill: { color: RED_LIGHT }, line: { color: RED_LIGHT }
  });
  slide.addText(title, {
    x: 0.3, y: 0.09, w: 9.4, h: 0.56,
    fontSize: 21, bold: true, color: WHITE, valign: "middle", margin: 0, fontFace: "Calibri"
  });
  if (subtitle) {
    slide.addText(subtitle, {
      x: 0.3, y: 0.65, w: 9.4, h: 0.33,
      fontSize: 11, italic: true, color: "FFCDD2", valign: "middle", margin: 0, fontFace: "Calibri"
    });
  }
}

// Thin red divider line
function divider(slide, y, x = 0.25, w = 9.5) {
  slide.addShape(pres.ShapeType.line, {
    x, y, w, h: 0,
    line: { color: RED_MID, pt: 1.5 }
  });
}

// Bullet text box (white bg, red border)
function bBox(slide, items, x, y, w, h, fs = 11) {
  const arr = items.map((t, i) => ({
    text: t,
    options: {
      bullet: t.startsWith("  ") ? { indent: 20 } : (t.startsWith("•") ? false : { type: "bullet" }),
      breakLine: i < items.length - 1,
      fontSize: t.startsWith("  ") ? fs - 0.5 : fs,
      color: t.startsWith("  ") ? GRAY_TXT : DARK_TXT,
      bold: (!t.startsWith("  ") && !t.startsWith("•") && t.endsWith(":")),
      paraSpaceAfter: t === "" ? 4 : 2
    }
  }));
  slide.addText(arr, {
    x, y, w, h,
    fontFace: "Calibri",
    valign: "top",
    fill: { color: WHITE },
    line: { color: "FFCDD2", pt: 1 },
    shadow: { type: "outer", blur: 3, offset: 2, angle: 45, color: "DDDDDD", opacity: 0.3 }
  });
}

// Section heading text
function sHead(slide, text, x, y, w) {
  slide.addShape(pres.ShapeType.rect, {
    x, y, w, h: 0.32,
    fill: { color: RED_PALE }, line: { color: RED_LIGHT, pt: 1 }
  });
  slide.addText(text, {
    x: x + 0.12, y, w: w - 0.15, h: 0.32,
    fontSize: 11.5, bold: true, color: RED_DARK, valign: "middle", margin: 0, fontFace: "Calibri"
  });
}

// Footer
function footer(slide, src = "Source: CDC (cdc.gov/ebola) | WHO Ebola Fact Sheet") {
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 5.33, w: 10, h: 0.29,
    fill: { color: RED_DARK }, line: { color: RED_DARK }
  });
  slide.addText(src, {
    x: 0.3, y: 5.34, w: 9.4, h: 0.27,
    fontSize: 7.5, color: "FFCDD2", italic: true, valign: "middle", margin: 0, fontFace: "Calibri"
  });
}

// Info card
function infoCard(slide, icon, label, value, x, y, w = 2.2, h = 1.05) {
  slide.addShape(pres.ShapeType.rect, {
    x, y, w, h,
    fill: { color: WHITE }, line: { color: RED_MID, pt: 1.5 }
  });
  slide.addShape(pres.ShapeType.rect, {
    x, y, w, h: 0.38,
    fill: { color: RED_DARK }, line: { color: RED_DARK }
  });
  slide.addText(icon + "  " + label, {
    x: x + 0.05, y, w: w - 0.1, h: 0.38,
    fontSize: 10, bold: true, color: WHITE, valign: "middle", align: "center", margin: 0
  });
  slide.addText(value, {
    x: x + 0.05, y: y + 0.4, w: w - 0.1, h: 0.6,
    fontSize: 12, bold: true, color: RED_DARK, valign: "middle", align: "center"
  });
}

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 1 – TITLE
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: WHITE };

  // Left red block
  s.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 5.8, h: 5.625,
    fill: { color: RED_DARK }, line: { color: RED_DARK }
  });
  // Diagonal accent
  s.addShape(pres.ShapeType.rect, {
    x: 5.6, y: 0, w: 0.4, h: 5.625,
    fill: { color: RED_LIGHT }, line: { color: RED_LIGHT }
  });

  // Module pill
  s.addShape(pres.ShapeType.rect, {
    x: 0.4, y: 0.45, w: 2.5, h: 0.35,
    fill: { color: RED_LIGHT }, line: { color: RED_LIGHT }
  });
  s.addText("PANDEMIC MODULE", {
    x: 0.4, y: 0.45, w: 2.5, h: 0.35,
    fontSize: 9, bold: true, color: WHITE, align: "center", valign: "middle", charSpacing: 3
  });

  s.addText("EBOLA", {
    x: 0.4, y: 0.95, w: 5.0, h: 1.3,
    fontSize: 64, bold: true, color: WHITE, fontFace: "Calibri"
  });
  s.addText("VIRUS DISEASE", {
    x: 0.4, y: 2.1, w: 5.1, h: 0.75,
    fontSize: 28, bold: true, color: "FFCDD2", fontFace: "Calibri"
  });
  s.addShape(pres.ShapeType.line, {
    x: 0.4, y: 2.95, w: 4.8, h: 0, line: { color: RED_LIGHT, pt: 2 }
  });
  s.addText("A Comprehensive Clinical & Public Health Overview", {
    x: 0.4, y: 3.05, w: 5.0, h: 0.42,
    fontSize: 13, italic: true, color: "FFCDD2", fontFace: "Calibri"
  });

  // Right side: topics list
  s.addText("CONTENTS", {
    x: 6.1, y: 0.3, w: 3.7, h: 0.35,
    fontSize: 11, bold: true, color: RED_DARK, charSpacing: 4, fontFace: "Calibri"
  });
  divider(s, 0.68, 6.1, 3.7);

  const topics = [
    "01  Clinical Case",
    "02  Differential Diagnosis",
    "03  Epidemiology",
    "04  Pathogenesis",
    "05  Lab Diagnosis",
    "06  Treatment",
    "07  Prevention & Control",
    "08  Summary",
  ];
  topics.forEach((t, i) => {
    const isBold = false;
    s.addShape(pres.ShapeType.rect, {
      x: 6.1, y: 0.75 + i * 0.59, w: 0.32, h: 0.42,
      fill: { color: i % 2 === 0 ? RED_DARK : RED_LIGHT }, line: { color: i % 2 === 0 ? RED_DARK : RED_LIGHT }
    });
    s.addText(`${String(i+1).padStart(2,"0")}`, {
      x: 6.1, y: 0.75 + i * 0.59, w: 0.32, h: 0.42,
      fontSize: 10, bold: true, color: WHITE, align: "center", valign: "middle"
    });
    s.addText(t.replace(/^\d+\s+/, ""), {
      x: 6.46, y: 0.75 + i * 0.59, w: 3.3, h: 0.42,
      fontSize: 12, color: DARK_TXT, valign: "middle", fontFace: "Calibri"
    });
  });

  s.addText("Reference: www.cdc.gov/ebola  |  WHO Fact Sheet  |  NEJM PALM RCT", {
    x: 0.4, y: 5.05, w: 9.2, h: 0.28,
    fontSize: 8, italic: true, color: "FFCDD2", fontFace: "Calibri"
  });
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 2 – CLINICAL CASE Pt 1
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  bgWhite(s);
  addHeader(s, "01 | CLINICAL CASE", "Real-world patient presentation of Ebola Virus Disease");

  // Vignette box
  s.addShape(pres.ShapeType.rect, {
    x: 0.25, y: 1.15, w: 9.5, h: 1.28,
    fill: { color: RED_PALE }, line: { color: RED_MID, pt: 1.5 }
  });
  s.addShape(pres.ShapeType.rect, {
    x: 0.25, y: 1.15, w: 0.18, h: 1.28,
    fill: { color: RED_DARK }, line: { color: RED_DARK }
  });
  s.addText([
    { text: "CASE VIGNETTE  ", options: { bold: true, color: RED_DARK, fontSize: 11.5 } },
    { text: "A 32-year-old male healthcare worker presents to a referral hospital in Kikwit, DRC with a 4-day history of sudden-onset high-grade fever (39.8°C), severe headache, myalgia, and fatigue. He reports caring for an Ebola-confirmed patient 10 days prior without adequate PPE. On day 6, he develops profuse watery diarrhea, vomiting, abdominal pain, and conjunctival hemorrhage. BP 90/60 mmHg. Immediate isolation is initiated.", options: { fontSize: 11, color: GRAY_TXT } }
  ], { x: 0.55, y: 1.18, w: 9.1, h: 1.22, valign: "top", fontFace: "Calibri" });

  // Timeline label
  sHead(s, "SYMPTOM PROGRESSION TIMELINE", 0.25, 2.52, 9.5);

  const phases = [
    { day: "Day 0", label: "Exposure\n(No symptoms)", color: "78909C", icon: "☠" },
    { day: "Day 2–8", label: "Incubation\n(Asymptomatic)", color: "546E7A", icon: "⏳" },
    { day: "Day 4–8\n'DRY PHASE'", label: "Fever, Headache,\nMyalgia, Fatigue", color: RED_MID, icon: "🌡" },
    { day: "Day 7–12\n'WET PHASE'", label: "Diarrhoea, Vomiting,\nHaemorrhage, Shock", color: RED_DARK, icon: "🩸" },
    { day: "Day 10–16", label: "OUTCOME:\nRecovery or Death\nCFR 25–90%", color: "B71C1C", icon: "⚕" },
  ];

  phases.forEach((p, i) => {
    const x = 0.25 + i * 1.9;
    s.addShape(pres.ShapeType.rect, {
      x, y: 2.9, w: 1.72, h: 2.2,
      fill: { color: WHITE }, line: { color: p.color, pt: 2 }
    });
    s.addShape(pres.ShapeType.rect, {
      x, y: 2.9, w: 1.72, h: 0.52,
      fill: { color: p.color }, line: { color: p.color }
    });
    s.addText(p.icon + "  " + p.day.split("\n")[0], {
      x, y: 2.9, w: 1.72, h: 0.26, fontSize: 9.5, bold: true, color: WHITE, align: "center", valign: "middle"
    });
    if (p.day.includes("\n")) {
      s.addText(p.day.split("\n")[1], {
        x, y: 3.16, w: 1.72, h: 0.24, fontSize: 8.5, bold: true, color: "FFCDD2", align: "center", valign: "middle"
      });
    }
    s.addText(p.label, {
      x: x + 0.07, y: 3.46, w: 1.6, h: 1.55,
      fontSize: 10, color: DARK_TXT, wrap: true, valign: "top", align: "center", fontFace: "Calibri"
    });
    if (i < phases.length - 1) {
      s.addShape(pres.ShapeType.line, {
        x: x + 1.74, y: 4.0, w: 0.14, h: 0,
        line: { color: RED_LIGHT, pt: 2 }
      });
    }
  });

  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 3 – CLINICAL CASE Pt 2
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  bgPale(s);
  addHeader(s, "01 | CLINICAL CASE (cont.)", "Signs, Symptoms, Haemorrhagic Features & Prognosis");
  divider(s, 1.15);

  // Image panel
  if (IMG_VIRUS) {
    s.addImage({ data: IMG_VIRUS, x: 7.3, y: 1.2, w: 2.45, h: 1.95 });
    s.addShape(pres.ShapeType.rect, {
      x: 7.3, y: 3.15, w: 2.45, h: 0.28,
      fill: { color: RED_DARK }, line: { color: RED_DARK }
    });
    s.addText("Ebola virus particles (CDC/PHIL)", {
      x: 7.3, y: 3.15, w: 2.45, h: 0.28, fontSize: 7.5, color: WHITE, align: "center", valign: "middle"
    });
  }

  const imgW = IMG_VIRUS ? 4.75 : 9.5;

  const left = [
    "EARLY — Dry Phase (Days 1–5):",
    "  • Sudden high-grade fever (>38.6°C)",
    "  • Severe headache, myalgia, arthralgia",
    "  • Extreme fatigue and weakness",
    "  • Sore throat, retrosternal chest pain",
    "  • Anorexia, nausea (no vomiting yet)",
    "",
    "LATE — Wet Phase (Days 6–12):",
    "  • Profuse watery diarrhoea (>10 L/day)",
    "  • Vomiting, severe abdominal cramping",
    "  • Maculopapular rash on trunk (day 5–7)",
    "  • Hiccups (poor prognostic sign)",
    "  • Impaired kidney & liver function",
  ];

  const right = [
    "HAEMORRHAGIC FEATURES (<50% cases):",
    "  • Conjunctival injection/haemorrhage",
    "  • Petechiae, ecchymoses",
    "  • Melena, haematemesis",
    "  • Bleeding from IV sites, gums",
    "  • Internal haemorrhage",
    "",
    "NEUROLOGICAL:",
    "  • Confusion, delirium (severe cases)",
    "  • Seizures",
    "",
    "POOR PROGNOSIS MARKERS:",
    "  • High viral load at admission",
    "  • Early onset confusion / hiccups",
    "  • Bleeding complications",
    "  • CFR: 25–90% (avg ~50%)",
  ];

  bBox(s, left, 0.25, 1.22, imgW / 2 - 0.15, 3.9, 10.5);
  bBox(s, right, imgW / 2 + 0.15, 1.22, imgW / 2 - 0.1, 3.9, 10.5);

  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 4 – DIFFERENTIAL DIAGNOSIS Pt 1
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  bgWhite(s);
  addHeader(s, "02 | DIFFERENTIAL DIAGNOSIS", "Diseases that mimic Ebola – rule out before confirming EVD");
  divider(s, 1.15);

  s.addText("⚠  Key principle: ISOLATE FIRST, then investigate. Do NOT delay isolation to complete workup.", {
    x: 0.25, y: 1.2, w: 9.5, h: 0.32,
    fontSize: 11, italic: true, bold: true, color: RED_DARK, fontFace: "Calibri"
  });

  const diffs = [
    { disease: "Malaria",                 features: "Most common mimicker; fever, headache, myalgia; do RDT/blood film urgently",    priority: "HIGH" },
    { disease: "Typhoid Fever",           features: "Sustained fever, rose spots, hepatosplenomegaly; Widal + blood culture",        priority: "HIGH" },
    { disease: "Lassa Fever",             features: "Haemorrhagic fever, facial oedema, deafness; RT-PCR specific",                  priority: "HIGH" },
    { disease: "Marburg Virus Disease",   features: "Clinically identical to Ebola; only PCR differentiates",                       priority: "HIGH" },
    { disease: "Dengue Fever",            features: "Thrombocytopenia, bone pain, tourniquet test positive; NS1 antigen",            priority: "MED"  },
    { disease: "Yellow Fever",            features: "Jaundice, haemorrhage, travel/vaccination hx; serology",                       priority: "MED"  },
    { disease: "Meningococcal disease",   features: "Purpuric rash, meningism, septicaemia; CSF culture",                           priority: "MED"  },
    { disease: "Septicaemia / Sepsis",    features: "Any bacterial focus can mimic; blood cultures, procalcitonin",                 priority: "MED"  },
  ];

  const colX = [0.25, 2.2,  7.58];
  const colW = [1.9,  5.33, 1.0 ];
  const heads = ["DISEASE", "DISTINGUISHING FEATURES", "PRIORITY"];

  heads.forEach((h, i) => {
    s.addShape(pres.ShapeType.rect, { x: colX[i], y: 1.58, w: colW[i], h: 0.32, fill: { color: RED_DARK }, line: { color: RED_DARK } });
    s.addText(h, { x: colX[i], y: 1.58, w: colW[i], h: 0.32, fontSize: 9.5, bold: true, color: WHITE, align: "center", valign: "middle", fontFace: "Calibri" });
  });

  diffs.forEach((d, i) => {
    const ry = 1.93 + i * 0.43;
    const bg = i % 2 === 0 ? GRAY_LT : WHITE;
    colX.forEach((x, ci) => {
      s.addShape(pres.ShapeType.rect, { x, y: ry, w: colW[ci], h: 0.41, fill: { color: bg }, line: { color: GRAY_MD, pt: 0.5 } });
    });
    s.addText(d.disease, { x: colX[0], y: ry, w: colW[0], h: 0.41, fontSize: 10, bold: true, color: RED_DARK, align: "center", valign: "middle", fontFace: "Calibri" });
    s.addText(d.features, { x: colX[1] + 0.08, y: ry, w: colW[1] - 0.1, h: 0.41, fontSize: 9.5, color: GRAY_TXT, valign: "middle", italic: false, fontFace: "Calibri" });
    const pc = d.priority === "HIGH" ? RED_DARK : GOLD;
    s.addShape(pres.ShapeType.rect, { x: colX[2] + 0.08, y: ry + 0.06, w: 0.85, h: 0.28, fill: { color: pc }, line: { color: pc } });
    s.addText(d.priority, { x: colX[2] + 0.08, y: ry + 0.06, w: 0.85, h: 0.28, fontSize: 9, bold: true, color: WHITE, align: "center", valign: "middle" });
  });

  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 5 – DIFFERENTIAL DIAGNOSIS Pt 2
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  bgPale(s);
  addHeader(s, "02 | DIFFERENTIAL DIAGNOSIS (cont.)", "Additional conditions & structured diagnostic approach");
  divider(s, 1.15);

  const left = [
    "ADDITIONAL DIFFERENTIALS:",
    "  • Crimean-Congo Haemorrhagic Fever",
    "    (tick exposure, haemorrhage, Balkans/Africa)",
    "  • Rift Valley Fever (animal contact)",
    "  • Viral hepatitis (jaundice dominant)",
    "  • Shigellosis / severe gastroenteritis",
    "  • Rickettsial diseases (rash, eschar)",
    "  • COVID-19 (respiratory > GI features)",
    "  • Monkeypox / Mpox (vesicular rash)",
    "  • Hantavirus (pulmonary/renal, rodent exposure)",
    "",
    "LOOK FOR EXPOSURE HISTORY:",
    "  • Travel to sub-Saharan Africa",
    "  • Contact with confirmed EVD case",
    "  • Handling of bushmeat / bats",
    "  • Attending funeral without PPE",
  ];

  const right = [
    "DIAGNOSTIC ALGORITHM:",
    "  1. ASSESS risk: travel + exposure hx",
    "  2. ISOLATE immediately if EVD suspected",
    "  3. Notify infection control team",
    "  4. Take specimens with full PPE",
    "  5. RT-PCR for Ebola (gold standard)",
    "  6. Malaria RDT/film (do in parallel)",
    "  7. FBC, LFT, RFT, coagulation screen",
    "  8. Blood culture, Widal, dengue NS1",
    "",
    "INTERPRETATION TIPS:",
    "  • Leukopenia early → think viral (EVD)",
    "  • Leukocytosis → bacterial sepsis",
    "  • ↑AST >> ALT → hepatic EVD pattern",
    "  • DIC signs → EVD / sepsis / CCHF",
    "  ⚠ Lab work INSIDE isolation only",
  ];

  bBox(s, left, 0.25, 1.22, 4.7, 3.9, 10.5);
  bBox(s, right, 5.05, 1.22, 4.7, 3.9, 10.5);

  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 6 – EPIDEMIOLOGY Pt 1
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  bgWhite(s);
  addHeader(s, "03 | EPIDEMIOLOGY", "Global distribution, outbreaks & transmission dynamics");
  divider(s, 1.1);

  // Stat cards
  const stats = [
    { icon: "🦠", label: "DISCOVERED", value: "1976, DRC" },
    { icon: "🌍", label: "REGION", value: "Sub-Saharan Africa" },
    { icon: "💀", label: "CASE FATALITY", value: "25 – 90%" },
    { icon: "⏱", label: "INCUBATION", value: "2–21 days" },
  ];
  stats.forEach((st, i) => {
    infoCard(s, st.icon, st.label, st.value, 0.25 + i * 2.4, 1.17);
  });

  sHead(s, "MAJOR OUTBREAKS (1976 – 2026)", 0.25, 2.3, 9.5);

  const outbreaks = [
    { year: "1976",    location: "DRC / Sudan",                   cases: "601",    cfr: "53–88%", note: "First identified outbreak – 2 simultaneous events" },
    { year: "1995",    location: "Kikwit, DRC",                   cases: "315",    cfr: "81%",    note: "Urban spread; international alarm" },
    { year: "2000-01", location: "Uganda",                        cases: "425",    cfr: "53%",    note: "Sudan species; largest Uganda outbreak at the time" },
    { year: "2014-16", location: "W. Africa (Guinea/SL/Liberia)", cases: "28,616", cfr: "40%",    note: "Largest outbreak in history; international emergency" },
    { year: "2018-20", location: "North Kivu, DRC",               cases: "3,481",  cfr: "66%",    note: "2nd largest; conflict zone; vaccine deployed" },
    { year: "2022",    location: "Uganda",                        cases: "164",    cfr: "55%",    note: "Sudan species; no approved vaccine available" },
    { year: "2025-26", location: "DRC / Uganda (Bundibugyo sp.)", cases: "Active", cfr: "~40%",   note: "⚠ Active outbreak – IHR Emergency declared May 2026" },
  ];

  const ths = ["Year", "Location", "Cases", "CFR", "Note"];
  const tws = [0.7, 2.85, 0.82, 0.72, 4.56];
  const txs = [0.25, 0.98, 3.86, 4.71, 5.46];

  ths.forEach((h, i) => {
    s.addShape(pres.ShapeType.rect, { x: txs[i], y: 2.65, w: tws[i], h: 0.3, fill: { color: RED_MID }, line: { color: RED_MID } });
    s.addText(h, { x: txs[i], y: 2.65, w: tws[i], h: 0.3, fontSize: 9.5, bold: true, color: WHITE, align: "center", valign: "middle", fontFace: "Calibri" });
  });

  outbreaks.forEach((o, i) => {
    const ry = 2.98 + i * 0.34;
    const bg = i === 6 ? "FFF0F0" : (i % 2 === 0 ? GRAY_LT : WHITE);
    txs.forEach((x, ci) => {
      s.addShape(pres.ShapeType.rect, { x, y: ry, w: tws[ci], h: 0.32, fill: { color: bg }, line: { color: GRAY_MD, pt: 0.5 } });
    });
    const vals = [o.year, o.location, o.cases, o.cfr, o.note];
    vals.forEach((v, ci) => {
      s.addText(v, { x: txs[ci] + (ci === 4 ? 0.06 : 0), y: ry, w: tws[ci], h: 0.32, fontSize: ci === 4 ? 8.5 : 9.5, color: ci === 4 ? GRAY_TXT : DARK_TXT, align: ci === 4 ? "left" : "center", valign: "middle", italic: ci === 4, fontFace: "Calibri" });
    });
  });

  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 7 – EPIDEMIOLOGY Pt 2
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  bgPale(s);
  addHeader(s, "03 | EPIDEMIOLOGY (cont.)", "Transmission, reservoir hosts & high-risk groups");
  divider(s, 1.15);

  if (IMG_PPE2) {
    s.addImage({ data: IMG_PPE2, x: 7.2, y: 1.2, w: 2.55, h: 2.0 });
    s.addShape(pres.ShapeType.rect, { x: 7.2, y: 3.2, w: 2.55, h: 0.26, fill: { color: RED_DARK }, line: { color: RED_DARK } });
    s.addText("Healthcare worker – PPE (CDC/PHIL)", { x: 7.2, y: 3.2, w: 2.55, h: 0.26, fontSize: 7, color: WHITE, align: "center", valign: "middle" });
  }

  const left = [
    "HOW EBOLA SPREADS:",
    "  • Direct contact with blood/body fluids",
    "    of infected persons (alive or dead)",
    "  • Contact with contaminated objects",
    "    (needles, PPE, bedding, surfaces)",
    "  • Unsafe burial/funeral practices",
    "  • Sexual contact — virus persists in",
    "    semen up to 500+ days post-recovery",
    "  • Zoonotic spillover: bats, NHP",
    "",
    "NOT spread by:",
    "  • Air / aerosols (normal conditions)",
    "  • Food or water",
    "  • Mosquitoes or insects",
    "  • Casual contact / proximity",
  ];

  const right = [
    "NATURAL RESERVOIR (Probable):",
    "  • Fruit bats – Pteropodidae family",
    "    - Hypsignathus monstrosus",
    "    - Epomops franqueti",
    "    - Myonycteris torquata",
    "  • Bats show seropositivity without disease",
    "",
    "HIGH-RISK GROUPS:",
    "  • Healthcare workers (HCW) – highest risk",
    "  • Family caregivers in households",
    "  • Burial ceremony participants",
    "  • Laboratory personnel",
    "  • Hunters / bushmeat handlers",
    "",
    "R₀ (Basic Reproduction Number): 1.5 – 2.5",
    "  (vs COVID ~2-3, measles ~15)",
  ];

  bBox(s, left, 0.25, 1.22, 4.7, 3.9, 10.5);
  bBox(s, right, 5.05, 1.22, 2.0, 3.9, 10.5);

  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 8 – PATHOGENESIS Pt 1
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  bgWhite(s);
  addHeader(s, "04 | PATHOGENESIS", "Viral entry, replication & organ-level damage cascade");
  divider(s, 1.1);

  sHead(s, "STEP-BY-STEP PATHOGENIC CASCADE", 0.25, 1.15, 9.5);

  const steps = [
    { n: "1", title: "ENTRY", body: "GP protein binds NPC1 receptor on macrophages, dendritic cells via endosomal route" },
    { n: "2", title: "REPLICATION", body: "Rapid viral replication; VP35 & VP24 block interferon → innate immunity disabled" },
    { n: "3", title: "SYSTEMIC SPREAD", body: "Virus disseminates via lymphatics to liver, spleen, adrenals, kidney, gonads" },
    { n: "4", title: "CYTOKINE STORM", body: "↑↑ TNF-α, IL-6, IL-8, MCP-1 → vascular endothelial damage, massive fluid leak" },
    { n: "5", title: "ORGAN FAILURE", body: "Hepatic necrosis, adrenal failure, DIC, hypovolaemic shock, multi-organ failure" },
  ];

  steps.forEach((st, i) => {
    const x = 0.2 + i * 1.92;
    const col = [RED_LIGHT, RED_MID, RED_DARK, "8B0000", "4A0000"][i];
    s.addShape(pres.ShapeType.rect, { x, y: 1.52, w: 1.75, h: 0.42, fill: { color: col }, line: { color: col } });
    s.addText(`${st.n}. ${st.title}`, { x, y: 1.52, w: 1.75, h: 0.42, fontSize: 10, bold: true, color: WHITE, align: "center", valign: "middle" });
    s.addShape(pres.ShapeType.rect, { x, y: 1.97, w: 1.75, h: 1.48, fill: { color: i % 2 === 0 ? GRAY_LT : WHITE }, line: { color: "FFCDD2", pt: 1 } });
    s.addText(st.body, { x: x + 0.07, y: 2.0, w: 1.63, h: 1.42, fontSize: 10, color: DARK_TXT, valign: "top", wrap: true, fontFace: "Calibri" });
    if (i < steps.length - 1) {
      s.addShape(pres.ShapeType.line, { x: x + 1.77, y: 2.18, w: 0.13, h: 0, line: { color: RED_LIGHT, pt: 1.5 } });
    }
  });

  sHead(s, "KEY VIRULENCE PROTEINS", 0.25, 3.54, 9.5);

  const proteins = [
    { p: "Glycoprotein (GP)", role: "Cell entry via NPC1; shed form (sGP) decoys neutralising antibodies → immune evasion" },
    { p: "VP35", role: "Blocks IFN-β induction → disables innate immune response" },
    { p: "VP24", role: "Blocks STAT1 nuclear import → prevents interferon signalling" },
    { p: "VP40 (Matrix)", role: "Drives budding of new viral particles from host cell surface" },
    { p: "L (RdRp)", role: "RNA-dependent RNA polymerase – replicates negative-sense ssRNA genome" },
  ];

  proteins.forEach((p, i) => {
    const ry = 3.9 + i * 0.29;
    s.addShape(pres.ShapeType.rect, { x: 0.25, y: ry, w: 2.2, h: 0.27, fill: { color: i % 2 === 0 ? RED_PALE : WHITE }, line: { color: GRAY_MD, pt: 0.5 } });
    s.addShape(pres.ShapeType.rect, { x: 2.48, y: ry, w: 7.27, h: 0.27, fill: { color: i % 2 === 0 ? RED_PALE : WHITE }, line: { color: GRAY_MD, pt: 0.5 } });
    s.addText(p.p, { x: 0.3, y: ry, w: 2.1, h: 0.27, fontSize: 9.5, bold: true, color: RED_DARK, valign: "middle", fontFace: "Calibri" });
    s.addText(p.role, { x: 2.55, y: ry, w: 7.15, h: 0.27, fontSize: 9.5, color: GRAY_TXT, valign: "middle", fontFace: "Calibri" });
  });

  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 9 – PATHOGENESIS Pt 2
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  bgPale(s);
  addHeader(s, "04 | PATHOGENESIS (cont.)", "Immune evasion, coagulopathy (DIC) & organ-specific damage");
  divider(s, 1.15);

  const left = [
    "IMMUNE SYSTEM SUBVERSION:",
    "  • VP35 blocks IFN-β induction",
    "  • VP24 blocks JAK-STAT signalling",
    "  • sGP absorbs/neutralises antibodies",
    "  • Massive dendritic cell dysfunction",
    "    → no T-cell priming → lymphopenia",
    "  • NK cell impairment",
    "  • Monocyte/macrophage dysregulation",
    "",
    "COAGULOPATHY — DIC:",
    "  • Tissue factor upregulation on monocytes",
    "  • Platelet activation then depletion",
    "  • ↑ FDP, ↓ fibrinogen, ↑ PT/aPTT",
    "  • Microthrombi + bleeding simultaneously",
    "  • Endothelial disruption → 3rd spacing",
  ];

  const right = [
    "ORGAN-SPECIFIC DAMAGE:",
    "",
    "  LIVER:",
    "  • Kupffer cell infection → hepatocyte",
    "    necrosis → ↑↑ AST >> ALT",
    "  • Impaired clotting factor synthesis",
    "",
    "  ADRENAL GLANDS:",
    "  • Cortical necrosis → adrenal insufficiency",
    "  • Hypotension, circulatory shock",
    "",
    "  KIDNEYS:",
    "  • Proteinuria, AKI, oliguria",
    "",
    "  VASCULAR ENDOTHELIUM:",
    "  • Permeability ↑ → pulmonary oedema,",
    "    hypovolaemic shock, circulatory collapse",
  ];

  bBox(s, left, 0.25, 1.22, 4.7, 3.9, 10.5);
  bBox(s, right, 5.05, 1.22, 4.7, 3.9, 10.5);

  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 10 – LAB DIAGNOSIS Pt 1
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  bgWhite(s);
  addHeader(s, "05 | LAB DIAGNOSIS", "Confirming Ebola – tests, biosafety & interpretation");
  divider(s, 1.1);

  // Warning banner
  s.addShape(pres.ShapeType.rect, { x: 0.25, y: 1.15, w: 9.5, h: 0.33, fill: { color: RED_DARK }, line: { color: RED_DARK } });
  s.addText("⚠  BIOSAFETY: All suspected Ebola samples require BSL-4 precautions. Inactivate samples before transfer outside BSL-4 facilities.", {
    x: 0.35, y: 1.15, w: 9.3, h: 0.33, fontSize: 10.5, bold: true, color: WHITE, valign: "middle", fontFace: "Calibri"
  });

  const tests = [
    { test: "RT-PCR (Real-Time)", type: "Molecular", timing: "Days 3+", notes: "Gold standard. Detects viral RNA. Results in 24-48h. WHO/CDC first-line test.", status: "GOLD STD" },
    { test: "ELISA Antigen Capture", type: "Immunological", timing: "Days 3-7", notes: "Detects NP/GP antigen. High sensitivity in acute phase.", status: "CONFIRM" },
    { test: "IgM / IgG ELISA", type: "Serology", timing: "Days 8+", notes: "IgM rises early; IgG persists. Serosurveys & survivor studies.", status: "CONFIRM" },
    { test: "Rapid Antigen Test (RDT)", type: "Point-of-Care", timing: "Days 3–10", notes: "Field use in outbreaks. Less sensitive than PCR. Triage tool only.", status: "SCREEN" },
    { test: "Virus Isolation / Culture", type: "Virology", timing: "Days 1+", notes: "BSL-4 reference labs only. Not routine. Definitive proof.", status: "RESEARCH" },
    { test: "Electron Microscopy", type: "Morphology", timing: "Any", notes: "'Shepherd's crook' filamentous morphology. Reference labs only.", status: "RESEARCH" },
  ];

  const ths = ["TEST", "TYPE", "TIMING", "NOTES / DETAILS", "ROLE"];
  const tws = [2.0, 1.3, 0.85, 4.3, 1.0];
  const txs = [0.25, 2.28, 3.61, 4.49, 8.82];

  ths.forEach((h, i) => {
    s.addShape(pres.ShapeType.rect, { x: txs[i], y: 1.52, w: tws[i], h: 0.3, fill: { color: RED_MID }, line: { color: RED_MID } });
    s.addText(h, { x: txs[i], y: 1.52, w: tws[i], h: 0.3, fontSize: 9.5, bold: true, color: WHITE, align: "center", valign: "middle", fontFace: "Calibri" });
  });

  tests.forEach((t, i) => {
    const ry = 1.85 + i * 0.52;
    const bg = i % 2 === 0 ? GRAY_LT : WHITE;
    txs.forEach((x, ci) => {
      s.addShape(pres.ShapeType.rect, { x, y: ry, w: tws[ci], h: 0.49, fill: { color: bg }, line: { color: GRAY_MD, pt: 0.5 } });
    });
    const sc = t.status === "GOLD STD" ? RED_DARK : t.status === "CONFIRM" ? BLUE_ACC : t.status === "SCREEN" ? GOLD : "757575";
    const vals = [t.test, t.type, t.timing, t.notes, t.status];
    vals.forEach((v, ci) => {
      if (ci === 4) {
        s.addShape(pres.ShapeType.rect, { x: txs[ci] + 0.07, y: ry + 0.08, w: tws[ci] - 0.14, h: 0.32, fill: { color: sc }, line: { color: sc } });
        s.addText(v, { x: txs[ci] + 0.07, y: ry + 0.08, w: tws[ci] - 0.14, h: 0.32, fontSize: 8, bold: true, color: WHITE, align: "center", valign: "middle" });
      } else {
        s.addText(v, { x: txs[ci] + (ci === 3 ? 0.07 : 0), y: ry, w: tws[ci], h: 0.49, fontSize: ci === 3 ? 9 : 10, color: ci === 0 ? RED_DARK : GRAY_TXT, align: ci === 3 ? "left" : "center", valign: "middle", bold: ci === 0, italic: ci === 3, fontFace: "Calibri" });
      }
    });
  });

  if (IMG_LAB) {
    s.addImage({ data: IMG_LAB, x: 0.25, y: 4.95, w: 2.0, h: 0.28 });
  }
  footer(s, "Source: WHO Diagnostic Testing Guidance Dec 2024 | CDC | cdc.gov/ebola");
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 11 – LAB DIAGNOSIS Pt 2
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  bgPale(s);
  addHeader(s, "05 | LAB DIAGNOSIS (cont.)", "Haematology, biochemistry, coagulation & sample handling");
  divider(s, 1.15);

  if (IMG_KIT) {
    s.addImage({ data: IMG_KIT, x: 7.2, y: 1.2, w: 2.55, h: 2.1 });
    s.addShape(pres.ShapeType.rect, { x: 7.2, y: 3.3, w: 2.55, h: 0.26, fill: { color: RED_DARK }, line: { color: RED_DARK } });
    s.addText("PCR / Lab test kit (CDC/PHIL)", { x: 7.2, y: 3.3, w: 2.55, h: 0.26, fontSize: 7, color: WHITE, align: "center", valign: "middle" });
  }

  const left = [
    "HAEMATOLOGICAL FINDINGS:",
    "  • Leukopenia early → leukocytosis late",
    "  • Thrombocytopenia (often <50,000/µL)",
    "  • Atypical lymphocytes, band cells",
    "  • Neutrophilia with left shift (severe)",
    "",
    "BIOCHEMISTRY:",
    "  • ↑↑ AST >> ALT (hepatic injury)",
    "  • ↑ Creatinine, ↑ BUN (AKI)",
    "  • ↓ Albumin, ↓ total protein",
    "  • ↑ CRP, ↑ ferritin (inflammatory)",
    "  • Hyponatraemia, hypokalaemia",
    "",
    "COAGULATION PANEL:",
    "  • ↑ PT, ↑ aPTT",
    "  • ↑ D-dimer, ↑ FDP, ↓ fibrinogen → DIC",
  ];

  const right = [
    "SAMPLE COLLECTION (WHO/CDC 2024):",
    "  • Preferred: whole blood (EDTA)",
    "    or plasma for molecular testing",
    "  • Avoid oral/buccal swabs in live patients",
    "  • Chemical inactivation before transport",
    "  • Triple packaging per IATA P650",
    "  • Transport to national reference/BSL-4 lab",
    "",
    "TESTING TIMELINE:",
    "  • Days 1-3: May be PCR negative (low VL)",
    "  • Days 3-7: Best window for PCR/antigen",
    "  • Days 8+:  Serology (IgM/IgG) rises",
    "  • Repeat PCR if initial negative + symptoms",
    "",
    "DISCHARGE CRITERIA (WHO):",
    "  • 2× negative RT-PCR ≥48 h apart",
    "  • Clinically asymptomatic before discharge",
  ];

  bBox(s, left, 0.25, 1.22, 4.7, 3.9, 10.5);
  bBox(s, right, 5.05, 1.22, 2.0, 3.9, 10.5);

  footer(s, "Source: WHO Diagnostic Testing Guidance Dec 2024 | CDC");
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 12 – TREATMENT Pt 1
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  bgWhite(s);
  addHeader(s, "06 | TREATMENT", "FDA-approved monoclonal antibody therapies for Ebola");
  divider(s, 1.1);

  sHead(s, "FDA-APPROVED SPECIFIC THERAPIES — Orthoebolavirus zairense (Zaire species) ONLY", 0.25, 1.15, 9.5);

  const drugs = [
    {
      name: "INMAZEB™",
      generic: "Atoltivimab + Maftivimab + Odesivimab-ebgn",
      type: "3-Monoclonal Antibody Cocktail",
      approval: "FDA Approved: October 2020",
      route: "Single IV infusion",
      mech: "Binds glycoprotein (GP) at 3 distinct epitopes → blocks viral entry into host cells simultaneously from multiple sites, reducing resistance likelihood",
      efficacy: "PALM RCT (DRC 2019): 36% mortality vs 49% (ZMapp comparator arm) — significant survival benefit",
      color: RED_DARK,
    },
    {
      name: "EBANGA™",
      generic: "Ansuvimab-zykl (mAb114)",
      type: "Single Monoclonal Antibody",
      approval: "FDA Approved: December 2020",
      route: "Single IV infusion",
      mech: "Binds GP receptor-binding domain → prevents NPC1 receptor interaction → blocks endosomal fusion",
      efficacy: "PALM RCT (DRC 2019): 35% mortality — BEST survival outcome in the PALM RCT; superior to ZMapp and remdesivir arms",
      color: RED_MID,
    }
  ];

  drugs.forEach((d, i) => {
    const y = 1.52 + i * 1.82;
    s.addShape(pres.ShapeType.rect, { x: 0.25, y, w: 9.5, h: 1.72, fill: { color: d.color }, line: { color: WHITE, pt: 1.5 } });

    s.addText(d.name, { x: 0.4, y: y + 0.06, w: 2.5, h: 0.48, fontSize: 26, bold: true, color: WHITE, fontFace: "Calibri" });
    s.addShape(pres.ShapeType.rect, { x: 2.95, y: y + 0.1, w: 6.6, h: 0.35, fill: { color: "rgba(0,0,0,0.0)" }, line: { color: "00000000" } });
    s.addText(`${d.generic}  |  ${d.type}`, { x: 2.95, y: y + 0.08, w: 6.6, h: 0.28, fontSize: 11, bold: true, color: "FFCDD2", fontFace: "Calibri" });
    s.addText(`${d.approval}   |   Route: ${d.route}`, { x: 2.95, y: y + 0.36, w: 6.6, h: 0.25, fontSize: 10, color: GOLD, fontFace: "Calibri" });

    s.addShape(pres.ShapeType.line, { x: 0.4, y: y + 0.64, w: 9.0, h: 0, line: { color: "FFCDD2", pt: 0.5 } });
    s.addText("⚙  Mechanism: " + d.mech, { x: 0.4, y: y + 0.68, w: 9.1, h: 0.48, fontSize: 10, italic: true, color: "FFEEEE", fontFace: "Calibri", wrap: true });
    s.addText("📊 Efficacy: " + d.efficacy, { x: 0.4, y: y + 1.18, w: 9.1, h: 0.45, fontSize: 10, color: WHITE, fontFace: "Calibri", wrap: true });
  });

  footer(s, "Source: FDA Drug Approvals | Mulangu S et al. PALM RCT. NEJM 2019 | cdc.gov/ebola");
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 13 – TREATMENT Pt 2
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  bgPale(s);
  addHeader(s, "06 | TREATMENT (cont.)", "Supportive care, investigational agents & clinical management");
  divider(s, 1.15);

  const left = [
    "SUPPORTIVE CARE (cornerstone of management):",
    "  • IV fluid resuscitation — isotonic NS/RL",
    "  • Electrolyte correction (K+, Ca2+, Mg2+)",
    "  • Oral rehydration solution (if tolerated)",
    "  • Antipyretics: acetaminophen (avoid NSAIDs)",
    "  • Anti-emetics: ondansetron 4–8 mg IV/PO",
    "  • Anti-diarrhoeal: loperamide",
    "  • Pain: morphine / fentanyl PCA",
    "  • Nutrition: enteral / parenteral support",
    "  • Vasopressors for refractory shock",
    "  • Renal replacement therapy (AKI)",
    "",
    "COAGULOPATHY / DIC MANAGEMENT:",
    "  • Fresh frozen plasma (FFP)",
    "  • Cryoprecipitate for fibrinogen",
    "  • Vitamin K supplementation",
  ];

  const right = [
    "INVESTIGATIONAL / PREVIOUS AGENTS:",
    "  • ZMapp (3 mAb cocktail) — superseded",
    "    by Inmazeb and Ebanga",
    "  • Remdesivir — limited EVD efficacy",
    "    in PALM RCT; not recommended",
    "  • Favipiravir — trialled W. Africa 2014;",
    "    inconclusive in severe disease",
    "  • Convalescent plasma — variable results",
    "",
    "CLINICAL CARE PRINCIPLES:",
    "  • Isolate IMMEDIATELY on suspicion",
    "  • Dedicated ETU (Ebola Treatment Unit)",
    "  • Strict IPC: full PPE for all contacts",
    "  • Psychological support for patients",
    "  • Safe and dignified burial after death",
    "",
    "⚠ NO approved specific treatment for",
    "  Sudan, Bundibugyo, or Taï Forest species",
    "  → supportive care + clinical trials only",
  ];

  bBox(s, left, 0.25, 1.22, 4.7, 3.9, 10.5);
  bBox(s, right, 5.05, 1.22, 4.7, 3.9, 10.5);

  footer(s, "Source: CDC Clinical Guidance for Ebola | cdc.gov/ebola/hcp");
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 14 – PREVENTION Pt 1
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  bgWhite(s);
  addHeader(s, "07 | PREVENTION, CONTROL & MANAGEMENT", "Vaccines approved for Ebola virus disease");
  divider(s, 1.1);

  sHead(s, "APPROVED VACCINES", 0.25, 1.15, 9.5);

  const vaccines = [
    {
      name: "ERVEBO®  (rVSV-ZEBOV-GP)",
      mfr: "Merck & Co.",
      target: "Orthoebolavirus zairense (Zaire species)",
      indication: "Ring vaccination in outbreak response; preventive vaccination of HCW via Gavi",
      efficacy: ">97% efficacy in Guinea 2015 Lancet trial | FDA approved Dec 2019 | WHO prequalified",
      notes: "Live attenuated recombinant VSV vector. Single IM dose. Approved for adults ≥18 yrs. Can cause arthritis/arthralgia. COLD CHAIN required.",
      color: RED_DARK
    },
    {
      name: "ZABDENO® + MVABEA®  (2-dose heterologous prime-boost)",
      mfr: "Janssen Pharmaceutica (J&J)",
      target: "Orthoebolavirus zairense (Zaire species)",
      indication: "Preventive vaccination of healthcare workers, at-risk populations",
      efficacy: "Ad26.ZEBOV prime → MVA-BN-Filo boost (56-day interval) | EMA/WHO approved",
      notes: "Not for acute outbreak (2-dose interval). Suitable for planned pre-exposure prophylaxis. Ongoing immunogenicity studies in children.",
      color: RED_MID
    }
  ];

  vaccines.forEach((v, i) => {
    const y = 1.52 + i * 1.9;
    s.addShape(pres.ShapeType.rect, { x: 0.25, y, w: 9.5, h: 1.8, fill: { color: v.color }, line: { color: WHITE, pt: 1.5 } });
    s.addText(v.name, { x: 0.4, y: y + 0.06, w: 7.5, h: 0.4, fontSize: 16, bold: true, color: WHITE, fontFace: "Calibri" });
    s.addShape(pres.ShapeType.rect, { x: 8.0, y: y + 0.1, w: 1.6, h: 0.28, fill: { color: WHITE }, line: { color: WHITE } });
    s.addText(v.mfr, { x: 8.0, y: y + 0.1, w: 1.6, h: 0.28, fontSize: 9, color: v.color, bold: true, align: "center", valign: "middle" });
    s.addText(`Target: ${v.target}   |   Indication: ${v.indication}`, { x: 0.4, y: y + 0.48, w: 9.1, h: 0.28, fontSize: 10, color: GOLD, fontFace: "Calibri" });
    s.addText(`Efficacy: ${v.efficacy}`, { x: 0.4, y: y + 0.77, w: 9.1, h: 0.32, fontSize: 10, italic: true, color: "FFEEEE", fontFace: "Calibri", wrap: true });
    s.addText(`Notes: ${v.notes}`, { x: 0.4, y: y + 1.1, w: 9.1, h: 0.6, fontSize: 9.5, color: "FFDDDD", fontFace: "Calibri", wrap: true });
  });

  s.addShape(pres.ShapeType.rect, { x: 0.25, y: 5.08, w: 9.5, h: 0.22, fill: { color: RED_PALE }, line: { color: RED_LIGHT, pt: 1 } });
  s.addText("⚠  No approved vaccine for Sudan, Bundibugyo, or Taï Forest species — candidate vaccines in Phase 2/3 trials (2026).", {
    x: 0.4, y: 5.08, w: 9.3, h: 0.22, fontSize: 9.5, italic: true, color: RED_DARK, valign: "middle", fontFace: "Calibri"
  });

  footer(s, "Source: WHO SAGE July 2024 | Merck | Janssen | Lancet 2017 Guinea trial");
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 15 – PREVENTION Pt 2
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  bgPale(s);
  addHeader(s, "07 | PREVENTION, CONTROL & MANAGEMENT (cont.)", "IPC, contact tracing, safe burial & outbreak response pillars");
  divider(s, 1.15);

  if (IMG_PPE) {
    s.addImage({ data: IMG_PPE, x: 7.2, y: 1.2, w: 2.55, h: 2.2 });
    s.addShape(pres.ShapeType.rect, { x: 7.2, y: 3.4, w: 2.55, h: 0.26, fill: { color: RED_DARK }, line: { color: RED_DARK } });
    s.addText("Full PPE for EVD response (CDC/PHIL)", { x: 7.2, y: 3.4, w: 2.55, h: 0.26, fontSize: 7, color: WHITE, align: "center", valign: "middle" });
  }

  const left = [
    "INFECTION PREVENTION & CONTROL (IPC):",
    "  • Full PPE: double gloves, gown, waterproof",
    "    apron, FFP2/3 mask, goggles + face shield",
    "  • Strict hand hygiene (70% alcohol rub)",
    "  • Dedicated ETU with clean/dirty zones",
    "  • Safe injection; no needle recapping",
    "  • Decontaminate all equipment (chlorine)",
    "  • Biomedical waste: double-bag + autoclave",
    "",
    "CONTACT TRACING:",
    "  • Identify ALL contacts in 21-day window",
    "  • Daily symptom monitoring × 21 days",
    "  • Ring vaccination of contacts",
    "  • Quarantine high-risk contacts",
    "  • GPS-tracked contact lists",
  ];

  const right = [
    "SAFE AND DIGNIFIED BURIALS (SDB):",
    "  • Virus shed from corpse for days",
    "  • Trained burial teams with full PPE",
    "  • No touching of body by family",
    "  • Chlorine body bag; GPS-tagged grave",
    "",
    "COMMUNITY ENGAGEMENT:",
    "  • Community health workers",
    "  • Overcome mistrust & cultural barriers",
    "  • Radio/SMS public health messaging",
    "  • Involve religious/community leaders",
    "",
    "WHO 7 OUTBREAK RESPONSE PILLARS:",
    "  1. Case detection & isolation",
    "  2. Contact tracing & surveillance",
    "  3. Ring vaccination (Ervebo)",
    "  4. Clinical case management",
    "  5. Safe & dignified burial",
    "  6. Community engagement",
    "  7. Cross-border coordination",
  ];

  bBox(s, left, 0.25, 1.22, 4.7, 3.9, 10.5);
  bBox(s, right, 5.05, 1.22, 2.0, 3.9, 10.5);

  footer(s, "Source: WHO Ebola Response Roadmap | CDC Emergency Operations | cdc.gov/ebola");
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 16 – SUMMARY Pt 1
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  bgWhite(s);
  addHeader(s, "08 | SUMMARY", "Key takeaways from the Ebola Virus Disease Pandemic Module");
  divider(s, 1.1);

  const cards = [
    { icon: "🦠", head: "THE VIRUS", body: "Orthoebolavirus – 4 human species. Filamentous -ssRNA. GP protein = key virulence factor. BSL-4 pathogen." },
    { icon: "🌍", head: "EPIDEMIOLOGY", body: "Discovered 1976, DRC. Largest outbreak 2014-16 (~29K cases). Fruit bats = reservoir. R₀ ~1.5-2.5. Sub-Saharan Africa." },
    { icon: "🌡", head: "CLINICAL", body: "Dry phase: fever, myalgia; Wet phase: D&V, haemorrhage. CFR 25-90%. Transmission via body fluids – NOT airborne." },
    { icon: "🔬", head: "DIAGNOSIS", body: "RT-PCR = gold standard. BSL-4 sample handling. Lab: leukopenia, thrombocytopenia, ↑AST, DIC coagulopathy." },
    { icon: "💊", head: "TREATMENT", body: "Inmazeb™ & Ebanga™ (FDA approved – Zaire species only). Supportive care is cornerstone. No Rx for other species." },
    { icon: "🛡", head: "PREVENTION", body: "Ervebo® >97% efficacy (ring vaccination). Full PPE, ETU, contact tracing, safe burial = outbreak control." },
  ];

  cards.forEach((c, i) => {
    const col = i % 3;
    const row = Math.floor(i / 3);
    const x = 0.25 + col * 3.22;
    const y = 1.18 + row * 1.95;
    s.addShape(pres.ShapeType.rect, { x, y, w: 3.0, h: 1.85, fill: { color: WHITE }, line: { color: RED_LIGHT, pt: 1.5 } });
    s.addShape(pres.ShapeType.rect, { x, y, w: 3.0, h: 0.45, fill: { color: RED_DARK }, line: { color: RED_DARK } });
    s.addText(`${c.icon}   ${c.head}`, { x: x + 0.1, y: y + 0.06, w: 2.82, h: 0.35, fontSize: 12, bold: true, color: WHITE, valign: "middle", fontFace: "Calibri" });
    s.addText(c.body, { x: x + 0.12, y: y + 0.51, w: 2.78, h: 1.27, fontSize: 10.5, color: GRAY_TXT, wrap: true, valign: "top", fontFace: "Calibri" });
  });

  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 17 – SUMMARY Pt 2 / Key Messages & References
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  bgPale(s);
  addHeader(s, "08 | SUMMARY — KEY MESSAGES & REFERENCES", "Critical learning points for clinical practice & public health");
  divider(s, 1.1);

  const msgs = [
    "Early recognition and IMMEDIATE ISOLATION are the most critical first steps in EVD management.",
    "RT-PCR is the gold standard diagnostic test — all samples require BSL-4 biosafety precautions.",
    "Two FDA-approved monoclonal antibody treatments exist ONLY for Orthoebolavirus zairense (Zaire species).",
    "Supportive care — aggressive fluid management, electrolytes, nutrition — significantly improves survival.",
    "Ervebo® vaccine has >97% efficacy and is the cornerstone of ring vaccination strategy in outbreaks.",
    "Community engagement and safe burial practices are as important as medical treatment in outbreak control.",
    "Ebola does NOT spread through the air — transmission requires direct contact with infectious body fluids.",
    "⚠ Active 2026 DRC/Uganda Bundibugyo outbreak highlights the urgent need for broader species vaccines.",
  ];

  sHead(s, "CRITICAL LEARNING POINTS", 0.25, 1.15, 9.5);

  msgs.forEach((m, i) => {
    const bg = i % 2 === 0 ? WHITE : RED_PALE;
    s.addShape(pres.ShapeType.rect, { x: 0.25, y: 1.52 + i * 0.43, w: 9.5, h: 0.41, fill: { color: bg }, line: { color: "FFCDD2", pt: 0.5 } });
    s.addShape(pres.ShapeType.rect, { x: 0.25, y: 1.52 + i * 0.43, w: 0.35, h: 0.41, fill: { color: RED_DARK }, line: { color: RED_DARK } });
    s.addText(`${i + 1}`, { x: 0.25, y: 1.52 + i * 0.43, w: 0.35, h: 0.41, fontSize: 10, bold: true, color: WHITE, align: "center", valign: "middle" });
    s.addText(m, { x: 0.68, y: 1.52 + i * 0.43, w: 9.0, h: 0.41, fontSize: 10.5, color: i === 7 ? RED_DARK : DARK_TXT, valign: "middle", fontFace: "Calibri", bold: i === 7 });
  });

  // References
  s.addShape(pres.ShapeType.rect, { x: 0.25, y: 4.97, w: 9.5, h: 0.58, fill: { color: RED_DARK }, line: { color: RED_DARK } });
  s.addText("REFERENCES", { x: 0.4, y: 4.99, w: 1.1, h: 0.22, fontSize: 9, bold: true, color: GOLD });
  s.addText(
    "1. CDC Ebola Disease Basics – cdc.gov/ebola   2. WHO Ebola Fact Sheet – who.int   3. WHO Diagnostic Testing Guidance Dec 2024   " +
    "4. Mulangu S et al. PALM RCT. NEJM 2019;381:2293-2303   5. Henao-Restrepo AM et al. Guinea Ring Vaccination. Lancet 2017;389:505-518   " +
    "6. PMC7149730 – Clinical Manifestations & Lab Diagnosis of EVD",
    { x: 0.4, y: 5.2, w: 9.3, h: 0.32, fontSize: 7.5, color: "FFCDD2", wrap: true, fontFace: "Calibri" }
  );
})();

// ═══════════════════════════════════════════════════════════════════════════
// WRITE FILE
// ═══════════════════════════════════════════════════════════════════════════
pres.writeFile({ fileName: "/home/daytona/workspace/ebola-ppt/Ebola_VD_RedWhite_v2.pptx" })
  .then(() => console.log("SUCCESS"))
  .catch(e => { console.error("ERROR:", e); process.exit(1); });
Running Command

cd /home/daytona/workspace/ebola-ppt && node ebola_v2.js 2>&1

Running Command

ls -lh /home/daytona/workspace/ebola-ppt/Ebola_VD_RedWhite_v2.pptx

Your updated presentation is ready — now 904 KB with embedded real images!

Ebola VD RedWhite v2

Presentation · PPTX


What changed in this version

Theme — Red & White:
  • White/light-pink slide backgrounds throughout (replaced the dark red/black)
  • Clean red header bars on every slide with white text
  • Alternating white and light-pink row colors in all tables
  • Red left-accent stripe on all content slides
Embedded Real Images (from CDC Public Health Image Library):
SlideImage
Slide 3 (Clinical Case)Ebola virus particles — electron micrograph
Slide 7 (Epidemiology)Healthcare worker in full PPE
Slide 11 (Lab Diagnosis)PCR / laboratory test kit
Slide 15 (Prevention)Full PPE for EVD responders
Other improvements:
  • Larger, more readable fonts on all body content
  • Visual symptom timeline on Clinical Case slide (colored phase boxes)
  • Drug cards for Inmazeb™ & Ebanga™ with bold visual hierarchy
  • Numbered critical learning points on Summary slide with alternating row shading
  • All 17 slides fully editable in PowerPoint or Google Slides

Create a Word document summary for medical students to download

Reading File
Running Command

ls /home/daytona/skills/docx/

Running Command

mkdir -p /home/daytona/workspace/ebola-ppt && node -e "require('docx'); console.…

Writing File

~/ebola-ppt/ebola_word.js

const {
  Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
  Header, Footer, AlignmentType, HeadingLevel, BorderStyle, WidthType,
  ShadingType, VerticalAlign, PageNumber, TableOfContents,
  LevelFormat, convertInchesToTwip, NumberFormat
} = require("docx");
const fs = require("fs");

// ── Colour palette ──────────────────────────────────────────────────────────
const RED     = "B71C1C";
const RED_LT  = "FFEBEE";
const RED_MID = "C62828";
const GOLD    = "F57F17";
const WHITE   = "FFFFFF";
const GRAY    = "424242";
const LGRAY   = "F5F5F5";
const MGRAY   = "EEEEEE";

// ── Helpers ─────────────────────────────────────────────────────────────────

function h1(text) {
  return new Paragraph({
    text,
    heading: HeadingLevel.HEADING_1,
    spacing: { before: 320, after: 120 },
    shading: { type: ShadingType.SOLID, color: RED, fill: RED },
    border: { bottom: { color: RED_MID, size: 8, space: 2, style: BorderStyle.SINGLE } },
    children: [new TextRun({ text, bold: true, color: WHITE, size: 28, font: "Calibri" })]
  });
}

function h2(text) {
  return new Paragraph({
    spacing: { before: 240, after: 80 },
    shading: { type: ShadingType.SOLID, color: RED_LT, fill: RED_LT },
    border: { left: { color: RED, size: 12, space: 6, style: BorderStyle.SINGLE } },
    children: [new TextRun({ text, bold: true, color: RED, size: 24, font: "Calibri" })]
  });
}

function h3(text) {
  return new Paragraph({
    spacing: { before: 160, after: 60 },
    children: [new TextRun({ text, bold: true, color: RED_MID, size: 22, underline: {}, font: "Calibri" })]
  });
}

function body(text, opts = {}) {
  return new Paragraph({
    spacing: { before: 40, after: 40, line: 276 },
    children: [new TextRun({ text, size: 20, color: GRAY, font: "Calibri", ...opts })]
  });
}

function bullet(text, level = 0) {
  return new Paragraph({
    numbering: undefined,
    spacing: { before: 30, after: 30, line: 260 },
    indent: { left: convertInchesToTwip(0.25 + level * 0.25) },
    children: [
      new TextRun({ text: (level === 0 ? "• " : "  – ") + text, size: 20, color: GRAY, font: "Calibri" })
    ]
  });
}

function boldBullet(label, detail, level = 0) {
  return new Paragraph({
    spacing: { before: 30, after: 30, line: 260 },
    indent: { left: convertInchesToTwip(0.25 + level * 0.25) },
    children: [
      new TextRun({ text: (level === 0 ? "• " : "  – "), size: 20, color: GRAY, font: "Calibri" }),
      new TextRun({ text: label, bold: true, size: 20, color: RED_MID, font: "Calibri" }),
      new TextRun({ text: detail, size: 20, color: GRAY, font: "Calibri" })
    ]
  });
}

function note(text) {
  return new Paragraph({
    spacing: { before: 80, after: 80 },
    shading: { type: ShadingType.SOLID, color: RED_LT, fill: RED_LT },
    border: {
      left:   { color: RED, size: 12, space: 6, style: BorderStyle.SINGLE },
      top:    { color: RED_LT, size: 2, space: 1, style: BorderStyle.SINGLE },
      bottom: { color: RED_LT, size: 2, space: 1, style: BorderStyle.SINGLE },
      right:  { color: RED_LT, size: 2, space: 1, style: BorderStyle.SINGLE },
    },
    children: [new TextRun({ text: "⚠  " + text, bold: true, size: 20, color: RED, font: "Calibri" })]
  });
}

function divider() {
  return new Paragraph({
    spacing: { before: 120, after: 120 },
    border: { bottom: { color: RED, size: 6, space: 2, style: BorderStyle.SINGLE } },
    children: []
  });
}

function blank() {
  return new Paragraph({ children: [new TextRun({ text: "" })] });
}

// ── Table helpers ─────────────────────────────────────────────────────────

function makeCell(text, opts = {}) {
  const { bold = false, bg = WHITE, color = GRAY, isHeader = false, width = null } = opts;
  const cellOpts = {
    shading: { type: ShadingType.SOLID, color: bg, fill: bg },
    verticalAlign: VerticalAlign.CENTER,
    margins: { top: 60, bottom: 60, left: 80, right: 80 },
    children: [
      new Paragraph({
        spacing: { before: 0, after: 0 },
        children: [new TextRun({ text: String(text), bold: bold || isHeader, size: isHeader ? 18 : 18, color: isHeader ? WHITE : color, font: "Calibri" })]
      })
    ]
  };
  if (width) cellOpts.width = { size: width, type: WidthType.DXA };
  return new TableCell(cellOpts);
}

function headerRow(cols, widths) {
  return new TableRow({
    tableHeader: true,
    children: cols.map((c, i) => makeCell(c, { isHeader: true, bg: RED, bold: true, width: widths ? widths[i] : null }))
  });
}

function dataRow(cols, widths, rowIdx = 0) {
  const bg = rowIdx % 2 === 0 ? LGRAY : WHITE;
  return new TableRow({
    children: cols.map((c, i) => makeCell(c, { bg, width: widths ? widths[i] : null }))
  });
}

function simpleTable(headers, rows, widths) {
  return new Table({
    width: { size: 100, type: WidthType.PERCENTAGE },
    margins: { top: 60, bottom: 60 },
    rows: [
      headerRow(headers, widths),
      ...rows.map((r, i) => dataRow(r, widths, i))
    ]
  });
}

// ── COVER PAGE ────────────────────────────────────────────────────────────

function coverPage() {
  return [
    new Paragraph({
      spacing: { before: 200, after: 0 },
      shading: { type: ShadingType.SOLID, color: RED, fill: RED },
      children: [new TextRun({ text: "", size: 4 })]
    }),
    blank(),
    new Paragraph({
      alignment: AlignmentType.CENTER,
      spacing: { before: 800, after: 0 },
      children: [new TextRun({ text: "PANDEMIC MODULE", bold: true, size: 22, color: RED_MID, font: "Calibri", characterSpacing: 200 })]
    }),
    new Paragraph({
      alignment: AlignmentType.CENTER,
      spacing: { before: 80, after: 0 },
      children: [new TextRun({ text: "EBOLA VIRUS DISEASE", bold: true, size: 64, color: RED, font: "Calibri" })]
    }),
    new Paragraph({
      alignment: AlignmentType.CENTER,
      spacing: { before: 0, after: 0 },
      children: [new TextRun({ text: "A Comprehensive Medical Student Summary", italic: true, size: 26, color: GRAY, font: "Calibri" })]
    }),
    new Paragraph({
      alignment: AlignmentType.CENTER,
      spacing: { before: 200, after: 200 },
      border: { bottom: { color: RED, size: 12, space: 4, style: BorderStyle.SINGLE } },
      children: [new TextRun({ text: "" })]
    }),
    new Paragraph({
      alignment: AlignmentType.CENTER,
      spacing: { before: 160, after: 80 },
      children: [new TextRun({ text: "Covering:", bold: true, size: 22, color: GRAY, font: "Calibri" })]
    }),
    ...[
      "Clinical Case Presentation",
      "Differential Diagnosis",
      "Epidemiology",
      "Pathogenesis",
      "Laboratory Diagnosis",
      "Treatment",
      "Prevention, Control & Management",
      "Summary & Key Messages"
    ].map(t => new Paragraph({
      alignment: AlignmentType.CENTER,
      spacing: { before: 40, after: 40 },
      children: [new TextRun({ text: "• " + t, size: 20, color: GRAY, font: "Calibri" })]
    })),
    new Paragraph({
      alignment: AlignmentType.CENTER,
      spacing: { before: 400, after: 60 },
      children: [new TextRun({ text: "Reference: CDC (www.cdc.gov/ebola) | WHO Ebola Fact Sheet | NEJM PALM RCT 2019", italic: true, size: 16, color: "999999", font: "Calibri" })]
    }),
    // Page break
    new Paragraph({ pageBreakBefore: true, children: [new TextRun({ text: "" })] })
  ];
}

// ══════════════════════════════════════════════════════════════════════════
// DOCUMENT CONTENT
// ══════════════════════════════════════════════════════════════════════════

const children = [
  ...coverPage(),

  // ── 1. CLINICAL CASE ─────────────────────────────────────────────────────
  h1("1.  CLINICAL CASE"),
  h2("1.1  Case Vignette"),
  new Paragraph({
    spacing: { before: 60, after: 60, line: 300 },
    shading: { type: ShadingType.SOLID, color: RED_LT, fill: RED_LT },
    border: {
      top:    { color: RED_MID, size: 6, space: 4, style: BorderStyle.SINGLE },
      bottom: { color: RED_MID, size: 6, space: 4, style: BorderStyle.SINGLE },
      left:   { color: RED_MID, size: 6, space: 4, style: BorderStyle.SINGLE },
      right:  { color: RED_MID, size: 6, space: 4, style: BorderStyle.SINGLE },
    },
    children: [
      new TextRun({ text: "Case: ", bold: true, size: 20, color: RED, font: "Calibri" }),
      new TextRun({ text: "A 32-year-old male healthcare worker presents to a referral hospital in Kikwit, Democratic Republic of the Congo (DRC) with a 4-day history of sudden-onset high-grade fever (39.8°C), severe headache, diffuse myalgia, and profound fatigue. He reports caring for a confirmed Ebola Virus Disease (EVD) patient 10 days prior without adequate personal protective equipment (PPE). On day 6 of illness, he develops profuse watery diarrhoea, persistent vomiting, abdominal cramping, and conjunctival haemorrhage. His blood pressure is 90/60 mmHg. The team initiates immediate isolation.", size: 20, color: GRAY, font: "Calibri", italics: true }),
    ]
  }),
  blank(),
  h2("1.2  Symptom Progression"),
  h3("Dry Phase (Days 1–5)"),
  bullet("Sudden high-grade fever (>38.6°C) — often the first sign"),
  bullet("Severe headache, myalgia, arthralgia"),
  bullet("Extreme fatigue and generalised weakness"),
  bullet("Sore throat, retrosternal chest pain"),
  bullet("Anorexia, nausea (vomiting not yet prominent)"),
  h3("Wet Phase (Days 6–12)"),
  bullet("Profuse watery diarrhoea (may exceed 10 litres/day)"),
  bullet("Persistent vomiting, severe abdominal cramping"),
  bullet("Maculopapular rash on the trunk (typically day 5–7)"),
  bullet("Hiccups — a poor prognostic sign"),
  bullet("Worsening renal and hepatic function"),
  h3("Haemorrhagic Features (<50% of cases)"),
  bullet("Conjunctival injection and haemorrhage"),
  bullet("Petechiae, ecchymoses, purpuric skin lesions"),
  bullet("Melaena, haematemesis"),
  bullet("Bleeding from IV sites, gums, nose"),
  bullet("Internal haemorrhage"),
  h3("Neurological Manifestations"),
  bullet("Confusion, delirium (severe cases)"),
  bullet("Seizures — associated with high viral load"),
  h2("1.3  Prognostic Indicators"),
  note("Poor prognosis: high viral load at admission, early onset confusion, hiccups, haemorrhagic manifestations. CFR 25–90% (average ~50%)."),
  simpleTable(
    ["Feature", "Good Prognosis", "Poor Prognosis"],
    [
      ["Viral load",         "Low at admission",         "High at admission"],
      ["Neurological signs", "Absent",                   "Confusion, seizures"],
      ["Haemorrhage",        "Absent",                   "Present early"],
      ["Diarrhoea volume",   "<5 L/day",                 ">10 L/day"],
      ["Age",                "Young adult",              "Elderly / infant"],
      ["Access to treatment","Monoclonal Ab + supportive","Supportive only"],
    ],
    [2500, 3000, 3000]
  ),
  blank(), divider(),

  // ── 2. DIFFERENTIAL DIAGNOSIS ────────────────────────────────────────────
  h1("2.  DIFFERENTIAL DIAGNOSIS"),
  note("ISOLATE FIRST — do not delay isolation to complete the diagnostic workup."),
  h2("2.1  High-Priority Differentials"),
  simpleTable(
    ["Disease", "Key Distinguishing Features", "Diagnostic Test"],
    [
      ["Malaria",               "Most common mimicker; fever, headache, myalgia", "RDT + blood film"],
      ["Typhoid Fever",         "Sustained fever, rose spots, hepatosplenomegaly", "Widal + blood culture"],
      ["Lassa Fever",           "Facial oedema, deafness; endemic West Africa", "RT-PCR (Lassa-specific)"],
      ["Marburg Virus Disease", "Clinically identical to Ebola", "RT-PCR (species-specific)"],
      ["Dengue Fever",          "Bone pain, thrombocytopenia, tourniquet +ve", "NS1 antigen, serology"],
    ],
    [2800, 4400, 2200]
  ),
  blank(),
  h2("2.2  Additional Conditions to Consider"),
  bullet("Crimean-Congo Haemorrhagic Fever (tick exposure, haemorrhage — Balkans/Africa)"),
  bullet("Rift Valley Fever (livestock contact)"),
  bullet("Yellow Fever (jaundice dominant; vaccination history)"),
  bullet("Meningococcal disease (purpuric rash, meningism)"),
  bullet("Bacterial septicaemia / septic shock"),
  bullet("Shigellosis / severe gastroenteritis"),
  bullet("Rickettsial disease (rash, eschar)"),
  bullet("Mpox / Monkeypox (vesicular rash)"),
  bullet("COVID-19 (respiratory features predominate)"),
  blank(),
  h2("2.3  Diagnostic Algorithm"),
  boldBullet("Step 1: ", "Assess travel history + epidemiological exposure link"),
  boldBullet("Step 2: ", "Isolate immediately if EVD is suspected"),
  boldBullet("Step 3: ", "Notify infection control and relevant public health authority"),
  boldBullet("Step 4: ", "Collect specimens under full PPE (BSL-4 precautions)"),
  boldBullet("Step 5: ", "RT-PCR for Ebola (gold standard) + malaria RDT in parallel"),
  boldBullet("Step 6: ", "FBC, LFT, RFT, coagulation screen, blood cultures, dengue NS1"),
  blank(), divider(),

  // ── 3. EPIDEMIOLOGY ──────────────────────────────────────────────────────
  h1("3.  EPIDEMIOLOGY"),
  h2("3.1  The Virus"),
  bullet("Caused by Orthoebolavirus (formerly Ebolavirus) — family Filoviridae"),
  bullet("Negative-sense single-stranded RNA (-ssRNA) genome"),
  bullet("Filamentous particle with characteristic 'shepherd's crook' morphology on EM"),
  bullet("BSL-4 pathogen — highest biosafety level"),
  blank(),
  h2("3.2  Four Human-Pathogenic Species"),
  simpleTable(
    ["Species", "Former Name", "CFR", "Distribution"],
    [
      ["Orthoebolavirus zairense",     "Zaire ebolavirus",     "60–90%", "DRC, Central Africa"],
      ["Orthoebolavirus sudanense",    "Sudan ebolavirus",     "40–60%", "Uganda, Sudan"],
      ["Orthoebolavirus bundibugyense","Bundibugyo ebolavirus","25–36%", "DRC, Uganda"],
      ["Orthoebolavirus taïense",      "Taï Forest ebolavirus","<1 case","Côte d'Ivoire"],
    ],
    [3200, 2800, 1200, 2300]
  ),
  blank(),
  h2("3.3  Major Outbreak Timeline"),
  simpleTable(
    ["Year", "Location", "Cases", "CFR", "Notes"],
    [
      ["1976",    "DRC / Sudan",               "601",    "53–88%", "First identified; 2 simultaneous events"],
      ["1995",    "Kikwit, DRC",               "315",    "81%",    "Urban spread"],
      ["2000-01", "Uganda",                    "425",    "53%",    "Sudan species"],
      ["2014-16", "W. Africa (Guinea/SL/Lib)", "28,616", "40%",    "Largest in history; international emergency"],
      ["2018-20", "North Kivu, DRC",           "3,481",  "66%",    "2nd largest; conflict zone; vaccine deployed"],
      ["2022",    "Uganda",                    "164",    "55%",    "Sudan species; no approved vaccine"],
      ["2025-26", "DRC / Uganda (Bundibugyo)", "Active", "~40%",   "⚠ Active 2026 outbreak; IHR Emergency declared"],
    ],
    [900, 2800, 800, 800, 4200]
  ),
  blank(),
  h2("3.4  Transmission"),
  bullet("Direct contact with blood or body fluids of infected persons (alive or dead)"),
  bullet("Contact with contaminated objects (needles, PPE, bedding)"),
  bullet("Unsafe funeral/burial practices — corpse remains infectious for days"),
  bullet("Sexual contact — virus persists in semen for 500+ days post-recovery"),
  bullet("Zoonotic spillover from bats or non-human primates (NHP)"),
  note("Ebola does NOT spread through the air. Transmission requires direct contact with infectious body fluids."),
  h2("3.5  Natural Reservoir"),
  bullet("Probable: Fruit bats — Pteropodidae family (Hypsignathus monstrosus, Epomops franqueti, Myonycteris torquata)"),
  bullet("Bats demonstrate seropositivity without apparent disease"),
  h2("3.6  Epidemiological Parameters"),
  boldBullet("R₀: ", "1.5–2.5 (basic reproduction number)"),
  boldBullet("Incubation period: ", "2–21 days (average 8–10 days)"),
  boldBullet("Infectious period: ", "From symptom onset (not before)"),
  boldBullet("High-risk groups: ", "Healthcare workers, family caregivers, burial participants, lab personnel, bushmeat hunters"),
  blank(), divider(),

  // ── 4. PATHOGENESIS ──────────────────────────────────────────────────────
  h1("4.  PATHOGENESIS"),
  h2("4.1  Viral Entry & Replication"),
  boldBullet("Step 1 — Entry: ", "Glycoprotein (GP) binds NPC1 receptor on macrophages and dendritic cells via the endosomal route"),
  boldBullet("Step 2 — Replication: ", "Rapid viral replication; VP35 and VP24 proteins block interferon (IFN-α/β) signalling → innate immunity disabled"),
  boldBullet("Step 3 — Dissemination: ", "Virus spreads via lymphatics to liver, spleen, adrenal glands, kidneys, and gonads"),
  boldBullet("Step 4 — Cytokine Storm: ", "Massive release of TNF-α, IL-6, IL-8, MCP-1 → vascular endothelial damage + massive fluid leakage"),
  boldBullet("Step 5 — Organ Failure: ", "Hepatic necrosis, adrenal insufficiency, DIC, hypovolaemic shock, multi-organ failure"),
  blank(),
  h2("4.2  Key Virulence Proteins"),
  simpleTable(
    ["Protein", "Function / Role in Virulence"],
    [
      ["Glycoprotein (GP)", "Mediates cell entry; shed sGP decoys neutralising antibodies → immune evasion"],
      ["VP35",              "Blocks IFN-β induction → disables innate immune response"],
      ["VP24",              "Blocks STAT1 nuclear import → prevents interferon signalling"],
      ["VP40 (Matrix)",     "Drives budding of new viral particles from host cell membrane"],
      ["NP (Nucleoprotein)","Encapsidates viral RNA genome"],
      ["L Protein (RdRp)",  "RNA-dependent RNA polymerase — replication + transcription of -ssRNA genome"],
    ],
    [2500, 7000]
  ),
  blank(),
  h2("4.3  Immune Evasion"),
  bullet("VP35 blocks IFN-β induction — cells cannot mount antiviral interferon response"),
  bullet("VP24 blocks JAK-STAT signalling pathway"),
  bullet("Shed sGP acts as antibody decoy — neutralising antibodies bound and unable to act on virions"),
  bullet("Massive dendritic cell dysfunction → no T-cell priming → profound lymphopenia"),
  bullet("NK cell impairment and monocyte dysregulation"),
  h2("4.4  Coagulopathy — Disseminated Intravascular Coagulation (DIC)"),
  bullet("Upregulation of tissue factor on infected monocytes → coagulation cascade activation"),
  bullet("Platelet activation followed by consumption → thrombocytopenia"),
  bullet("Elevated FDP, reduced fibrinogen, elevated PT and aPTT"),
  bullet("Simultaneous microthrombi AND haemorrhagic manifestations"),
  bullet("Endothelial disruption → third-spacing of fluids → hypovolaemia"),
  h2("4.5  Organ-Specific Damage"),
  boldBullet("Liver: ", "Kupffer cell infection → hepatocyte necrosis → ↑↑ AST >> ALT; impaired clotting factor synthesis"),
  boldBullet("Adrenal glands: ", "Cortical necrosis → adrenal insufficiency → refractory hypotension and shock"),
  boldBullet("Kidneys: ", "Proteinuria, oliguria, acute kidney injury (AKI)"),
  boldBullet("Vascular endothelium: ", "Increased permeability → pulmonary oedema, hypovolaemic shock, circulatory collapse"),
  blank(), divider(),

  // ── 5. LAB DIAGNOSIS ─────────────────────────────────────────────────────
  h1("5.  LABORATORY DIAGNOSIS"),
  note("BIOSAFETY: All suspected Ebola samples require BSL-4 precautions. Inactivate specimens before processing outside BSL-4 facilities."),
  h2("5.1  Confirmatory Tests"),
  simpleTable(
    ["Test", "Type", "Timing", "Role"],
    [
      ["RT-PCR (Real-Time)",        "Molecular",      "Days 3+",   "GOLD STANDARD — detects viral RNA; 24-48h turnaround"],
      ["ELISA Antigen Capture",     "Immunological",  "Days 3–7",  "Detects NP/GP antigen; high sensitivity in acute phase"],
      ["IgM / IgG ELISA",           "Serology",       "Days 8+",   "IgM rises early; IgG persists — useful for serosurveys"],
      ["Rapid Antigen Test (RDT)",  "Point-of-Care",  "Days 3–10", "Field use; less sensitive than PCR — triage only"],
      ["Virus Isolation",           "Culture",        "Days 1+",   "BSL-4 reference labs only — definitive"],
      ["Electron Microscopy",       "Morphology",     "Any",       "'Shepherd's crook' filamentous morphology"],
    ],
    [2400, 1600, 1100, 4900]
  ),
  blank(),
  h2("5.2  Haematological Findings"),
  bullet("Leukopenia early → leukocytosis in late/severe disease"),
  bullet("Thrombocytopenia (often <50,000/µL)"),
  bullet("Atypical lymphocytes, band neutrophils"),
  bullet("Neutrophilia with left shift in severe cases"),
  h2("5.3  Biochemistry"),
  bullet("↑↑ AST >> ALT (hepatic injury pattern — distinguishes from other hepatitides)"),
  bullet("↑ Creatinine, ↑ BUN (acute kidney injury)"),
  bullet("Hypoalbuminaemia, hypoproteinaemia"),
  bullet("↑ CRP, ↑ ferritin (inflammatory markers)"),
  bullet("Electrolyte imbalances: hyponatraemia, hypokalaemia"),
  h2("5.4  Coagulation Panel"),
  bullet("↑ Prothrombin time (PT), ↑ activated partial thromboplastin time (aPTT)"),
  bullet("↑ D-dimer, ↑ fibrin degradation products (FDP)"),
  bullet("↓ Fibrinogen → diagnostic of DIC when combined with above"),
  h2("5.5  Sample Collection (WHO/CDC 2024)"),
  bullet("Preferred sample: whole blood (EDTA tube) or plasma"),
  bullet("Avoid oral/buccal swabs in living patients"),
  bullet("Chemical inactivation required before transport"),
  bullet("Triple packaging per IATA Packing Instruction P650"),
  bullet("Send to national reference laboratory or BSL-4 facility"),
  h2("5.6  Discharge Criteria (WHO)"),
  boldBullet("• ", "Two negative RT-PCR results at least 48 hours apart"),
  boldBullet("• ", "Clinically asymptomatic before discharge"),
  blank(), divider(),

  // ── 6. TREATMENT ─────────────────────────────────────────────────────────
  h1("6.  TREATMENT"),
  note("FDA-approved specific therapies exist ONLY for Orthoebolavirus zairense (Zaire species). Supportive care is the cornerstone for all species."),
  h2("6.1  FDA-Approved Specific Therapies"),
  simpleTable(
    ["Drug", "Class", "Mechanism", "Approval", "Key Evidence"],
    [
      ["INMAZEB™\n(Atoltivimab + Maftivimab + Odesivimab)", "3-mAb cocktail", "Binds GP at 3 epitopes → blocks viral entry", "FDA Oct 2020", "PALM RCT: 36% mortality vs 49% (ZMapp arm)"],
      ["EBANGA™\n(Ansuvimab-zykl / mAb114)",               "Single mAb",    "Binds GP RBD → blocks NPC1 interaction",   "FDA Dec 2020", "PALM RCT: 35% mortality — BEST outcome in trial"],
    ],
    [2200, 1600, 2600, 1400, 3700]
  ),
  blank(),
  h2("6.2  Supportive Care"),
  body("Supportive care remains the cornerstone of EVD management across all species:", { bold: true }),
  bullet("IV fluid resuscitation — isotonic normal saline or Ringer's lactate"),
  bullet("Electrolyte correction: potassium, calcium, magnesium"),
  bullet("Oral rehydration solution (ORS) if tolerated"),
  bullet("Antipyretics: paracetamol/acetaminophen — AVOID NSAIDs"),
  bullet("Anti-emetics: ondansetron 4–8 mg IV/PO"),
  bullet("Anti-diarrhoeal agents: loperamide"),
  bullet("Analgesia: morphine or fentanyl (patient-controlled analgesia)"),
  bullet("Nutritional support: enteral (NG tube) or parenteral nutrition"),
  bullet("Vasopressors (noradrenaline/norepinephrine) for refractory septic shock"),
  bullet("Renal replacement therapy / dialysis for AKI"),
  bullet("FFP, cryoprecipitate, vitamin K for DIC management"),
  h2("6.3  Investigational / Prior Agents"),
  bullet("ZMapp (3 mAb cocktail) — superseded by Inmazeb and Ebanga"),
  bullet("Remdesivir — showed limited EVD efficacy in PALM RCT; not currently recommended"),
  bullet("Favipiravir — trialled in West Africa 2014; inconclusive for severe disease"),
  bullet("Convalescent plasma — variable results across trials"),
  h2("6.4  Clinical Management Principles"),
  boldBullet("Isolate: ", "Immediately on suspicion — dedicated Ebola Treatment Unit (ETU)"),
  boldBullet("Notify: ", "Infection control team and national public health authority"),
  boldBullet("Protect: ", "Full PPE for all clinical contacts — no exceptions"),
  boldBullet("Support: ", "Psychological support for patients and their families"),
  boldBullet("Bury safely: ", "Safe and dignified burial after death to prevent community transmission"),
  blank(), divider(),

  // ── 7. PREVENTION ────────────────────────────────────────────────────────
  h1("7.  PREVENTION, CONTROL & MANAGEMENT"),
  h2("7.1  Approved Vaccines"),
  simpleTable(
    ["Vaccine", "Manufacturer", "Species Target", "Efficacy / Approval", "Notes"],
    [
      ["ERVEBO® (rVSV-ZEBOV-GP)", "Merck & Co.", "Zaire species only", ">97% efficacy (Guinea 2015 Lancet trial) | FDA Dec 2019", "Live attenuated VSV vector; single IM dose; ring vaccination in outbreaks; preventive via Gavi"],
      ["ZABDENO® + MVABEA® (2-dose)", "Janssen (J&J)", "Zaire species only", "Ad26.ZEBOV prime → MVA-BN-Filo boost; EMA/WHO approved", "56-day interval; suitable for planned pre-exposure prophylaxis; not for acute outbreak use"],
    ],
    [1800, 1500, 1600, 3200, 3400]
  ),
  note("No approved vaccine exists for Sudan, Bundibugyo, or Taï Forest species. Multiple candidate vaccines are in Phase 2/3 trials as of 2026."),
  blank(),
  h2("7.2  Infection Prevention & Control (IPC)"),
  bullet("Full PPE for all healthcare workers: double gloves, waterproof gown, apron, FFP2/3 mask, goggles + full face shield"),
  bullet("Strict hand hygiene: 70% alcohol-based rub before and after patient contact"),
  bullet("Dedicated Ebola Treatment Unit (ETU) with clearly marked clean and dirty zones"),
  bullet("Safe injection practices — no needle recapping"),
  bullet("Decontaminate all equipment with chlorine solution (0.5% for surfaces, 0.05% for skin)"),
  bullet("Biomedical waste: double-bag all waste + autoclave before disposal"),
  h2("7.3  Contact Tracing"),
  bullet("Identify ALL contacts within the 21-day window from last exposure"),
  bullet("Daily symptom monitoring for 21 days post-exposure"),
  bullet("Ring vaccination of confirmed contacts with Ervebo® (Zaire species outbreaks)"),
  bullet("Quarantine of high-risk contacts"),
  bullet("GPS-tracked contact lists for surveillance"),
  h2("7.4  Safe and Dignified Burials (SDB)"),
  bullet("Virus continues to be shed from the corpse for several days after death"),
  bullet("Trained burial teams in full PPE carry out all burials"),
  bullet("No direct touching of the body by family members during funeral rites"),
  bullet("Chlorine disinfection of body bags"),
  bullet("GPS-tagged graves for ongoing surveillance"),
  h2("7.5  Community Engagement"),
  bullet("Deployment of community health workers to build trust"),
  bullet("Address cultural resistance and mistrust through transparent communication"),
  bullet("Radio and SMS-based public health messaging"),
  bullet("Active involvement of religious and community leaders"),
  h2("7.6  WHO Outbreak Response Pillars"),
  boldBullet("1. ", "Case detection and immediate isolation"),
  boldBullet("2. ", "Contact tracing and active surveillance"),
  boldBullet("3. ", "Ring vaccination (Ervebo® for Zaire species)"),
  boldBullet("4. ", "Clinical case management in ETU"),
  boldBullet("5. ", "Safe and dignified burials"),
  boldBullet("6. ", "Community engagement"),
  boldBullet("7. ", "Cross-border coordination and international support"),
  blank(), divider(),

  // ── 8. SUMMARY ───────────────────────────────────────────────────────────
  h1("8.  SUMMARY & KEY MESSAGES"),
  h2("8.1  Summary Table"),
  simpleTable(
    ["Domain", "Key Points"],
    [
      ["The Virus",      "Orthoebolavirus (-ssRNA, Filoviridae); 4 human species; filamentous; BSL-4 pathogen; GP = key virulence factor"],
      ["Epidemiology",   "Discovered 1976 DRC; largest outbreak 2014–16 W. Africa; fruit bats = reservoir; R₀ 1.5–2.5; sub-Saharan Africa"],
      ["Transmission",   "Body fluids only — NOT airborne. Blood, diarrhoea, vomit, semen, corpse. Unsafe burials = major driver"],
      ["Clinical",       "Dry phase (fever, myalgia) → Wet phase (D&V, haemorrhage). CFR 25–90%. Poor prognosis: high VL, confusion, bleeding"],
      ["Diagnosis",      "RT-PCR = gold standard. BSL-4 handling. FBC: leukopenia, thrombocytopenia. Biochem: ↑AST, DIC coagulopathy"],
      ["Treatment",      "Inmazeb™ & Ebanga™ (FDA; Zaire only). Supportive care = cornerstone. No Rx for Sudan/Bundibugyo/Taï Forest"],
      ["Prevention",     "Ervebo® >97% (ring vax). Full PPE + ETU. Contact tracing × 21 days. Safe burial. Community engagement"],
      ["Active threat",  "⚠ 2026 DRC/Uganda Bundibugyo outbreak: IHR Emergency declared May 2026. No approved vaccine for this species"],
    ],
    [2000, 7500]
  ),
  blank(),
  h2("8.2  Critical Learning Points for Medical Students"),
  note("Early recognition + immediate isolation = the single most important clinical action."),
  boldBullet("1. ",  "RT-PCR is the gold standard — never rule out EVD on clinical grounds alone without laboratory confirmation."),
  boldBullet("2. ",  "All samples from suspected EVD patients require BSL-4 biosafety precautions."),
  boldBullet("3. ",  "Inmazeb™ and Ebanga™ are FDA-approved for Zaire species only — no approved treatment for other species."),
  boldBullet("4. ",  "Aggressive supportive care (IV fluids, electrolytes, nutrition) significantly reduces mortality."),
  boldBullet("5. ",  "Ervebo® has >97% efficacy and is deployed via ring vaccination in outbreak settings."),
  boldBullet("6. ",  "Safe and dignified burials are a public health intervention — corpses are infectious."),
  boldBullet("7. ",  "Ebola does NOT spread through the air — contact precautions are sufficient with proper PPE compliance."),
  boldBullet("8. ",  "The DIC-hepatic-adrenal-vascular cascade explains why untreated EVD has such high mortality."),
  boldBullet("9. ",  "Community trust and engagement are as important as medical interventions in outbreak control."),
  boldBullet("10.", "Concurrent outbreak of Bundibugyo species (2026): highlights the gap in vaccines/treatments beyond Zaire species."),
  blank(), divider(),

  // ── REFERENCES ───────────────────────────────────────────────────────────
  h1("REFERENCES"),
  bullet("Centers for Disease Control and Prevention. Ebola Disease Basics. www.cdc.gov/ebola (accessed July 2026)"),
  bullet("World Health Organization. Ebola Disease Fact Sheet. www.who.int/news-room/fact-sheets/detail/ebola-disease (2024)"),
  bullet("World Health Organization. Diagnostic Testing for Ebola and Marburg Virus Diseases: Interim Guidance. December 2024."),
  bullet("Mulangu S, Dodd LE, Davey RT Jr, et al. A Randomized, Controlled Trial of Ebola Virus Disease Therapeutics (PALM RCT). NEJM 2019;381:2293–2303."),
  bullet("Henao-Restrepo AM, Camacho A, Longini IM, et al. Efficacy and effectiveness of an rVSV-vectored vaccine in preventing Ebola virus disease (Lancet Guinea trial). Lancet 2017;389:505–518."),
  bullet("Schieffelin JS, Shaffer JG, Goba A, et al. Clinical Illness and Outcomes in Patients with Ebola in Sierra Leone. NEJM 2014;371:2092–2100."),
  bullet("Chertow DS, Kleine C, Edwards JK, Scaini R, Giuliani R, Sprecher A. Ebola virus disease in West Africa — clinical manifestations and management. NEJM 2014;371:2054–2057."),
  bullet("CDC Public Health Image Library (PHIL) — images used under public domain licence."),
  blank(),
  new Paragraph({
    alignment: AlignmentType.CENTER,
    spacing: { before: 200, after: 80 },
    shading: { type: ShadingType.SOLID, color: RED, fill: RED },
    children: [new TextRun({ text: "  Ebola Virus Disease — Pandemic Module Summary  |  For Medical Students  |  cdc.gov/ebola  ", bold: true, size: 18, color: WHITE, font: "Calibri" })]
  }),
];

// ── HEADER & FOOTER ─────────────────────────────────────────────────────────

const header = new Header({
  children: [
    new Paragraph({
      alignment: AlignmentType.RIGHT,
      border: { bottom: { color: RED, size: 6, space: 2, style: BorderStyle.SINGLE } },
      children: [
        new TextRun({ text: "EBOLA VIRUS DISEASE — PANDEMIC MODULE SUMMARY  |  Medical Student Reference", size: 16, color: "999999", font: "Calibri" })
      ]
    })
  ]
});

const footer = new Footer({
  children: [
    new Paragraph({
      alignment: AlignmentType.CENTER,
      border: { top: { color: RED, size: 6, space: 2, style: BorderStyle.SINGLE } },
      children: [
        new TextRun({ text: "Source: CDC (cdc.gov/ebola) | WHO | NEJM 2019    Page ", size: 16, color: "999999", font: "Calibri" }),
        new TextRun({ children: [new PageNumber()], size: 16, color: RED, font: "Calibri" })
      ]
    })
  ]
});

// ── BUILD DOC ─────────────────────────────────────────────────────────────────

const doc = new Document({
  title: "Ebola Virus Disease – Pandemic Module Summary",
  description: "Comprehensive medical student reference document on Ebola Virus Disease",
  styles: {
    default: {
      document: {
        run: { font: "Calibri", size: 20, color: GRAY }
      }
    }
  },
  sections: [
    {
      properties: {
        page: {
          margin: { top: 720, bottom: 720, left: 900, right: 900 }
        }
      },
      headers: { default: header },
      footers: { default: footer },
      children
    }
  ]
});

Packer.toBuffer(doc).then(buf => {
  fs.writeFileSync("/home/daytona/workspace/ebola-ppt/Ebola_VD_Medical_Student_Summary.docx", buf);
  console.log("SUCCESS — docx written");
}).catch(e => { console.error(e); process.exit(1); });
Running Command

cd /home/daytona/workspace/ebola-ppt && node ebola_word.js 2>&1

Running Command

node -e "const d = require('docx'); console.log(Object.keys(d).filter(k => k.toL…

Running Command

node -e "const {PageNumber, PageNumberElement} = require('docx'); console.log(ty…

Editing File

~/ebola-ppt/ebola_word.js

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/ebola-ppt/ebola_word.js'
Editing File

~/ebola-ppt/ebola_word.js

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/ebola-ppt/ebola_word.js'
Running Command

cd /home/daytona/workspace/ebola-ppt && node ebola_word.js 2>&1

Running Command

ls -lh /home/daytona/workspace/ebola-ppt/Ebola_VD_Medical_Student_Summary.docx &…

Running Command

# Validate by unpacking the docx and checking it's a valid ZIP with expected par…

Document is valid and ready. Here it is:

Ebola VD Medical Student Summary

Word Document · DOCX


What's inside the Word document

Formatting & Design — Red & White theme:
  • Red cover page with module title, topic list, and reference
  • Red header bar on every page with the document title
  • Red footer with page numbers on every page
  • Red Heading 1 banners, red-bordered Heading 2 sections
  • Red-left-border callout boxes for warnings and clinical notes
  • Alternating light/white rows in all tables
Content sections (fully detailed):
SectionWhat's covered
1. Clinical CasePatient vignette, dry phase, wet phase, haemorrhagic features, neurological signs, prognosis table
2. Differential DiagnosisPriority table of 9+ mimics, diagnostic algorithm (6 steps)
3. EpidemiologyVirus classification, 4 species table, full outbreak timeline 1976–2026, transmission, reservoir, R₀
4. Pathogenesis5-step cascade, virulence protein table, immune evasion, DIC mechanism, organ damage
5. Lab DiagnosisFull test comparison table, haematology, biochemistry, coagulation, sample handling, discharge criteria
6. TreatmentInmazeb™ & Ebanga™ drug table with PALM RCT data, full supportive care protocol, investigational agents
7. PreventionVaccine comparison table (Ervebo + Zabdeno/Mvabea), IPC, contact tracing, safe burial, 7 WHO pillars
8. SummaryMaster summary table + 10 critical learning points
References8 cited sources (CDC, WHO, NEJM, Lancet)

Create slides from the document you sent and lemme send u template link

Sure! Go ahead and send the template link and I'll use it to match the design exactly when building the slides from the Word document.

Paste the template link here

I think there might be some confusion — it looks like you may have intended to paste the template link in your message, but it didn't come through! 😊
Please paste the link here and I'll get started right away. It can be:
  • A direct download URL to a .pptx template file
  • A Google Slides template link
  • A SlidesCarnival, SlideModel, Canva, or any other template website URL
Once you share it, I'll extract the design style and build the slides from the Word document content.

https://canva.link/jdtjnvqckwpxfn1

Reading Web Page

https://canva.link/jdtjnvqckwpxfn1

Unfortunately, I can't access Canva links directly — Canva requires a login and doesn't allow automated access to template designs. The link redirects to a login-protected page.
Here's what you can do instead — pick whichever is easiest for you:
Option 1 — Screenshot the template Take a screenshot of the Canva template and send it here. I'll analyse the design (colours, layout, fonts, style) and replicate it.
Option 2 — Describe the template Tell me the key design elements:
  • Background colour
  • Accent/heading colour
  • Layout style (e.g. sidebar, full-width header, split layout)
  • Any icons, shapes, or special visual elements
Option 3 — Download from Canva and send In Canva, click Share → Download → PowerPoint (.pptx) on the template, then share it here. I can read and match that exact layout.
Option 4 — Choose a style I can match popular free template styles — just tell me which one:
  • Clean minimal white + colour accent
  • Dark professional (navy/black)
  • Medical/clinical (blue + white)
  • Bold modern (large type, geometric shapes)
Which works best for you?

Wait

Take your time! I'll be here whenever you're ready. 😊

https://www.canva.com/design/DAHOfPZl_Bg/m_dKozluX5AfH-K8xssPfQ/edit?utm_content=DAHOfPZl_Bg&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton

Asking for Preferences

How do I upload in this chat

You can upload files or images directly in the chat! Here's how:
To upload a file or image:
  • Look for the paperclip 📎 icon or "+" button in the chat input box
  • Click it and select your file from your device
  • Then hit send
What to send:
  1. Screenshot — Take a screenshot of the Canva template and attach it as an image
  2. PPTX file — In Canva, go to Share → Download → PowerPoint (.pptx), then upload that file here
The screenshot option is the fastest — just:
  1. Open the Canva link in your browser
  2. Press Ctrl+PrtSc (Windows) or Cmd+Shift+4 (Mac) to screenshot
  3. Attach the image here
Once I can see the template design, I'll replicate it exactly for the Ebola slides! 🎯
Running Command

cd /home/daytona/workspace/attachments/0c89c374-3952-4b0f-87df-7274ade86f3f && p…

Running Command

python3 /home/daytona/skills/pptx/scripts/thumbnail.py "/home/daytona/workspace/…

analyse_media
Running Command

python3 /home/daytona/skills/pptx/scripts/office/unpack.py \ "/home/daytona/wo…

Running Command

ls "/home/daytona/workspace/attachments/0c89c374-3952-4b0f-87df-7274ade86f3f/" &…

Running Command

ls /home/daytona/workspace/ebola-ppt/template_unpacked/ 2>/dev/null || echo "emp…

Running Command

file "/home/daytona/workspace/attachments/0c89c374-3952-4b0f-87df-7274ade86f3f/B…

Running Command

cp "/home/daytona/workspace/attachments/0c89c374-3952-4b0f-87df-7274ade86f3f/Bla…

Running Command

mkdir -p /home/daytona/workspace/ebola-ppt/tpl && \ cd /home/daytona/workspace/e…

Running Command

ls -lh /home/daytona/workspace/attachments/0c89c374-3952-4b0f-87df-7274ade86f3f/…

Running Command

find / -name "thumbnails.jpg" 2>/dev/null | head -5

Reading File
Writing File

~/ebola-ppt/ebola_bw.js

const pptxgen = require("pptxgenjs");
const fs = require("fs");

const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Ebola Virus Disease – Pandemic Module";

// ── PALETTE (Black & White Minimalist) ─────────────────────────────────────
const BLACK    = "1A1A1A";
const BLACK2   = "111111";
const WHITE    = "FFFFFF";
const LGRAY    = "F2F2F2";
const MGRAY    = "DDDDDD";
const DGRAY    = "888888";
const XGRAY    = "333333";
const OFFWHITE = "FAFAFA";

// ── HELPERS ─────────────────────────────────────────────────────────────────

// Diagonal black band — replicates template's signature diagonal shape
// Drawn as overlapping rectangles that simulate a diagonal
function diagBand(slide) {
  // Bottom-left large black triangle area (simulated with rotated rect)
  slide.addShape(pres.ShapeType.rect, {
    x: -0.5, y: 3.8, w: 5.5, h: 3.5,
    fill: { color: BLACK }, line: { color: BLACK },
    rotate: -18
  });
  // Top-right corner black accent
  slide.addShape(pres.ShapeType.rect, {
    x: 7.8, y: -0.5, w: 3.2, h: 2.0,
    fill: { color: BLACK }, line: { color: BLACK },
    rotate: -18
  });
}

// Light grey microbe/bacteria outline circles — decorative background
function microbeDecor(slide, x, y, size = 0.9) {
  slide.addShape(pres.ShapeType.ellipse, {
    x, y, w: size, h: size,
    fill: { type: "none" }, line: { color: MGRAY, pt: 1.5 }
  });
  slide.addShape(pres.ShapeType.ellipse, {
    x: x + size * 0.1, y: y - size * 0.15, w: size * 0.35, h: size * 0.35,
    fill: { type: "none" }, line: { color: MGRAY, pt: 1 }
  });
}

// Standard content slide header
function addHeader(slide, sectionNum, title, subtitle) {
  // Top black bar
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 10, h: 0.75,
    fill: { color: BLACK }, line: { color: BLACK }
  });
  // Section number box
  if (sectionNum) {
    slide.addShape(pres.ShapeType.rect, {
      x: 0, y: 0, w: 0.55, h: 0.75,
      fill: { color: XGRAY }, line: { color: XGRAY }
    });
    slide.addText(String(sectionNum).padStart(2, "0"), {
      x: 0, y: 0, w: 0.55, h: 0.75,
      fontSize: 13, bold: true, color: WHITE, align: "center", valign: "middle"
    });
  }
  slide.addText(title, {
    x: 0.65, y: 0.06, w: 9.1, h: 0.44,
    fontSize: 20, bold: true, color: WHITE, valign: "middle", margin: 0, fontFace: "Georgia"
  });
  if (subtitle) {
    slide.addText(subtitle, {
      x: 0.65, y: 0.5, w: 9.1, h: 0.22,
      fontSize: 10, italic: true, color: MGRAY, valign: "middle", margin: 0, fontFace: "Calibri"
    });
  }
}

// Thin bottom rule
function footer(slide, src = "Source: CDC (cdc.gov/ebola)  |  WHO  |  NEJM 2019") {
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 5.34, w: 10, h: 0.29,
    fill: { color: BLACK }, line: { color: BLACK }
  });
  slide.addText(src, {
    x: 0.3, y: 5.35, w: 9.4, h: 0.26,
    fontSize: 7.5, color: MGRAY, italic: true, valign: "middle", margin: 0, fontFace: "Calibri"
  });
}

// Section divider label
function sLabel(slide, text, x, y, w = 9.5) {
  slide.addShape(pres.ShapeType.rect, {
    x, y, w, h: 0.3,
    fill: { color: BLACK }, line: { color: BLACK }
  });
  slide.addText(text, {
    x: x + 0.12, y, w: w - 0.15, h: 0.3,
    fontSize: 10.5, bold: true, color: WHITE, valign: "middle", margin: 0, fontFace: "Calibri"
  });
}

// Bullet text box
function bBox(slide, items, x, y, w, h, fs = 10.5) {
  const arr = items.map((t, i) => ({
    text: t,
    options: {
      bullet: t.startsWith("  ") ? { indent: 15 } : (t === "" ? false : { type: "bullet" }),
      breakLine: i < items.length - 1,
      fontSize: t.startsWith("  ") ? fs - 0.5 : fs,
      color: t.startsWith("  ") ? DGRAY : BLACK,
      bold: !t.startsWith("  ") && t.endsWith(":"),
      paraSpaceAfter: t === "" ? 3 : 1
    }
  }));
  slide.addText(arr, {
    x, y, w, h,
    fontFace: "Calibri", valign: "top",
    fill: { color: WHITE },
    line: { color: MGRAY, pt: 0.75 }
  });
}

// Stat card (black header, white body)
function statCard(slide, icon, label, value, x, y, w = 2.2, h = 1.0) {
  slide.addShape(pres.ShapeType.rect, { x, y, w, h, fill: { color: WHITE }, line: { color: BLACK, pt: 1.5 } });
  slide.addShape(pres.ShapeType.rect, { x, y, w, h: 0.38, fill: { color: BLACK }, line: { color: BLACK } });
  slide.addText(icon + "  " + label, { x: x + 0.05, y, w: w - 0.1, h: 0.38, fontSize: 9.5, bold: true, color: WHITE, align: "center", valign: "middle" });
  slide.addText(value, { x: x + 0.05, y: y + 0.4, w: w - 0.1, h: 0.56, fontSize: 13, bold: true, color: BLACK, align: "center", valign: "middle" });
}

// Load images
function loadImg(f) {
  if (!fs.existsSync(f)) return null;
  const buf = fs.readFileSync(f);
  if (buf[0] === 0xFF && buf[1] === 0xD8) return "image/jpeg;base64," + buf.toString("base64");
  return null;
}
const IMG_VIRUS = loadImg("/home/daytona/workspace/ebola-ppt/ebola_phil.jpg");
const IMG_PPE   = loadImg("/home/daytona/workspace/ebola-ppt/ebola_ppe.jpg");
const IMG_LAB   = loadImg("/home/daytona/workspace/ebola-ppt/ebola_kit.jpg");
const IMG_PPE2  = loadImg("/home/daytona/workspace/ebola-ppt/ebola_ppe2.jpg");

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: WHITE };

  // Diagonal black band (bottom-left)
  s.addShape(pres.ShapeType.rect, { x: -1, y: 3.6, w: 6.5, h: 4.0, fill: { color: BLACK }, line: { color: BLACK }, rotate: -16 });
  // Top-right black accent
  s.addShape(pres.ShapeType.rect, { x: 7.6, y: -0.6, w: 3.5, h: 2.2, fill: { color: BLACK }, line: { color: BLACK }, rotate: -16 });

  // Microbe decorations
  microbeDecor(s, 0.3, 0.2, 1.1);
  microbeDecor(s, 8.2, 3.5, 1.3);
  microbeDecor(s, 6.5, 1.1, 0.8);

  // Module tag
  s.addText("PANDEMIC MODULE", { x: 2.0, y: 0.38, w: 3.5, h: 0.3, fontSize: 9, bold: true, color: DGRAY, charSpacing: 4, fontFace: "Calibri" });

  // Main title
  s.addText("EBOLA", { x: 1.8, y: 0.7, w: 6, h: 1.2, fontSize: 68, bold: true, color: BLACK, fontFace: "Georgia" });
  s.addText("VIRUS DISEASE", { x: 1.8, y: 1.75, w: 7, h: 0.72, fontSize: 30, bold: true, color: BLACK, fontFace: "Georgia" });

  // Divider line
  s.addShape(pres.ShapeType.line, { x: 1.8, y: 2.55, w: 6.0, h: 0, line: { color: BLACK, pt: 2 } });
  s.addText("A Comprehensive Clinical & Public Health Overview", { x: 1.8, y: 2.65, w: 6.5, h: 0.38, fontSize: 13, italic: true, color: XGRAY, fontFace: "Calibri" });

  // Topics column (white text on the black band area)
  const topics = ["01  Clinical Case","02  Differential Diagnosis","03  Epidemiology","04  Pathogenesis","05  Lab Diagnosis","06  Treatment","07  Prevention & Control","08  Summary"];
  topics.forEach((t, i) => {
    const row = i % 4; const col = Math.floor(i / 4);
    s.addText(t, { x: 1.8 + col * 4.0, y: 3.18 + row * 0.52, w: 3.8, h: 0.48, fontSize: 11,
      color: i < 4 ? WHITE : BLACK, fontFace: "Calibri",
      bold: false });
  });

  s.addText("Reference: www.cdc.gov/ebola  |  WHO Fact Sheet  |  NEJM PALM RCT 2019", {
    x: 1.8, y: 5.2, w: 7, h: 0.25, fontSize: 7.5, italic: true, color: DGRAY, fontFace: "Calibri"
  });
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 2 — CLINICAL CASE (Part 1)
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: OFFWHITE };
  microbeDecor(s, 9.0, 0.8, 1.0);
  microbeDecor(s, 8.5, 4.5, 0.8);
  addHeader(s, "01", "CLINICAL CASE", "Real-world patient presentation of Ebola Virus Disease");

  // Case vignette box
  s.addShape(pres.ShapeType.rect, { x: 0.25, y: 0.82, w: 9.5, h: 1.22, fill: { color: WHITE }, line: { color: BLACK, pt: 1.5 } });
  s.addShape(pres.ShapeType.rect, { x: 0.25, y: 0.82, w: 0.18, h: 1.22, fill: { color: BLACK }, line: { color: BLACK } });
  s.addText([
    { text: "CASE VIGNETTE   ", options: { bold: true, color: BLACK, fontSize: 11, fontFace: "Georgia" } },
    { text: "A 32-year-old male HCW presents to Kikwit referral hospital, DRC with 4-day history of sudden fever (39.8°C), severe headache, diffuse myalgia, and fatigue. He cared for a confirmed EVD patient 10 days prior without adequate PPE. By day 6, he develops profuse watery diarrhoea, vomiting, abdominal pain, and conjunctival haemorrhage. BP 90/60 mmHg. Immediate isolation initiated.", options: { fontSize: 10.5, color: XGRAY, fontFace: "Calibri", italic: true } }
  ], { x: 0.52, y: 0.86, w: 9.15, h: 1.14, valign: "top" });

  sLabel(s, "SYMPTOM PROGRESSION TIMELINE", 0.25, 2.12, 9.5);

  const phases = [
    { day: "Day 0", label: "Exposure\n(Asymptomatic)", color: XGRAY, icon: "☠" },
    { day: "Days 2–7", label: "'DRY PHASE'\nFever, Headache,\nMyalgia, Fatigue", color: "444444", icon: "🌡" },
    { day: "Days 7–12", label: "'WET PHASE'\nDiarrhoea, Vomiting,\nHaemorrhage, Shock", color: "222222", icon: "🩸" },
    { day: "Days 10–16", label: "OUTCOME\nRecovery or Death\nCFR 25–90%", color: BLACK, icon: "⚕" },
  ];
  phases.forEach((p, i) => {
    const x = 0.3 + i * 2.37;
    s.addShape(pres.ShapeType.rect, { x, y: 2.48, w: 2.2, h: 2.65, fill: { color: WHITE }, line: { color: p.color, pt: 2 } });
    s.addShape(pres.ShapeType.rect, { x, y: 2.48, w: 2.2, h: 0.48, fill: { color: p.color }, line: { color: p.color } });
    s.addText(p.icon + "  " + p.day, { x, y: 2.48, w: 2.2, h: 0.48, fontSize: 10.5, bold: true, color: WHITE, align: "center", valign: "middle" });
    s.addText(p.label, { x: x + 0.1, y: 3.02, w: 2.03, h: 2.0, fontSize: 10.5, color: BLACK, wrap: true, valign: "top", align: "center", fontFace: "Calibri" });
    if (i < phases.length - 1) {
      s.addShape(pres.ShapeType.line, { x: x + 2.22, y: 3.78, w: 0.13, h: 0, line: { color: BLACK, pt: 1.5 } });
    }
  });
  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 3 — CLINICAL CASE (Part 2)
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: WHITE };
  microbeDecor(s, 0.1, 4.3, 1.0);
  addHeader(s, "01", "CLINICAL CASE (cont.)", "Signs, symptoms, haemorrhagic features & prognosis");

  if (IMG_VIRUS) {
    s.addImage({ data: IMG_VIRUS, x: 6.85, y: 0.82, w: 2.9, h: 2.3 });
    s.addShape(pres.ShapeType.rect, { x: 6.85, y: 3.12, w: 2.9, h: 0.24, fill: { color: BLACK }, line: { color: BLACK } });
    s.addText("Ebola virus particles – CDC/PHIL", { x: 6.85, y: 3.12, w: 2.9, h: 0.24, fontSize: 7, color: WHITE, align: "center", valign: "middle" });
  }

  const left = [
    "DRY PHASE (Days 1–5):",
    "  • Sudden high-grade fever (>38.6°C)",
    "  • Severe headache, myalgia, arthralgia",
    "  • Extreme fatigue and generalised weakness",
    "  • Sore throat, retrosternal chest pain",
    "  • Anorexia, nausea (no vomiting yet)",
    "",
    "WET PHASE (Days 6–12):",
    "  • Profuse diarrhoea (>10 litres/day)",
    "  • Persistent vomiting, abdominal cramps",
    "  • Maculopapular rash on trunk (day 5–7)",
    "  • Hiccups — poor prognostic sign",
    "  • Impaired renal and hepatic function",
  ];
  const right = [
    "HAEMORRHAGIC FEATURES (<50% cases):",
    "  • Conjunctival haemorrhage",
    "  • Petechiae, ecchymoses",
    "  • Melaena, haematemesis",
    "  • Bleeding from IV sites, gums",
    "",
    "NEUROLOGICAL:",
    "  • Confusion, delirium, seizures",
    "",
    "POOR PROGNOSIS INDICATORS:",
    "  • High viral load at admission",
    "  • Early confusion / hiccups",
    "  • Haemorrhagic manifestations",
    "  • CFR: 25–90% (average ~50%)",
  ];
  bBox(s, left, 0.25, 0.82, 3.3, 4.38);
  bBox(s, right, 3.65, 0.82, 3.1, 4.38);
  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 4 — DIFFERENTIAL DIAGNOSIS (Part 1)
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: OFFWHITE };
  microbeDecor(s, 9.0, 4.2, 1.1);
  addHeader(s, "02", "DIFFERENTIAL DIAGNOSIS", "Diseases that mimic Ebola — isolate first, investigate second");

  // Warning
  s.addShape(pres.ShapeType.rect, { x: 0.25, y: 0.82, w: 9.5, h: 0.3, fill: { color: BLACK }, line: { color: BLACK } });
  s.addText("⚠  ISOLATE FIRST — do not delay isolation to complete diagnostic workup", {
    x: 0.35, y: 0.82, w: 9.3, h: 0.3, fontSize: 10.5, bold: true, color: WHITE, valign: "middle", fontFace: "Calibri"
  });

  const rows = [
    ["Malaria",               "Fever, headache, myalgia — most common mimicker",    "RDT + blood film",    "HIGH"],
    ["Typhoid Fever",         "Sustained fever, rose spots, hepatosplenomegaly",    "Widal + culture",     "HIGH"],
    ["Lassa Fever",           "Haemorrhagic fever, facial oedema, deafness",        "RT-PCR (Lassa)",      "HIGH"],
    ["Marburg Virus",         "Clinically identical to Ebola — PCR only differentiates", "RT-PCR",         "HIGH"],
    ["Dengue Fever",          "Bone pain, thrombocytopenia, tourniquet +ve",         "NS1 antigen",         "MED"],
    ["Yellow Fever",          "Jaundice dominant, vaccine history relevant",         "Serology",            "MED"],
    ["Meningococcal Disease", "Purpuric rash, meningism, septicaemia",               "CSF + blood culture", "MED"],
    ["Bacterial Septicaemia", "Any bacterial focus; leukocytosis",                   "Blood cultures, PCT", "MED"],
  ];
  const ths = ["DISEASE","DISTINGUISHING FEATURES","DIAGNOSTIC TEST","PRIORITY"];
  const tws = [1.85, 4.2, 1.88, 1.0];
  const txs = [0.25, 2.13, 6.36, 8.27];

  ths.forEach((h, i) => {
    s.addShape(pres.ShapeType.rect, { x: txs[i], y: 1.18, w: tws[i], h: 0.3, fill: { color: BLACK }, line: { color: BLACK } });
    s.addText(h, { x: txs[i], y: 1.18, w: tws[i], h: 0.3, fontSize: 9, bold: true, color: WHITE, align: "center", valign: "middle", fontFace: "Calibri" });
  });
  rows.forEach((r, i) => {
    const ry = 1.51 + i * 0.47;
    const bg = i % 2 === 0 ? LGRAY : WHITE;
    txs.forEach((x, ci) => {
      s.addShape(pres.ShapeType.rect, { x, y: ry, w: tws[ci], h: 0.44, fill: { color: bg }, line: { color: MGRAY, pt: 0.5 } });
    });
    [r[0],r[1],r[2],r[3]].forEach((v, ci) => {
      if (ci === 3) {
        const pc = v === "HIGH" ? BLACK : XGRAY;
        s.addShape(pres.ShapeType.rect, { x: txs[ci] + 0.06, y: ry + 0.07, w: 0.88, h: 0.3, fill: { color: pc }, line: { color: pc } });
        s.addText(v, { x: txs[ci] + 0.06, y: ry + 0.07, w: 0.88, h: 0.3, fontSize: 8.5, bold: true, color: WHITE, align: "center", valign: "middle" });
      } else {
        s.addText(v, { x: txs[ci] + (ci === 1 ? 0.06 : 0), y: ry, w: tws[ci], h: 0.44, fontSize: ci === 0 ? 10 : 9.5, color: BLACK, align: ci === 0 ? "center" : "left", valign: "middle", bold: ci === 0, fontFace: "Calibri" });
      }
    });
  });
  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 5 — DIFFERENTIAL DIAGNOSIS (Part 2)
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: WHITE };
  microbeDecor(s, 0.1, 0.8, 0.9);
  addHeader(s, "02", "DIFFERENTIAL DIAGNOSIS (cont.)", "Additional conditions and structured diagnostic algorithm");

  const left = [
    "ADDITIONAL DIFFERENTIALS:",
    "  • Crimean-Congo Haemorrhagic Fever",
    "    (tick exposure, haemorrhage)",
    "  • Rift Valley Fever (animal contact)",
    "  • Viral hepatitis (jaundice dominant)",
    "  • Shigellosis / severe gastroenteritis",
    "  • Rickettsial disease (rash, eschar)",
    "  • Mpox (vesicular rash, lymphadenopathy)",
    "  • COVID-19 (respiratory > GI)",
    "  • Hantavirus (rodent exposure)",
    "",
    "KEY EXPOSURE HISTORY QUESTIONS:",
    "  • Travel to sub-Saharan Africa?",
    "  • Contact with confirmed EVD case?",
    "  • Handling bushmeat / bats?",
    "  • Attended funeral without PPE?",
  ];
  const right = [
    "DIAGNOSTIC ALGORITHM (6 Steps):",
    "",
    "  1. Assess travel + exposure history",
    "  2. ISOLATE immediately if EVD suspected",
    "  3. Notify infection control + public health",
    "  4. Collect specimens under full PPE",
    "  5. RT-PCR Ebola + Malaria RDT (parallel)",
    "  6. FBC, LFT, RFT, coagulation, cultures",
    "",
    "INTERPRETATION CLUES:",
    "  • Leukopenia early → viral (EVD pattern)",
    "  • Leukocytosis → bacterial sepsis",
    "  • ↑↑ AST >> ALT → EVD hepatic pattern",
    "  • DIC signs → EVD / sepsis / CCHF",
    "  ⚠ All lab work INSIDE isolation only",
  ];
  bBox(s, left, 0.25, 0.82, 4.7, 4.38);
  bBox(s, right, 5.05, 0.82, 4.7, 4.38);
  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 6 — EPIDEMIOLOGY (Part 1)
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: OFFWHITE };
  microbeDecor(s, 8.8, 0.85, 1.2);
  addHeader(s, "03", "EPIDEMIOLOGY", "Global distribution, outbreaks & transmission dynamics");

  const stats = [
    { icon: "🦠", label: "DISCOVERED", value: "1976, DRC" },
    { icon: "🌍", label: "REGION", value: "Sub-Saharan Africa" },
    { icon: "💀", label: "CASE FATALITY", value: "25 – 90%" },
    { icon: "⏱", label: "INCUBATION", value: "2 – 21 days" },
  ];
  stats.forEach((st, i) => statCard(s, st.icon, st.label, st.value, 0.25 + i * 2.4, 0.82));

  sLabel(s, "MAJOR OUTBREAKS (1976 – 2026)", 0.25, 1.96, 9.5);

  const rows = [
    ["1976",    "DRC / Sudan",              "601",    "53–88%", "First identified — 2 simultaneous events"],
    ["1995",    "Kikwit, DRC",              "315",    "81%",    "Urban spread; international alarm"],
    ["2000-01", "Uganda",                   "425",    "53%",    "Sudan species"],
    ["2014-16", "W. Africa (Guin/SL/Lib)", "28,616", "40%",    "Largest in history — international emergency"],
    ["2018-20", "North Kivu, DRC",          "3,481",  "66%",    "2nd largest; conflict zone; vaccine deployed"],
    ["2022",    "Uganda",                   "164",    "55%",    "Sudan species; no approved vaccine"],
    ["2025-26", "DRC/Uganda (Bundibugyo)", "Active", "~40%",   "⚠ Active 2026 — IHR Emergency declared May 2026"],
  ];
  const ths = ["Year","Location","Cases","CFR","Notes"];
  const tws = [0.72, 2.62, 0.82, 0.72, 4.87];
  const txs = [0.25, 0.99, 3.64, 4.49, 5.24];

  ths.forEach((h, i) => {
    s.addShape(pres.ShapeType.rect, { x: txs[i], y: 2.3, w: tws[i], h: 0.28, fill: { color: BLACK }, line: { color: BLACK } });
    s.addText(h, { x: txs[i], y: 2.3, w: tws[i], h: 0.28, fontSize: 9, bold: true, color: WHITE, align: "center", valign: "middle", fontFace: "Calibri" });
  });
  rows.forEach((r, i) => {
    const ry = 2.61 + i * 0.38;
    const bg = i === 6 ? LGRAY : (i % 2 === 0 ? LGRAY : WHITE);
    txs.forEach((x, ci) => {
      s.addShape(pres.ShapeType.rect, { x, y: ry, w: tws[ci], h: 0.36, fill: { color: bg }, line: { color: MGRAY, pt: 0.5 } });
    });
    r.forEach((v, ci) => {
      s.addText(v, { x: txs[ci] + (ci === 4 ? 0.05 : 0), y: ry, w: tws[ci], h: 0.36, fontSize: ci === 4 ? 8.5 : 9.5, color: BLACK, align: ci === 4 ? "left" : "center", valign: "middle", italic: ci === 4, fontFace: "Calibri" });
    });
  });
  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 7 — EPIDEMIOLOGY (Part 2)
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: WHITE };
  microbeDecor(s, 0.1, 3.8, 1.1);
  addHeader(s, "03", "EPIDEMIOLOGY (cont.)", "Transmission routes, reservoir & high-risk groups");

  if (IMG_PPE2) {
    s.addImage({ data: IMG_PPE2, x: 6.9, y: 0.82, w: 2.85, h: 2.2 });
    s.addShape(pres.ShapeType.rect, { x: 6.9, y: 3.02, w: 2.85, h: 0.24, fill: { color: BLACK }, line: { color: BLACK } });
    s.addText("Healthcare worker in PPE — CDC/PHIL", { x: 6.9, y: 3.02, w: 2.85, h: 0.24, fontSize: 7, color: WHITE, align: "center", valign: "middle" });
  }

  const left = [
    "HOW EBOLA SPREADS:",
    "  • Direct contact with blood/body fluids",
    "    of infected persons (alive or dead)",
    "  • Contact with contaminated objects",
    "  • Unsafe funeral/burial practices",
    "  • Sexual contact — virus in semen",
    "    persists 500+ days post-recovery",
    "  • Zoonotic spillover: bats, NHP",
    "",
    "NOT spread by:",
    "  • Air/aerosols (normal conditions)",
    "  • Food or water",
    "  • Mosquitoes or insects",
    "  • Casual contact or proximity",
  ];
  const right = [
    "NATURAL RESERVOIR:",
    "  • Fruit bats — Pteropodidae family",
    "    – Hypsignathus monstrosus",
    "    – Epomops franqueti",
    "    – Myonycteris torquata",
    "",
    "HIGH-RISK GROUPS:",
    "  • Healthcare workers (highest risk)",
    "  • Family caregivers",
    "  • Burial ceremony participants",
    "  • Laboratory personnel",
    "  • Hunters / bushmeat handlers",
    "",
    "R₀: 1.5–2.5 (basic reproduction number)",
    "Incubation: 2–21 days (avg 8–10 days)",
  ];
  bBox(s, left, 0.25, 0.82, 4.7, 4.38);
  bBox(s, right, 5.05, 0.82, 1.78, 4.38);
  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 8 — PATHOGENESIS (Part 1)
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: OFFWHITE };
  microbeDecor(s, 8.8, 3.6, 1.0);
  addHeader(s, "04", "PATHOGENESIS", "Viral entry, replication, and the organ-damage cascade");

  sLabel(s, "5-STEP PATHOGENIC CASCADE", 0.25, 0.82, 9.5);

  const steps = [
    { n: "01", title: "ENTRY", body: "GP binds NPC1 receptor on macrophages / DCs via endosomal route" },
    { n: "02", title: "REPLICATION", body: "VP35 & VP24 block IFN signalling → innate immunity disabled" },
    { n: "03", title: "SPREAD", body: "Lymphatics → liver, spleen, adrenals, kidneys, gonads" },
    { n: "04", title: "CYTOKINE STORM", body: "TNF-α, IL-6, IL-8 ↑↑ → vascular damage + fluid leakage" },
    { n: "05", title: "ORGAN FAILURE", body: "Hepatic necrosis, DIC, adrenal failure, hypovolaemic shock" },
  ];
  steps.forEach((st, i) => {
    const x = 0.22 + i * 1.92;
    const shade = ["1A1A1A","2A2A2A","3A3A3A","4A4A4A","555555"][i];
    s.addShape(pres.ShapeType.rect, { x, y: 1.15, w: 1.76, h: 0.42, fill: { color: shade }, line: { color: shade } });
    s.addText(`${st.n}  ${st.title}`, { x, y: 1.15, w: 1.76, h: 0.42, fontSize: 9.5, bold: true, color: WHITE, align: "center", valign: "middle", fontFace: "Calibri" });
    s.addShape(pres.ShapeType.rect, { x, y: 1.6, w: 1.76, h: 1.45, fill: { color: WHITE }, line: { color: MGRAY, pt: 1 } });
    s.addText(st.body, { x: x + 0.08, y: 1.63, w: 1.62, h: 1.38, fontSize: 10, color: BLACK, wrap: true, valign: "top", fontFace: "Calibri" });
    if (i < steps.length - 1) {
      s.addShape(pres.ShapeType.line, { x: x + 1.78, y: 1.83, w: 0.12, h: 0, line: { color: BLACK, pt: 1.5 } });
    }
  });

  sLabel(s, "KEY VIRULENCE PROTEINS", 0.25, 3.14, 9.5);

  const proteins = [
    { p: "GP (Glycoprotein)", role: "Cell entry via NPC1; shed sGP decoys neutralising antibodies" },
    { p: "VP35",              role: "Blocks IFN-β induction → disables innate antiviral response" },
    { p: "VP24",              role: "Blocks JAK-STAT signalling → prevents interferon signalling" },
    { p: "VP40 (Matrix)",     role: "Drives budding and release of new viral particles" },
    { p: "L protein (RdRp)",  role: "RNA-dependent RNA polymerase — replicates -ssRNA genome" },
  ];
  proteins.forEach((p, i) => {
    const ry = 3.48 + i * 0.36;
    const bg = i % 2 === 0 ? LGRAY : WHITE;
    s.addShape(pres.ShapeType.rect, { x: 0.25, y: ry, w: 2.25, h: 0.34, fill: { color: bg }, line: { color: MGRAY, pt: 0.5 } });
    s.addShape(pres.ShapeType.rect, { x: 2.53, y: ry, w: 7.22, h: 0.34, fill: { color: bg }, line: { color: MGRAY, pt: 0.5 } });
    s.addText(p.p, { x: 0.32, y: ry, w: 2.1, h: 0.34, fontSize: 9.5, bold: true, color: BLACK, valign: "middle", fontFace: "Calibri" });
    s.addText(p.role, { x: 2.6, y: ry, w: 7.1, h: 0.34, fontSize: 9.5, color: XGRAY, valign: "middle", fontFace: "Calibri" });
  });
  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 9 — PATHOGENESIS (Part 2)
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: WHITE };
  microbeDecor(s, 8.9, 4.3, 1.0);
  addHeader(s, "04", "PATHOGENESIS (cont.)", "Immune evasion, DIC coagulopathy & organ-specific damage");

  const left = [
    "IMMUNE EVASION:",
    "  • VP35 blocks IFN-β induction",
    "  • VP24 blocks JAK-STAT signalling",
    "  • sGP decoys neutralising antibodies",
    "  • Dendritic cell dysfunction →",
    "    no T-cell priming → lymphopenia",
    "  • NK cell and monocyte impairment",
    "",
    "DIC — COAGULOPATHY:",
    "  • Tissue factor upregulation",
    "  • Platelet activation → consumption",
    "  • ↑ FDP, ↓ fibrinogen, ↑ PT/aPTT",
    "  • Microthrombi AND haemorrhage",
    "  • Endothelial disruption → 3rd spacing",
  ];
  const right = [
    "ORGAN-SPECIFIC DAMAGE:",
    "",
    "  LIVER:",
    "  • Kupffer cell infection → hepatocyte",
    "    necrosis → ↑↑ AST >> ALT",
    "  • Impaired clotting factor synthesis",
    "",
    "  ADRENAL GLANDS:",
    "  • Cortical necrosis → adrenal insufficiency",
    "  • Refractory hypotension and shock",
    "",
    "  KIDNEYS:",
    "  • Proteinuria, oliguria, AKI",
    "",
    "  VASCULAR ENDOTHELIUM:",
    "  • Permeability ↑ → pulmonary oedema,",
    "    hypovolaemia, circulatory collapse",
  ];
  bBox(s, left, 0.25, 0.82, 4.7, 4.38);
  bBox(s, right, 5.05, 0.82, 4.7, 4.38);
  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 10 — LAB DIAGNOSIS (Part 1)
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: OFFWHITE };
  microbeDecor(s, 0.1, 4.1, 0.9);
  addHeader(s, "05", "LAB DIAGNOSIS", "Confirming Ebola — tests, biosafety & interpretation");

  s.addShape(pres.ShapeType.rect, { x: 0.25, y: 0.82, w: 9.5, h: 0.3, fill: { color: BLACK }, line: { color: BLACK } });
  s.addText("⚠  BIOSAFETY: All suspected EVD samples require BSL-4 precautions — inactivate before transfer out of BSL-4 facilities", {
    x: 0.35, y: 0.82, w: 9.3, h: 0.3, fontSize: 10, bold: true, color: WHITE, valign: "middle", fontFace: "Calibri"
  });

  if (IMG_LAB) {
    s.addImage({ data: IMG_LAB, x: 7.2, y: 1.18, w: 2.55, h: 1.92 });
    s.addShape(pres.ShapeType.rect, { x: 7.2, y: 3.1, w: 2.55, h: 0.22, fill: { color: BLACK }, line: { color: BLACK } });
    s.addText("PCR / lab test kit — CDC/PHIL", { x: 7.2, y: 3.1, w: 2.55, h: 0.22, fontSize: 7, color: WHITE, align: "center", valign: "middle" });
  }

  const rows = [
    ["RT-PCR (Real-Time)",       "Molecular",   "Days 3+",  "Gold standard. Detects viral RNA. 24-48h result.",          "GOLD STD"],
    ["ELISA Antigen Capture",    "Immunological","Days 3-7", "Detects NP/GP antigen. High sensitivity in acute phase.",  "CONFIRM"],
    ["IgM / IgG ELISA",          "Serology",    "Days 8+",  "IgM rises early; IgG persists. Serosurveys.",               "CONFIRM"],
    ["Rapid Antigen Test",        "POC",         "Days 3-10","Field use. Less sensitive than PCR. Triage only.",          "SCREEN"],
    ["Virus Isolation",           "Culture",     "Days 1+",  "BSL-4 labs only. Definitive but not routine.",              "RESEARCH"],
  ];
  const ths = ["TEST","TYPE","TIMING","NOTES","ROLE"];
  const tws = [2.0, 1.35, 0.88, 3.92, 1.0];
  const txs = [0.25, 2.28, 3.66, 4.57, 8.52];

  ths.forEach((h, i) => {
    s.addShape(pres.ShapeType.rect, { x: txs[i], y: 1.18, w: tws[i], h: 0.28, fill: { color: XGRAY }, line: { color: XGRAY } });
    s.addText(h, { x: txs[i], y: 1.18, w: tws[i], h: 0.28, fontSize: 9, bold: true, color: WHITE, align: "center", valign: "middle", fontFace: "Calibri" });
  });
  rows.forEach((r, i) => {
    const ry = 1.49 + i * 0.47;
    const bg = i % 2 === 0 ? LGRAY : WHITE;
    txs.forEach((x, ci) => {
      s.addShape(pres.ShapeType.rect, { x, y: ry, w: tws[ci], h: 0.44, fill: { color: bg }, line: { color: MGRAY, pt: 0.5 } });
    });
    r.forEach((v, ci) => {
      if (ci === 4) {
        const pc = v === "GOLD STD" ? BLACK : v === "CONFIRM" ? XGRAY : DGRAY;
        s.addShape(pres.ShapeType.rect, { x: txs[ci] + 0.06, y: ry + 0.07, w: 0.88, h: 0.3, fill: { color: pc }, line: { color: pc } });
        s.addText(v, { x: txs[ci] + 0.06, y: ry + 0.07, w: 0.88, h: 0.3, fontSize: 8, bold: true, color: WHITE, align: "center", valign: "middle" });
      } else {
        s.addText(v, { x: txs[ci] + (ci === 3 ? 0.06 : 0), y: ry, w: tws[ci], h: 0.44, fontSize: ci === 3 ? 9 : 10, color: BLACK, align: ci === 3 ? "left" : "center", valign: "middle", bold: ci === 0, italic: ci === 3, fontFace: "Calibri" });
      }
    });
  });
  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 11 — LAB DIAGNOSIS (Part 2)
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: WHITE };
  microbeDecor(s, 8.9, 4.2, 1.0);
  addHeader(s, "05", "LAB DIAGNOSIS (cont.)", "Haematology, biochemistry, coagulation & sample handling");

  const left = [
    "HAEMATOLOGICAL FINDINGS:",
    "  • Leukopenia early → leukocytosis late",
    "  • Thrombocytopenia (often <50,000/µL)",
    "  • Atypical lymphocytes, band cells",
    "",
    "BIOCHEMISTRY:",
    "  • ↑↑ AST >> ALT (hepatic injury)",
    "  • ↑ Creatinine, ↑ BUN (AKI)",
    "  • ↓ Albumin, ↓ total protein",
    "  • ↑ CRP, ↑ ferritin",
    "  • Hyponatraemia, hypokalaemia",
    "",
    "COAGULATION (DIC):",
    "  • ↑ PT, ↑ aPTT",
    "  • ↑ D-dimer, ↑ FDP, ↓ fibrinogen",
  ];
  const right = [
    "SAMPLE COLLECTION (WHO/CDC 2024):",
    "  • Whole blood (EDTA) or plasma",
    "  • Avoid oral/buccal swabs in live pts",
    "  • Chemical inactivation before transport",
    "  • Triple packaging — IATA P650",
    "  • Send to BSL-4 reference lab",
    "",
    "TESTING WINDOW:",
    "  • Days 1-3: May be PCR negative",
    "  • Days 3-7: Best window for PCR/Ag",
    "  • Days 8+: Serology (IgM/IgG) rises",
    "  • Repeat PCR if initial -ve + symptoms",
    "",
    "DISCHARGE CRITERIA (WHO):",
    "  • 2× negative RT-PCR ≥48 h apart",
    "  • Clinically asymptomatic at discharge",
  ];
  bBox(s, left, 0.25, 0.82, 4.7, 4.38);
  bBox(s, right, 5.05, 0.82, 4.7, 4.38);
  footer(s, "Source: WHO Diagnostic Testing Guidance Dec 2024 | CDC");
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 12 — TREATMENT (Part 1)
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: OFFWHITE };
  microbeDecor(s, 0.1, 0.8, 0.9);
  addHeader(s, "06", "TREATMENT", "FDA-approved monoclonal antibody therapies for Ebola (Zaire species)");

  const drugs = [
    {
      name: "INMAZEB™",
      generic: "Atoltivimab + Maftivimab + Odesivimab-ebgn",
      type: "3-Monoclonal Antibody Cocktail  |  Single IV infusion  |  FDA Oct 2020",
      mech: "Binds GP at 3 distinct epitopes → blocks viral entry from multiple sites simultaneously",
      efficacy: "PALM RCT (DRC 2019): 36% mortality vs 49% comparator — significant survival benefit",
    },
    {
      name: "EBANGA™",
      generic: "Ansuvimab-zykl  (mAb114)",
      type: "Single Monoclonal Antibody  |  Single IV infusion  |  FDA Dec 2020",
      mech: "Binds GP receptor-binding domain → blocks NPC1 interaction and endosomal fusion",
      efficacy: "PALM RCT: 35% mortality — BEST survival outcome in the entire trial",
    }
  ];

  drugs.forEach((d, i) => {
    const y = 0.88 + i * 2.15;
    s.addShape(pres.ShapeType.rect, { x: 0.25, y, w: 9.5, h: 2.0, fill: { color: i === 0 ? BLACK : XGRAY }, line: { color: WHITE, pt: 1.5 } });
    s.addText(d.name, { x: 0.42, y: y + 0.08, w: 2.5, h: 0.54, fontSize: 28, bold: true, color: WHITE, fontFace: "Georgia" });
    s.addShape(pres.ShapeType.line, { x: 2.95, y: y + 0.15, w: 0, h: 1.5, line: { color: MGRAY, pt: 0.5 } });
    s.addText(d.generic, { x: 3.1, y: y + 0.08, w: 6.5, h: 0.3, fontSize: 12, bold: true, color: WHITE, fontFace: "Calibri" });
    s.addText(d.type, { x: 3.1, y: y + 0.4, w: 6.5, h: 0.26, fontSize: 10, color: MGRAY, fontFace: "Calibri" });
    s.addShape(pres.ShapeType.line, { x: 3.1, y: y + 0.7, w: 6.35, h: 0, line: { color: MGRAY, pt: 0.5 } });
    s.addText("⚙  Mechanism: " + d.mech, { x: 3.1, y: y + 0.75, w: 6.5, h: 0.54, fontSize: 10, italic: true, color: LGRAY, fontFace: "Calibri", wrap: true });
    s.addText("📊 Efficacy: " + d.efficacy, { x: 3.1, y: y + 1.3, w: 6.5, h: 0.58, fontSize: 10, color: WHITE, fontFace: "Calibri", wrap: true });
  });
  footer(s, "Source: Mulangu S et al. PALM RCT. NEJM 2019 | FDA Drug Approvals | cdc.gov/ebola");
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 13 — TREATMENT (Part 2)
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: WHITE };
  microbeDecor(s, 8.9, 4.2, 1.0);
  addHeader(s, "06", "TREATMENT (cont.)", "Supportive care, investigational agents & clinical management");

  const left = [
    "SUPPORTIVE CARE (cornerstone for ALL species):",
    "  • IV fluid resuscitation (isotonic NS/RL)",
    "  • Electrolyte correction (K+, Ca2+, Mg2+)",
    "  • Oral rehydration solution if tolerated",
    "  • Antipyretics: paracetamol (avoid NSAIDs)",
    "  • Anti-emetics: ondansetron 4–8 mg IV/PO",
    "  • Anti-diarrhoeal: loperamide",
    "  • Analgesia: morphine / fentanyl PCA",
    "  • Nutrition: enteral / parenteral support",
    "  • Vasopressors for refractory shock",
    "  • RRT / dialysis for AKI",
    "",
    "DIC MANAGEMENT:",
    "  • FFP, cryoprecipitate, Vitamin K",
  ];
  const right = [
    "INVESTIGATIONAL / PRIOR AGENTS:",
    "  • ZMapp — superseded by Inmazeb/Ebanga",
    "  • Remdesivir — limited EVD efficacy",
    "    in PALM RCT; not recommended",
    "  • Favipiravir — W. Africa 2014 trial;",
    "    inconclusive for severe disease",
    "  • Convalescent plasma — variable results",
    "",
    "CLINICAL MANAGEMENT PRINCIPLES:",
    "  • Isolate IMMEDIATELY on suspicion",
    "  • Dedicated ETU (Ebola Treatment Unit)",
    "  • Strict IPC: full PPE for ALL contacts",
    "  • Psychological support for patients",
    "  • Safe and dignified burial after death",
    "",
    "⚠ NO approved specific therapy for",
    "  Sudan, Bundibugyo, or Taï Forest",
  ];
  bBox(s, left, 0.25, 0.82, 4.7, 4.38);
  bBox(s, right, 5.05, 0.82, 4.7, 4.38);
  footer(s, "Source: CDC Clinical Guidance for Ebola | cdc.gov/ebola/hcp");
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 14 — PREVENTION (Part 1) — Vaccines
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: OFFWHITE };
  microbeDecor(s, 0.1, 0.8, 0.9);
  addHeader(s, "07", "PREVENTION, CONTROL & MANAGEMENT", "Approved vaccines for Ebola virus disease");

  sLabel(s, "APPROVED VACCINES (Zaire species only)", 0.25, 0.82, 9.5);

  const vax = [
    { name: "ERVEBO®  (rVSV-ZEBOV-GP)", mfr: "Merck & Co.", eff: ">97% efficacy — Guinea 2015 Lancet trial  |  FDA Dec 2019  |  WHO prequalified", note: "Live attenuated VSV vector. Single IM dose. Ring vaccination in outbreaks. Preventive via Gavi for HCW." },
    { name: "ZABDENO® + MVABEA®  (2-dose)", mfr: "Janssen (J&J)", eff: "Ad26.ZEBOV prime → MVA-BN-Filo boost (56-day interval)  |  EMA/WHO approved", note: "Pre-exposure prophylaxis only (not for acute outbreaks). 2-dose heterologous prime-boost regimen." },
  ];
  vax.forEach((v, i) => {
    const y = 1.18 + i * 1.68;
    s.addShape(pres.ShapeType.rect, { x: 0.25, y, w: 9.5, h: 1.58, fill: { color: WHITE }, line: { color: BLACK, pt: 1.5 } });
    s.addShape(pres.ShapeType.rect, { x: 0.25, y, w: 9.5, h: 0.4, fill: { color: XGRAY }, line: { color: XGRAY } });
    s.addText(v.name, { x: 0.42, y, w: 7.5, h: 0.4, fontSize: 14, bold: true, color: WHITE, valign: "middle", fontFace: "Georgia" });
    s.addShape(pres.ShapeType.rect, { x: 8.0, y: y + 0.06, w: 1.6, h: 0.28, fill: { color: WHITE }, line: { color: WHITE } });
    s.addText(v.mfr, { x: 8.0, y: y + 0.06, w: 1.6, h: 0.28, fontSize: 9, color: BLACK, bold: true, align: "center", valign: "middle" });
    s.addText("Efficacy: " + v.eff, { x: 0.42, y: y + 0.46, w: 9.1, h: 0.32, fontSize: 10, color: BLACK, fontFace: "Calibri", bold: true });
    s.addText(v.note, { x: 0.42, y: y + 0.8, w: 9.1, h: 0.68, fontSize: 10, italic: true, color: XGRAY, fontFace: "Calibri", wrap: true });
  });

  s.addShape(pres.ShapeType.rect, { x: 0.25, y: 4.6, w: 9.5, h: 0.3, fill: { color: LGRAY }, line: { color: BLACK, pt: 1 } });
  s.addText("⚠  No approved vaccine for Sudan, Bundibugyo or Taï Forest species. Candidate vaccines in Phase 2/3 trials (2026).", {
    x: 0.4, y: 4.6, w: 9.3, h: 0.3, fontSize: 10, italic: true, bold: true, color: BLACK, valign: "middle"
  });
  footer(s, "Source: WHO SAGE July 2024 | Lancet Guinea Trial 2017 | Merck | Janssen");
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 15 — PREVENTION (Part 2)
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: WHITE };
  microbeDecor(s, 0.1, 3.9, 1.0);
  addHeader(s, "07", "PREVENTION, CONTROL & MANAGEMENT (cont.)", "IPC, contact tracing, safe burial & outbreak response pillars");

  if (IMG_PPE) {
    s.addImage({ data: IMG_PPE, x: 6.9, y: 0.82, w: 2.85, h: 2.25 });
    s.addShape(pres.ShapeType.rect, { x: 6.9, y: 3.07, w: 2.85, h: 0.22, fill: { color: BLACK }, line: { color: BLACK } });
    s.addText("Full PPE EVD response — CDC/PHIL", { x: 6.9, y: 3.07, w: 2.85, h: 0.22, fontSize: 7, color: WHITE, align: "center", valign: "middle" });
  }

  const left = [
    "INFECTION PREVENTION & CONTROL (IPC):",
    "  • Full PPE: double gloves, gown, apron,",
    "    FFP2/3 mask, goggles + face shield",
    "  • Strict hand hygiene (70% alcohol rub)",
    "  • ETU with clean/dirty zones",
    "  • Safe injections; no needle recapping",
    "  • Chlorine decontamination of equipment",
    "  • Biomedical waste: double-bag + autoclave",
    "",
    "CONTACT TRACING:",
    "  • Identify all contacts (21-day window)",
    "  • Daily symptom monitoring × 21 days",
    "  • Ring vaccination of contacts",
    "  • Quarantine high-risk contacts",
  ];
  const right = [
    "SAFE AND DIGNIFIED BURIALS:",
    "  • Virus shed from corpse for days",
    "  • Trained teams; no family touching body",
    "  • Chlorine body bag; GPS-tagged graves",
    "",
    "COMMUNITY ENGAGEMENT:",
    "  • Community health workers",
    "  • Address cultural resistance",
    "  • Radio/SMS public health messaging",
    "",
    "WHO 7 OUTBREAK RESPONSE PILLARS:",
    "  1. Case detection & isolation",
    "  2. Contact tracing & surveillance",
    "  3. Ring vaccination",
    "  4. Clinical case management",
    "  5. Safe & dignified burial",
    "  6. Community engagement",
    "  7. Cross-border coordination",
  ];
  bBox(s, left, 0.25, 0.82, 4.7, 4.38);
  bBox(s, right, 5.05, 0.82, 1.78, 4.38);
  footer(s, "Source: WHO Ebola Response Roadmap | CDC Emergency Operations | cdc.gov/ebola");
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 16 — SUMMARY (Part 1) — Summary Grid
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: OFFWHITE };
  microbeDecor(s, 8.9, 4.3, 1.0);
  addHeader(s, "08", "SUMMARY", "Key takeaways from the Ebola Virus Disease Pandemic Module");

  const cards = [
    { icon: "🦠", head: "THE VIRUS", body: "Orthoebolavirus; -ssRNA; Filoviridae; 4 human species; filamentous; BSL-4. GP = key virulence." },
    { icon: "🌍", head: "EPIDEMIOLOGY", body: "Discovered 1976, DRC. Largest outbreak 2014–16 (~29K). Fruit bats = reservoir. R₀ 1.5–2.5." },
    { icon: "🌡", head: "CLINICAL", body: "Dry phase (fever, myalgia) → Wet phase (D&V, haemorrhage). CFR 25–90%. NOT airborne." },
    { icon: "🔬", head: "DIAGNOSIS", body: "RT-PCR = gold standard. BSL-4 handling. FBC: leukopenia, thrombocytopenia. ↑AST. DIC." },
    { icon: "💊", head: "TREATMENT", body: "Inmazeb™ & Ebanga™ (Zaire species only). Supportive care = cornerstone for all species." },
    { icon: "🛡", head: "PREVENTION", body: "Ervebo® >97% efficacy (ring vax). Full PPE, ETU, contact tracing, safe burial, community engagement." },
  ];
  cards.forEach((c, i) => {
    const col = i % 3, row = Math.floor(i / 3);
    const x = 0.25 + col * 3.22, y = 0.82 + row * 2.12;
    s.addShape(pres.ShapeType.rect, { x, y, w: 3.0, h: 2.0, fill: { color: WHITE }, line: { color: BLACK, pt: 1.5 } });
    s.addShape(pres.ShapeType.rect, { x, y, w: 3.0, h: 0.45, fill: { color: BLACK }, line: { color: BLACK } });
    s.addText(`${c.icon}  ${c.head}`, { x: x + 0.1, y, w: 2.82, h: 0.45, fontSize: 12, bold: true, color: WHITE, valign: "middle", fontFace: "Georgia" });
    s.addText(c.body, { x: x + 0.12, y: y + 0.5, w: 2.78, h: 1.42, fontSize: 10.5, color: XGRAY, wrap: true, valign: "top", fontFace: "Calibri" });
  });
  footer(s);
})();

// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 17 — SUMMARY (Part 2) — Key Messages (BLACK BG like template)
// ═══════════════════════════════════════════════════════════════════════════
(function() {
  const s = pres.addSlide();
  s.background = { color: BLACK };

  // Diagonal white band (like template's "Thank You" slide)
  s.addShape(pres.ShapeType.rect, { x: -1, y: 3.5, w: 6.5, h: 4.0, fill: { color: XGRAY }, line: { color: XGRAY }, rotate: -16 });

  // Microbe decor
  microbeDecor(s, 0.2, 0.3, 1.2);
  microbeDecor(s, 8.5, 4.0, 1.0);

  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.75, fill: { color: XGRAY }, line: { color: XGRAY } });
  s.addText("08  |  SUMMARY — CRITICAL LEARNING POINTS", { x: 0.25, y: 0.08, w: 9.5, h: 0.58, fontSize: 19, bold: true, color: WHITE, valign: "middle", fontFace: "Georgia" });

  const msgs = [
    "Early recognition + IMMEDIATE ISOLATION are the most critical interventions in EVD management.",
    "RT-PCR is the gold standard — all samples require BSL-4 biosafety precautions.",
    "Inmazeb™ and Ebanga™ are FDA-approved ONLY for Orthoebolavirus zairense (Zaire species).",
    "Supportive care — fluids, electrolytes, nutrition — significantly reduces mortality in all species.",
    "Ervebo® (>97% efficacy) is deployed via ring vaccination as the cornerstone of outbreak response.",
    "Safe and dignified burials are a frontline public health intervention — corpses remain infectious.",
    "Ebola does NOT spread through the air — transmission requires direct contact with body fluids.",
    "⚠ Active 2026 DRC/Uganda Bundibugyo outbreak highlights urgent need for broader species vaccines.",
  ];
  msgs.forEach((m, i) => {
    s.addShape(pres.ShapeType.rect, { x: 0.25, y: 0.82 + i * 0.54, w: 0.38, h: 0.46, fill: { color: WHITE }, line: { color: WHITE } });
    s.addText(`${i + 1}`, { x: 0.25, y: 0.82 + i * 0.54, w: 0.38, h: 0.46, fontSize: 11, bold: true, color: BLACK, align: "center", valign: "middle" });
    s.addText(m, { x: 0.72, y: 0.82 + i * 0.54, w: 9.05, h: 0.46, fontSize: 10.5, color: i === 7 ? MGRAY : WHITE, valign: "middle", fontFace: "Calibri", bold: i === 7 });
  });

  // References strip
  s.addShape(pres.ShapeType.rect, { x: 0, y: 5.27, w: 10, h: 0.36, fill: { color: XGRAY }, line: { color: XGRAY } });
  s.addText("REFS: 1. CDC cdc.gov/ebola  2. WHO Ebola Fact Sheet  3. WHO Diagnostic Testing Guidance Dec 2024  4. Mulangu S et al. PALM RCT NEJM 2019  5. Henao-Restrepo AM et al. Lancet 2017 (Ervebo)", {
    x: 0.3, y: 5.27, w: 9.4, h: 0.36, fontSize: 7.5, color: MGRAY, italic: true, valign: "middle", fontFace: "Calibri"
  });
})();

// ═══════════════════════════════════════════════════════════════════════════
// WRITE FILE
// ═══════════════════════════════════════════════════════════════════════════
pres.writeFile({ fileName: "/home/daytona/workspace/ebola-ppt/Ebola_BW_Minimalist_v3.pptx" })
  .then(() => console.log("SUCCESS"))
  .catch(e => { console.error(e); process.exit(1); });
Running Command

cd /home/daytona/workspace/ebola-ppt && node ebola_bw.js 2>&1

Running Command

ls -lh /home/daytona/workspace/ebola-ppt/Ebola_BW_Minimalist_v3.pptx

Your new presentation is ready — styled to match your template!

Ebola BW Minimalist v3

Presentation · PPTX


How it matches your template

Template ElementApplied in Ebola Slides
White background with bold black elementsAll content slides use white/off-white backgrounds
Diagonal black band (title slide)Title slide has the same diagonal black swept shapes
Black full-width section headersEvery slide has a black top bar with white slide title
Black number boxes (01, 02...)Left of each header bar shows the section number
Section content labels (black bar)Sub-headings use black full-width label bars
Grey microbe/bacteria outline decorationsSubtle grey circle decorations on every slide
Black cards with white text (drug/vaccine cards)Inmazeb, Ebanga, vaccine cards in black panels
Full black background final slideSummary/Key Messages slide is all-black with white text, matching your template's closing style
Two-column white content boxesAll bullet content in bordered white boxes
Real embedded imagesCDC/PHIL photos on Slides 3, 7, 10, 15
17 slides total — 1 title + 2 slides per each of the 8 sections, all content from the Word document.
This is a shared conversation. Sign in to Orris to start your own chat.