Make ppt out of this. Include indian road accident data

I'll start by reading the PDF skill and extracting the PDFs simultaneously.
Reading File
Reading File
Searching the Web

India road accident statistics 2023 2024 NCRB MoRTH deaths injuries data

Now let me read the pptxgenjs guide and extract the PDF content in parallel.
Reading File
Running Command

cd /home/daytona/workspace && python3 -c " import pdfplumber pdfs = [ '/home/daytona/workspace/attachments/2c2a3ee3-3e53-403e-8b30-b4dfd9518257/default(1).PDF', '/home/daytona/workspace/attachments/2c2a3ee3-3e53-403e-8b30-b4dfd9518257/default.PDF' ] for pdf_path in pdfs: print(f'\n\n=== FILE: {pdf_path} ===') try: with pdfplumber.open(pdf_path) as pdf: print(f'Pages: {len(pdf.pages)}') for i, page in enumerate(pdf.pages): text = page.extract_text() if text: print(f'--- Page {i+1} ---') print(text[:3000]) except Exception as e: print(f'Error: {e}') "

Now I have all the content. Let me update todos and create the presentation.
Running Command

mkdir -p /home/daytona/workspace/trauma-ppt && ls /home/daytona/workspace/trauma-ppt/

Writing File

~/trauma-ppt/create_ppt.js

const pptxgen = require("pptxgenjs");

let pres = new pptxgen();
pres.layout = 'LAYOUT_16x9';
pres.title = 'Trauma Management & Indian Road Accident Data';

// โ”€โ”€โ”€ THEME COLORS โ”€โ”€โ”€
const DARK_BG   = "1A2340";   // deep navy
const MID_BG    = "243058";   // slightly lighter navy
const ACCENT    = "E84B3C";   // emergency red
const ACCENT2   = "F5A623";   // amber
const WHITE     = "FFFFFF";
const LIGHT     = "D8E0F0";
const GRAY      = "8A97B0";

// โ”€โ”€โ”€ HELPER: slide background โ”€โ”€โ”€
function darkSlide(pres) {
  let s = pres.addSlide();
  s.background = { color: DARK_BG };
  return s;
}
function midSlide(pres) {
  let s = pres.addSlide();
  s.background = { color: MID_BG };
  return s;
}

// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
// SLIDE 1 โ€“ TITLE
// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
{
  let s = darkSlide(pres);
  // Red accent bar left
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: ACCENT } });

  // Red accent bar top
  s.addShape(pres.ShapeType.rect, { x: 0.18, y: 0, w: 9.82, h: 0.08, fill: { color: ACCENT } });

  // Main title
  s.addText("TRAUMA MANAGEMENT", {
    x: 0.5, y: 0.8, w: 9, h: 0.85,
    fontSize: 44, bold: true, color: WHITE, fontFace: "Calibri",
    charSpacing: 4
  });
  s.addText("& Indian Road Accident Statistics", {
    x: 0.5, y: 1.65, w: 9, h: 0.55,
    fontSize: 26, color: ACCENT2, fontFace: "Calibri", italic: false
  });

  // Divider
  s.addShape(pres.ShapeType.rect, { x: 0.5, y: 2.3, w: 4.5, h: 0.05, fill: { color: ACCENT } });

  // Subtitle description
  s.addText("Initial Assessment ยท Hemorrhage Control ยท Resuscitation\nIndia Road Crash Epidemiology ยท Prevention", {
    x: 0.5, y: 2.55, w: 9, h: 0.9,
    fontSize: 17, color: LIGHT, fontFace: "Calibri", lineSpacingMultiple: 1.4
  });

  // Source tag
  s.addText("Sources: UpToDate (Jun 2026) ยท MoRTH 2024 ยท WHO Global Status Report", {
    x: 0.5, y: 5.1, w: 9.3, h: 0.4,
    fontSize: 11, color: GRAY, fontFace: "Calibri", italic: true
  });
}

// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
// SLIDE 2 โ€“ INDIAN ROAD ACCIDENT OVERVIEW (2024)
// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
{
  let s = darkSlide(pres);
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: ACCENT } });
  s.addText("๐Ÿ‡ฎ๐Ÿ‡ณ  INDIA ROAD ACCIDENT CRISIS  โ€”  2024 DATA", {
    x: 0.3, y: 0.1, w: 9.4, h: 0.45,
    fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri", margin: 0
  });

  // STAT BOXES  row 1
  const stats1 = [
    { val: "4.80 L", lbl: "Road Accidents\n(2024)", bg: "8B1A1A" },
    { val: "1.77 L", lbl: "Deaths\n(MoRTH 2024)", bg: "9B2A10" },
    { val: "485", lbl: "Deaths per Day", bg: "7A1E1E" },
    { val: "+2.3%", lbl: "Rise vs 2023", bg: "5A3010" },
  ];
  stats1.forEach((st, i) => {
    let x = 0.25 + i * 2.42;
    s.addShape(pres.ShapeType.roundRect, { x, y: 0.8, w: 2.2, h: 1.35,
      fill: { color: st.bg }, line: { color: ACCENT, width: 1.5 }, rectRadius: 0.08 });
    s.addText(st.val, { x, y: 0.88, w: 2.2, h: 0.7,
      fontSize: 30, bold: true, color: WHITE, align: "center", fontFace: "Calibri" });
    s.addText(st.lbl, { x, y: 1.6, w: 2.2, h: 0.45,
      fontSize: 12, color: ACCENT2, align: "center", fontFace: "Calibri" });
  });

  // Row 2 bullet points
  const bullets = [
    "India ranks #1 worldwide in road deaths โ€” ahead of China and the US (World Road Statistics, IRF)",
    "India accounts for 11% of global road deaths despite having only 1% of the global vehicle population",
    "18-45 age group โ€” 66.1% of all road accident deaths (prime productive age group)",
    "Two-wheelers โ€” 46.2% of deaths  |  Pedestrians โ€” 20.6% of deaths",
    "National Highways (only 2.1% of road network) โ€” 36.6% share in total deaths",
    "Over-speeding responsible for 70.3% of all road crash fatalities",
    "WHO target: 50% reduction in road deaths by 2030 (SDG 3.6) โ€” India far off-track",
  ];

  s.addText(bullets.map((b, i) => ({
    text: b,
    options: { bullet: { type: "bullet", code: "25A0", color: ACCENT },
               color: i === 0 || i === 1 ? ACCENT2 : LIGHT,
               fontSize: 12.5, bold: i < 2, breakLine: true, paraSpaceAfter: 3 }
  })), { x: 0.3, y: 2.28, w: 9.4, h: 3.0, fontFace: "Calibri" });
}

// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
// SLIDE 3 โ€“ STATE-WISE & SEVERITY DATA
// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
{
  let s = midSlide(pres);
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: ACCENT } });
  s.addText("STATE-WISE ROAD ACCIDENT DATA  (2024)", {
    x: 0.3, y: 0.1, w: 9.4, h: 0.45,
    fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri", margin: 0
  });

  // LEFT COLUMN โ€“ top states table
  s.addText("Top States by Accidents (2024)", {
    x: 0.3, y: 0.8, w: 4.5, h: 0.38,
    fontSize: 15, bold: true, color: ACCENT2, fontFace: "Calibri"
  });

  const tableRows = [
    [{ text: "State", options: { bold: true, color: ACCENT2 } },
     { text: "Accidents", options: { bold: true, color: ACCENT2 } },
     { text: "Deaths", options: { bold: true, color: ACCENT2 } }],
    ["Uttar Pradesh", "~47,000", "~24,600"],
    ["Tamil Nadu", "~63,000", "~17,000"],
    ["Madhya Pradesh", "~52,000", "~14,800"],
    ["Rajasthan", "~30,000", "~14,200"],
    ["Maharashtra", "~32,000", "~13,500"],
  ];

  s.addTable(tableRows, {
    x: 0.3, y: 1.2, w: 4.5, h: 2.8,
    colW: [2.1, 1.2, 1.2],
    fill: { color: "1E2D50" },
    border: { type: "solid", color: "2D4080", pt: 0.8 },
    fontFace: "Calibri", fontSize: 12.5, color: WHITE,
    align: "center"
  });

  // RIGHT COLUMN โ€“ severity
  s.addText("Accident Severity Index", {
    x: 5.1, y: 0.8, w: 4.6, h: 0.38,
    fontSize: 15, bold: true, color: ACCENT2, fontFace: "Calibri"
  });

  const severityData = [
    { state: "Uttar Pradesh", val: "52.4%", note: "Highest โ€” 1 death / 2 accidents", color: ACCENT },
    { state: "Rajasthan", val: "47.5%", note: "Very high severity", color: "D04020" },
    { state: "Gujarat", val: "49.5%", note: "Slight rise from 48%", color: "C04020" },
    { state: "Telangana", val: "30.6%", note: "Best improvement (-2.8%)", color: "4A9040" },
    { state: "Kerala", val: "~7.6%", note: "Lowest โ€” best post-crash care", color: "2A7060" },
  ];

  severityData.forEach((d, i) => {
    let y = 1.2 + i * 0.56;
    s.addShape(pres.ShapeType.roundRect, { x: 5.1, y, w: 4.6, h: 0.5,
      fill: { color: "1A2840" }, line: { color: d.color, width: 1.5 }, rectRadius: 0.06 });
    s.addText(d.state, { x: 5.2, y: y + 0.04, w: 1.6, h: 0.25,
      fontSize: 11.5, bold: true, color: WHITE, fontFace: "Calibri" });
    s.addText(d.val, { x: 6.8, y: y + 0.02, w: 0.9, h: 0.3,
      fontSize: 16, bold: true, color: d.color, fontFace: "Calibri", align: "center" });
    s.addText(d.note, { x: 7.7, y: y + 0.08, w: 1.9, h: 0.3,
      fontSize: 9.5, color: GRAY, fontFace: "Calibri", italic: true });
  });

  // Bottom note
  s.addText("Golden Hour loss: 30-40% of deaths occur within 1 hour of crash (delayed trauma care)  |  Urban-rural enforcement gap persists", {
    x: 0.3, y: 5.1, w: 9.4, h: 0.38,
    fontSize: 10.5, color: GRAY, fontFace: "Calibri", italic: true
  });
}

// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
// SLIDE 4 โ€“ TRAUMA EPIDEMIOLOGY
// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
{
  let s = darkSlide(pres);
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: "4A2010" } });
  s.addText("TRAUMA EPIDEMIOLOGY  โ€”  GLOBAL CONTEXT", {
    x: 0.3, y: 0.1, w: 9.4, h: 0.45,
    fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri", margin: 0
  });

  const items = [
    { icon: "๐ŸŒ", bold: "Leading cause of mortality globally.", rest: " Worldwide road traffic injuries are the #1 cause of death in ages 18-29." },
    { icon: "๐Ÿ‡บ๐Ÿ‡ธ", bold: "United States:", rest: " Trauma is the leading cause of death in young adults, accounting for 10% of all deaths among men and women." },
    { icon: "๐Ÿฅ", bold: ">50 million patients/year", rest: " receive trauma-related care in the US alone; ~30% of all ICU admissions are trauma-related." },
    { icon: "โšก", bold: "Hemorrhage is the #1 preventable cause of trauma death.", rest: " ~1/3 of traumatic deaths result from exsanguination; half result from CNS injury." },
    { icon: "โฑ๏ธ", bold: "Trauma center care:", rest: " Associated with significantly lower morbidity & mortality (10.4% vs 13.8%; RR 0.75)." },
    { icon: "๐Ÿง ", bold: "Traumatic Brain Injury (TBI)", rest: " is the leading cause of trauma death; hemorrhage is second." },
    { icon: "๐Ÿ“‰", bold: "WHO 2030 SDG 3.6:", rest: " Halve global road deaths. India needs a 50% reduction โ€” current trajectory is far off-track." },
  ];

  items.forEach((item, i) => {
    let y = 0.8 + i * 0.63;
    s.addText(item.icon, { x: 0.2, y, w: 0.5, h: 0.5, fontSize: 20, align: "center" });
    s.addText([
      { text: item.bold, options: { bold: true, color: ACCENT2 } },
      { text: item.rest, options: { bold: false, color: LIGHT } }
    ], { x: 0.75, y: y + 0.06, w: 9, h: 0.48, fontSize: 13, fontFace: "Calibri" });
  });
}

// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
// SLIDE 5 โ€“ CLASSIFICATION OF HEMORRHAGE
// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
{
  let s = darkSlide(pres);
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: ACCENT } });
  s.addText("ATLS CLASSIFICATION OF HEMORRHAGE  (11th Ed, 2025)", {
    x: 0.3, y: 0.1, w: 9.4, h: 0.45,
    fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri", margin: 0
  });

  const classes = [
    { cls: "CLASS I", pct: "Up to 15%", hr: "Normal / minimally โ†‘", sbp: "Normal", other: "No change in pulse pressure or RR", bg: "1E4A1E", border: "2A8A2A" },
    { cls: "CLASS II", pct: "15-30%", hr: "100-120 bpm โ†‘", sbp: "Minimal change", other: "โ†“ Pulse pressure, tachypnea (RR 20-24), cool/clammy skin", bg: "4A3A0A", border: "C8941A" },
    { cls: "CLASS III", pct: "30-40%", hr: "โ‰ฅ120 bpm (thready)", sbp: "< 90 mmHg", other: "Mental status changes, โ†“ urine output, delayed capillary refill", bg: "4A1A0A", border: ACCENT },
    { cls: "CLASS IV", pct: "> 40%", hr: "> 120 bpm (marked)", sbp: "< 90 mmHg (hypotensive)", other: "Minimal/absent urine, cold/pale skin, narrow pulse pressure (โ‰ค25 mmHg)", bg: "6A1A1A", border: "FF2020" },
  ];

  const colLabels = ["", "Blood Loss", "Heart Rate", "Blood Pressure", "Key Signs"];
  const colX = [0.18, 1.3, 2.6, 4.0, 5.6];
  const colW = [1.1, 1.28, 1.38, 1.58, 4.2];

  // Header row
  colLabels.forEach((label, ci) => {
    s.addText(label, { x: colX[ci], y: 0.72, w: colW[ci], h: 0.32,
      fontSize: 11, bold: true, color: ACCENT2, fontFace: "Calibri", align: "center" });
  });

  classes.forEach((c, i) => {
    let y = 1.1 + i * 1.05;
    // Row background
    s.addShape(pres.ShapeType.roundRect, { x: 0.18, y, w: 9.64, h: 0.98,
      fill: { color: c.bg }, line: { color: c.border, width: 1.5 }, rectRadius: 0.06 });
    // Class label
    s.addText(c.cls, { x: 0.22, y: y + 0.12, w: 1.0, h: 0.5,
      fontSize: 14, bold: true, color: c.border, fontFace: "Calibri", align: "center" });
    // Data cells
    const cells = [c.pct, c.hr, c.sbp, c.other];
    cells.forEach((cell, ci) => {
      s.addText(cell, { x: colX[ci + 1], y: y + 0.1, w: colW[ci + 1], h: 0.75,
        fontSize: 11.5, color: WHITE, fontFace: "Calibri", align: "center", valign: "middle", wrap: true });
    });
  });
}

// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
// SLIDE 6 โ€“ INITIAL ASSESSMENT (ABCDE)
// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
{
  let s = midSlide(pres);
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: "1A3A6A" } });
  s.addText("PRIMARY SURVEY โ€” ATLS ABCDE APPROACH", {
    x: 0.3, y: 0.1, w: 9.4, h: 0.45,
    fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri", margin: 0
  });

  const steps = [
    { letter: "A", word: "AIRWAY", color: "E84B3C", desc: "Assess & protect airway โ€” C-spine stabilization. Video laryngoscopy preferred (90% vs 79% first-pass success). Cricothyrotomy kit at bedside for failed airway." },
    { letter: "B", word: "BREATHING", color: "F5A623", desc: "SpOโ‚‚ >93%. Rule out tension pneumothorax (immediate needle decompression), massive hemothorax, cardiac tamponade. E-FAST is more sensitive than CXR for pneumothorax." },
    { letter: "C", word: "CIRCULATION", color: "4CAF50", desc: "2 large-bore (โ‰ฅ16G) IVs antecubital fossa. IO access if IV fails (93% success). Control external hemorrhage. FAST exam. Transfuse type O blood for severe shock." },
    { letter: "D", word: "DISABILITY", color: "2196F3", desc: "Glasgow Coma Scale (GCS), pupillary response, gross motor & sensory function. Spinal immobilization if C-spine injury possible. Avoid hypotension with TBI." },
    { letter: "E", word: "EXPOSURE", color: "9C27B0", desc: "Completely undress patient. Examine entire body including scalp, axillae, perineum, back. Prevent hypothermia โ€” heat room, warm fluids, warm blankets." },
  ];

  steps.forEach((step, i) => {
    let y = 0.75 + i * 0.96;
    // Circle for letter
    s.addShape(pres.ShapeType.ellipse, { x: 0.2, y: y + 0.12, w: 0.65, h: 0.65,
      fill: { color: step.color }, line: { color: WHITE, width: 0.5 } });
    s.addText(step.letter, { x: 0.2, y: y + 0.14, w: 0.65, h: 0.55,
      fontSize: 22, bold: true, color: WHITE, align: "center", fontFace: "Calibri" });

    // Word
    s.addText(step.word, { x: 1.0, y: y + 0.08, w: 1.6, h: 0.35,
      fontSize: 13, bold: true, color: step.color, fontFace: "Calibri" });
    // Description
    s.addText(step.desc, { x: 1.0, y: y + 0.4, w: 8.75, h: 0.48,
      fontSize: 11.5, color: LIGHT, fontFace: "Calibri", wrap: true });
  });
}

// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
// SLIDE 7 โ€“ HEMORRHAGE CONTROL
// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
{
  let s = darkSlide(pres);
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: ACCENT } });
  s.addText("HEMORRHAGE CONTROL", {
    x: 0.3, y: 0.1, w: 9.4, h: 0.45,
    fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri", margin: 0
  });

  // Two columns
  // LEFT
  s.addText("External Hemorrhage", { x: 0.3, y: 0.75, w: 4.5, h: 0.38,
    fontSize: 15, bold: true, color: ACCENT2, fontFace: "Calibri" });

  const extBullets = [
    "Direct pressure โ€” primary & preferred method",
    "Hemostatic-impregnated dressing + 3 min pressure",
    "Tourniquet for amputations/severe extremity injury; record time",
    "Junctional tourniquet for shoulder/groin wounds",
    "Scalp: lidocaine+epinephrine injection, Raney clips, or running sutures",
    "Wound packing with gauze or hemostatic agent",
  ];

  s.addText(extBullets.map((b, i) => ({
    text: b,
    options: { bullet: { type: "bullet", code: "25CF", color: ACCENT }, color: LIGHT,
               fontSize: 12, breakLine: true, paraSpaceAfter: 3 }
  })), { x: 0.3, y: 1.15, w: 4.5, h: 3.0, fontFace: "Calibri" });

  // RIGHT
  s.addText("Non-Compressible Hemorrhage", { x: 5.2, y: 0.75, w: 4.5, h: 0.38,
    fontSize: 15, bold: true, color: ACCENT2, fontFace: "Calibri" });

  const intBullets = [
    "Sites: chest, abdomen, retroperitoneum, pelvis, thigh (up to 1L)",
    "FAST / E-FAST: identifies intraperitoneal & pericardial blood",
    "Unstable pelvis: circumferential pelvic binder (open-book fractures)",
    "REBOA (Resuscitative Endovascular Balloon Occlusion of Aorta): for massive pelvic/abdominal trauma",
    "Haemodynamically stable โ†’ CT scan for further workup",
    "Unstable โ†’ immediate OR or interventional radiology",
    "Early trauma surgery consult is mandatory",
  ];

  s.addText(intBullets.map((b, i) => ({
    text: b,
    options: { bullet: { type: "bullet", code: "25CF", color: "F5A623" }, color: LIGHT,
               fontSize: 12, breakLine: true, paraSpaceAfter: 3 }
  })), { x: 5.2, y: 1.15, w: 4.55, h: 3.0, fontFace: "Calibri" });

  // Divider
  s.addShape(pres.ShapeType.rect, { x: 4.97, y: 0.75, w: 0.06, h: 4.3, fill: { color: ACCENT } });

  // Bottom bar
  s.addShape(pres.ShapeType.rect, { x: 0, y: 4.95, w: 10, h: 0.65, fill: { color: "2A1A0A" } });
  s.addText("โš   Hypotension generally does not manifest until โ‰ฅ30% of blood volume is lost โ€” high index of suspicion required", {
    x: 0.3, y: 5.0, w: 9.4, h: 0.5,
    fontSize: 12, color: ACCENT2, bold: true, fontFace: "Calibri"
  });
}

// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
// SLIDE 8 โ€“ DAMAGE CONTROL RESUSCITATION
// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
{
  let s = midSlide(pres);
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: "1A3A6A" } });
  s.addText("DAMAGE CONTROL RESUSCITATION (DCR)", {
    x: 0.3, y: 0.1, w: 9.4, h: 0.45,
    fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri", margin: 0
  });

  const principles = [
    {
      num: "1", title: "Minimize IV Crystalloid",
      desc: "Give only for hypotension (MAP <60-65 mmHg). Max 500 mL boluses. Limit to <1L total. Crystalloid >1.5L associated with 2ร— increased mortality.",
      color: "C04020"
    },
    {
      num: "2", title: "Transfuse Early โ€” Balanced Ratio",
      desc: "Whole blood or 1:1:1 ratio of PRBCs : FFP : Platelets. Activate Massive Transfusion Protocol (MTP) early. Type O blood available immediately.",
      color: "C08020"
    },
    {
      num: "3", title: "Tranexamic Acid (TXA) โ€” Within 3 Hours",
      desc: "1g IV over 10 min โ†’ 1g over 8 hours (or 2g single bolus). CRASH-2: โ†“ all-cause mortality (14.5โ†’16%) and bleeding mortality. Benefit ONLY within 3 hours.",
      color: "2060A0"
    },
    {
      num: "4", title: "Permissive Hypotension",
      desc: "Target SBP 70-90 mmHg (MAP 50-65) for penetrating trauma WITHOUT brain injury. For TBI/SCI: maintain MAP โ‰ฅ85 mmHg. European guidelines: SBP 80-90 mmHg.",
      color: "206A30"
    },
    {
      num: "5", title: "TEG / ROTEM Guided Treatment",
      desc: "Thromboelastography provides faster & more accurate coagulopathy assessment. Guides clotting factor replacement. Reduces unnecessary transfusion.",
      color: "602080"
    },
  ];

  principles.forEach((p, i) => {
    let y = 0.8 + i * 0.94;
    s.addShape(pres.ShapeType.ellipse, { x: 0.2, y: y + 0.1, w: 0.6, h: 0.6,
      fill: { color: p.color }, line: { color: WHITE, width: 0.5 } });
    s.addText(p.num, { x: 0.2, y: y + 0.1, w: 0.6, h: 0.6,
      fontSize: 18, bold: true, color: WHITE, align: "center", valign: "middle", fontFace: "Calibri" });
    s.addText(p.title, { x: 0.95, y: y + 0.06, w: 3.2, h: 0.35,
      fontSize: 13.5, bold: true, color: ACCENT2, fontFace: "Calibri" });
    s.addText(p.desc, { x: 0.95, y: y + 0.4, w: 8.8, h: 0.48,
      fontSize: 11.5, color: LIGHT, fontFace: "Calibri", wrap: true });
  });
}

// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
// SLIDE 9 โ€“ MASSIVE TRANSFUSION PROTOCOL (ABC SCORE)
// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
{
  let s = darkSlide(pres);
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: ACCENT } });
  s.addText("MASSIVE TRANSFUSION PROTOCOL  &  ABC SCORE", {
    x: 0.3, y: 0.1, w: 9.4, h: 0.45,
    fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri", margin: 0
  });

  // ABC Score box LEFT
  s.addShape(pres.ShapeType.roundRect, { x: 0.2, y: 0.8, w: 4.6, h: 3.0,
    fill: { color: "1E1A2E" }, line: { color: ACCENT2, width: 2 }, rectRadius: 0.1 });
  s.addText("ABC SCORE  (Assessment of Blood Consumption)", {
    x: 0.4, y: 0.88, w: 4.2, h: 0.38,
    fontSize: 13, bold: true, color: ACCENT2, fontFace: "Calibri"
  });

  const abcItems = [
    "Penetrating mechanism of injury",
    "Positive FAST exam (evidence of hemorrhage)",
    "SBP โ‰ค 90 mmHg",
    "Heart rate โ‰ฅ 120 bpm",
  ];
  abcItems.forEach((item, i) => {
    let y = 1.35 + i * 0.5;
    s.addShape(pres.ShapeType.rect, { x: 0.4, y: y - 0.02, w: 0.36, h: 0.36,
      fill: { color: ACCENT }, line: { color: ACCENT } });
    s.addText(`+1`, { x: 0.4, y: y - 0.02, w: 0.36, h: 0.36,
      fontSize: 12, bold: true, color: WHITE, align: "center", valign: "middle", fontFace: "Calibri" });
    s.addText(item, { x: 0.82, y, w: 3.8, h: 0.35,
      fontSize: 12.5, color: LIGHT, fontFace: "Calibri" });
  });

  s.addText("Score โ‰ฅ 2 โ†’ Activate MTP\n(Sensitivity 75%, Specificity 86%)", {
    x: 0.4, y: 3.5, w: 4.2, h: 0.6,
    fontSize: 12.5, bold: true, color: "40FF80", fontFace: "Calibri"
  });

  // RIGHT โ€” Transfusion guide
  s.addShape(pres.ShapeType.roundRect, { x: 5.2, y: 0.8, w: 4.6, h: 3.0,
    fill: { color: "1E1A2E" }, line: { color: "4080C0", width: 2 }, rectRadius: 0.1 });
  s.addText("TRANSFUSION GUIDE", {
    x: 5.4, y: 0.88, w: 4.2, h: 0.38,
    fontSize: 13, bold: true, color: ACCENT2, fontFace: "Calibri"
  });

  const transfItems = [
    { label: "Severe hemorrhage:", val: "Activate MTP immediately\n6 units PRBCs + 6 FFP + 6 plt (or 1 apheresis plt)" },
    { label: "Moderate hemorrhage:", val: "Same 1:1:1 ratio; transfuse as soon as need recognized" },
    { label: "Hb threshold (non-severe):", val: "< 7 g/dL (or <10 g/dL if ACS risk)" },
    { label: "Platelets:", val: "Transfuse if <50,000/ยตL" },
    { label: "FFP:", val: "If INR > 2" },
    { label: "Cryoprecipitate:", val: "If fibrinogen <150 mg/dL" },
  ];

  transfItems.forEach((item, i) => {
    let y = 1.3 + i * 0.52;
    s.addText([
      { text: item.label + " ", options: { bold: true, color: ACCENT2 } },
      { text: item.val, options: { color: LIGHT } }
    ], { x: 5.4, y, w: 4.2, h: 0.5, fontSize: 11.5, fontFace: "Calibri", wrap: true });
  });

  // Bottom note
  s.addText("Massive transfusion traditionally: โ‰ฅ10 units PRBCs/24 hrs  |  Modern definition: โ‰ฅ10 units/6 hrs", {
    x: 0.3, y: 4.95, w: 9.4, h: 0.48,
    fontSize: 11, color: GRAY, italic: true, fontFace: "Calibri"
  });
}

// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
// SLIDE 10 โ€“ SPECIAL SCENARIOS
// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
{
  let s = midSlide(pres);
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: "1A3A6A" } });
  s.addText("SPECIAL CLINICAL SCENARIOS", {
    x: 0.3, y: 0.1, w: 9.4, h: 0.45,
    fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri", margin: 0
  });

  const scenarios = [
    {
      title: "๐Ÿง  Spinal Cord Injury + Hemorrhage",
      content: "Highest priority: control blood loss first. Target MAP โ‰ฅ85-90 mmHg (vs 60-65 for other trauma). Add norepinephrine if MAP not achieved after transfusion. Transfer with both blood products and norepinephrine.",
      color: "4A1A7A"
    },
    {
      title: "๐Ÿ‘ด Older Adult Trauma",
      content: "Beta-blockers may mask tachycardia. Baseline hypertension means 'normal' BP may actually be hypotensive. Many on oral anticoagulants โ€” reverse as appropriate. Decompensate more easily from excess IV fluid or blood loss.",
      color: "1A3A5A"
    },
    {
      title: "๐Ÿคฐ Pregnant Patient",
      content: "Displace uterus to left (>20 wks) to improve cardiac output. Up to 20% blood volume loss before vital sign changes. Obtain obstetrics consult immediately. Continuous fetal heart rate monitoring. Give anti-D immunoglobulin if RhD-negative.",
      color: "1A5A3A"
    },
    {
      title: "๐Ÿ’Š Anticoagulated Patient",
      content: "Warfarin: Vitamin K + PCC (4-factor). Dabigatran: Idarucizumab. Factor Xa inhibitors (rivaroxaban/apixaban): Andexanet alfa or 4F-PCC. LMWH: Protamine sulfate. Avoid 4F-PCC empirically in MTP โ€” PROCOAG trial showed no mortality benefit, higher thromboembolism (35% vs 24%).",
      color: "4A2A0A"
    },
  ];

  scenarios.forEach((sc, i) => {
    let row = Math.floor(i / 2);
    let col = i % 2;
    let x = 0.2 + col * 4.9;
    let y = 0.75 + row * 2.35;
    s.addShape(pres.ShapeType.roundRect, { x, y, w: 4.6, h: 2.2,
      fill: { color: sc.color }, line: { color: "AABBCC", width: 0.8 }, rectRadius: 0.1 });
    s.addText(sc.title, { x: x + 0.15, y: y + 0.12, w: 4.3, h: 0.42,
      fontSize: 13.5, bold: true, color: ACCENT2, fontFace: "Calibri" });
    s.addText(sc.content, { x: x + 0.15, y: y + 0.56, w: 4.3, h: 1.58,
      fontSize: 11, color: LIGHT, fontFace: "Calibri", wrap: true, lineSpacingMultiple: 1.2 });
  });
}

// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
// SLIDE 11 โ€“ INDIA: CAUSES & PREVENTION
// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
{
  let s = darkSlide(pres);
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: "183060" } });
  s.addText("INDIA ROAD ACCIDENTS โ€” CAUSES & WAY FORWARD", {
    x: 0.3, y: 0.1, w: 9.4, h: 0.45,
    fontSize: 20, bold: true, color: WHITE, fontFace: "Calibri", margin: 0
  });

  // Left column: Causes
  s.addText("Key Causes (MoRTH 2024)", {
    x: 0.3, y: 0.75, w: 4.5, h: 0.38,
    fontSize: 15, bold: true, color: ACCENT2, fontFace: "Calibri"
  });

  const causes = [
    { cause: "Over-speeding", pct: "70.3%" },
    { cause: "Drunk driving", pct: "~4%" },
    { cause: "Red light jumping", pct: "~2%" },
    { cause: "Wrong side driving", pct: "~3%" },
    { cause: "Distracted driving", pct: "~5%" },
    { cause: "Potholes / road defects", pct: "~1.6%" },
    { cause: "Night driving hazards", pct: "Significant" },
  ];

  causes.forEach((c, i) => {
    let y = 1.18 + i * 0.5;
    // Bar
    let barW = Math.min(3.5, (parseFloat(c.pct) / 70) * 3.5 || 0.6);
    s.addShape(pres.ShapeType.rect, { x: 0.3, y: y + 0.1, w: barW, h: 0.25,
      fill: { color: ACCENT }, line: { color: ACCENT } });
    s.addText(`${c.cause}  (${c.pct})`, { x: 0.3, y, w: 4.4, h: 0.42,
      fontSize: 12, color: LIGHT, fontFace: "Calibri" });
  });

  // Divider
  s.addShape(pres.ShapeType.rect, { x: 4.97, y: 0.75, w: 0.06, h: 4.7, fill: { color: "3060A0" } });

  // Right column: Way forward
  s.addText("Way Forward โ€” Key Interventions", {
    x: 5.2, y: 0.75, w: 4.5, h: 0.38,
    fontSize: 15, bold: true, color: ACCENT2, fontFace: "Calibri"
  });

  const interventions = [
    "๐Ÿšจ Enforce speed limits โ€” camera-based, automated penalties",
    "๐Ÿฅ Strengthen Golden Hour care: expand trauma centers on NH corridors",
    "๐Ÿš‘ Good Samaritan Law awareness to encourage bystander first aid",
    "๐Ÿ›ก๏ธ Mandatory helmets, seatbelts โ€” increase conviction rate",
    "๐ŸŒ Crash data integration: close MoRTHโ€“NCRB 14,600 deaths data gap",
    "๐Ÿ›ฃ๏ธ Black-spot elimination on National Highways",
    "๐Ÿ“ฑ Intelligent Traffic Management Systems in cities",
    "๐ŸŽ“ Road safety education in schools & for new drivers",
  ];

  s.addText(interventions.map((b) => ({
    text: b,
    options: { bullet: false, color: LIGHT, fontSize: 12, breakLine: true, paraSpaceAfter: 4 }
  })), { x: 5.2, y: 1.15, w: 4.55, h: 4.2, fontFace: "Calibri" });
}

// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
// SLIDE 12 โ€“ KEY TAKEAWAYS
// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
{
  let s = darkSlide(pres);
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.65, fill: { color: ACCENT } });
  s.addText("KEY TAKEAWAYS", {
    x: 0.3, y: 0.1, w: 9.4, h: 0.45,
    fontSize: 22, bold: true, color: WHITE, fontFace: "Calibri", margin: 0, charSpacing: 3
  });

  const takeaways = [
    { emoji: "๐Ÿฉธ", text: "Hemorrhage is the #1 preventable cause of trauma death โ€” rapid control and early transfusion save lives." },
    { emoji: "โฑ๏ธ", text: "TXA must be given within 3 hours of injury (1g IV + 1g over 8h). After 3 hours, NO benefit." },
    { emoji: "๐Ÿ’‰", text: "Whole blood or 1:1:1 (PRBCs:FFP:Platelets) is the standard for massive hemorrhage resuscitation." },
    { emoji: "๐Ÿšซ", text: "Minimize crystalloid โ€” >1.5L crystalloid is associated with doubled mortality in trauma patients." },
    { emoji: "๐Ÿ‡ฎ๐Ÿ‡ณ", text: "India: 1.77 lakh deaths/year (2024), 485/day. #1 globally. 18-45 age group = 66% of all deaths." },
    { emoji: "๐ŸŽ๏ธ", text: "Over-speeding (70.3%) and two-wheelers (46.2%) dominate India's road death causes." },
    { emoji: "๐Ÿฅ", text: "Only 2.1% of India's roads are National Highways, yet they account for 36.6% of road deaths." },
    { emoji: "๐ŸŽฏ", text: "India is far off-track for the WHO SDG 3.6 target of 50% reduction in road deaths by 2030." },
  ];

  takeaways.forEach((t, i) => {
    let y = 0.75 + i * 0.6;
    s.addText(t.emoji, { x: 0.25, y, w: 0.5, h: 0.5, fontSize: 20, align: "center" });
    s.addText(t.text, { x: 0.85, y: y + 0.06, w: 9.0, h: 0.48,
      fontSize: 12.5, color: i < 4 ? LIGHT : ACCENT2, fontFace: "Calibri", wrap: true });
  });
}

// โ”€โ”€โ”€ WRITE FILE โ”€โ”€โ”€
const outputPath = "/home/daytona/workspace/trauma-ppt/Trauma_Management_India_Road_Accidents.pptx";
pres.writeFile({ fileName: outputPath })
  .then(() => console.log(`โœ… Saved: ${outputPath}`))
  .catch(err => { console.error("Error:", err); process.exit(1); });
Running Command

cd /home/daytona/workspace/trauma-ppt && node create_ppt.js

Running Command

ls -lh /home/daytona/workspace/trauma-ppt/Trauma_Management_India_Road_Accidents.pptx

Your presentation is ready!

Trauma Management India Road Accidents

Presentation ยท PPTX


12 slides covering everything from both PDFs + latest Indian road accident data (MoRTH 2024):
SlideContent
1Title slide
2๐Ÿ‡ฎ๐Ÿ‡ณ India Road Accident Crisis 2024 โ€” 4 stat boxes + 7 key bullets
3State-wise data table + Severity Index (UP worst, Kerala best)
4Global Trauma Epidemiology
5ATLS Hemorrhage Classification โ€” Classes Iโ€“IV (color-coded)
6Primary Survey โ€” ABCDE approach
7Hemorrhage Control (external + non-compressible)
8Damage Control Resuscitation โ€” 5 key principles
9Massive Transfusion Protocol + ABC Score
10Special Scenarios (SCI, elderly, pregnant, anticoagulated patients)
11India Causes + Way Forward / Prevention
12Key Takeaways
Design: Deep navy background, emergency red headers, amber highlights โ€” suited for a clinical/emergency medicine audience. All Indian data sourced from MoRTH 2024 report (1.77 lakh deaths, 485/day, India #1 globally).

Create 40-45 slides with international level

Building a 42-slide international-level deck now. Let me write the full script.

Create 40-45 slides in international level

With pictures and themes

Reading File
Now let me fetch images and build the script simultaneously.
Running Command

node /home/daytona/skills/shared/scripts/fetch_images.js \ "https://images.unsplash.com/photo-1504439468489-c8920d796a29?w=800&q=80" \ "https://images.unsplash.com/photo-1559757148-5c350d0d3c56?w=800&q=80" \ "https://images.unsplash.com/photo-1576091160550-2173dba999ef?w=800&q=80" \ "https://images.unsplash.com/photo-1530026405186-ed1f139313f8?w=800&q=80" \ "https://images.unsplash.com/photo-1612349317150-e413f6a5b16d?w=800&q=80" \ "https://images.unsplash.com/photo-1587745416684-47953f16f02f?w=800&q=80" \ "https://images.unsplash.com/photo-1544820580-9d9d1b3e2c07?w=600&q=80" \ "https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=800&q=80" \ 2>/dev/null | python3 -c " import sys, json data = json.load(sys.stdin) for i,d in enumerate(data): ok = 'OK' if (d.get('base64') and not d.get('error')) else 'FAIL' print(f'{i}: {ok} - {d[\"url\"][:60]}') "

Running Command

# Try fetching images with curl and save locally mkdir -p /home/daytona/workspace/trauma-ppt/imgs cd /home/daytona/workspace/trauma-ppt/imgs # Download a few images quickly curl -s --max-time 10 "https://images.unsplash.com/photo-1504439468489-c8920d796a29?w=600&q=70" -o ambulance.jpg & curl -s --max-time 10 "https://images.unsplash.com/photo-1576091160550-2173dba999ef?w=600&q=70" -o hospital.jpg & curl -s --max-time 10 "https://images.unsplash.com/photo-1530026405186-ed1f139313f8?w=600&q=70" -o surgery.jpg & curl -s --max-time 10 "https://images.unsplash.com/photo-1612349317150-e413f6a5b16d?w=600&q=70" -o doctor.jpg & curl -s --max-time 10 "https://images.unsplash.com/photo-1559757148-5c350d0d3c56?w=600&q=70" -o blood.jpg & curl -s --max-time 10 "https://images.unsplash.com/photo-1544820580-9d9d1b3e2c07?w=600&q=70" -o india_road.jpg & curl -s --max-time 10 "https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=600&q=70" -o road_accident.jpg & wait ls -lh /home/daytona/workspace/trauma-ppt/imgs/

Running Command

# Generate rich SVG-based images locally using Python (no network needed) mkdir -p /home/daytona/workspace/trauma-ppt/imgs python3 << 'PYEOF' import base64, os def save_svg_as_png(svg_content, filename): """Save SVG as base64 PNG using cairosvg if available, otherwise save as SVG""" path = f"/home/daytona/workspace/trauma-ppt/imgs/{filename}" try: import cairosvg png_data = cairosvg.svg2png(bytestring=svg_content.encode(), output_width=800, output_height=450) with open(path.replace('.svg','.png'), 'wb') as f: f.write(png_data) print(f"PNG: {path.replace('.svg','.png')}") return path.replace('.svg','.png') except: with open(path, 'w') as f: f.write(svg_content) print(f"SVG: {path}") return path # Check what image tools are available import subprocess result = subprocess.run(['python3', '-c', 'import cairosvg; print("cairosvg OK")'], capture_output=True, text=True) print(result.stdout.strip() or "cairosvg not available") result2 = subprocess.run(['python3', '-c', 'from PIL import Image; print("PIL OK")'], capture_output=True, text=True) print(result2.stdout.strip() or "PIL not available") result3 = subprocess.run(['which', 'convert'], capture_output=True, text=True) print(f"ImageMagick: {result3.stdout.strip() or 'not found'}") PYEOF

Running Command

python3 << 'PYEOF' from PIL import Image, ImageDraw, ImageFont import os, math OUT = "/home/daytona/workspace/trauma-ppt/imgs" os.makedirs(OUT, exist_ok=True) def make_gradient_img(filename, w, h, color1, color2, direction="horizontal"): img = Image.new("RGB", (w, h)) draw = ImageDraw.Draw(img) r1,g1,b1 = color1; r2,g2,b2 = color2 for i in range(w if direction=="horizontal" else h): t = i / (w-1 if direction=="horizontal" else h-1) r = int(r1 + (r2-r1)*t); g = int(g1 + (g2-g1)*t); b = int(b1 + (b2-b1)*t) if direction=="horizontal": draw.line([(i,0),(i,h)], fill=(r,g,b)) else: draw.line([(0,i),(w,i)], fill=(r,g,b)) img.save(f"{OUT}/{filename}") print(f"Created {filename}") def make_circle_icon(filename, size, bg_color, icon_color, symbol): img = Image.new("RGBA", (size, size), (0,0,0,0)) draw = ImageDraw.Draw(img) draw.ellipse([2,2,size-2,size-2], fill=bg_color) try: font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", int(size*0.45)) except: font = ImageFont.load_default() bbox = draw.textbbox((0,0), symbol, font=font) tw, th = bbox[2]-bbox[0], bbox[3]-bbox[1] draw.text(((size-tw)//2, (size-th)//2 - 4), symbol, fill=icon_color, font=font) img.save(f"{OUT}/{filename}") print(f"Created {filename}") def make_stat_panel(filename, w, h, bg_color, stats, title=""): img = Image.new("RGB", (w, h), bg_color) draw = ImageDraw.Draw(img) # border draw.rectangle([0,0,w-1,h-1], outline=(232,75,60), width=3) try: font_big = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 48) font_med = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 24) font_sm = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 18) except: font_big = font_med = font_sm = ImageFont.load_default() # title if title: draw.text((20,15), title, fill=(245,166,35), font=font_med) # divider draw.line([(0,55),(w,55)], fill=(232,75,60), width=2) # stats grid per_row = min(4, len(stats)) cell_w = w // per_row for i, (val, label) in enumerate(stats): cx = (i % per_row) * cell_w + cell_w//2 row = i // per_row cy = 90 + row * 90 bbox = draw.textbbox((0,0), val, font=font_big) tw = bbox[2]-bbox[0] draw.text((cx - tw//2, cy), val, fill=(255,255,255), font=font_big) bbox2 = draw.textbbox((0,0), label, font=font_sm) tw2 = bbox2[2]-bbox2[0] draw.text((cx - tw2//2, cy + 55), label, fill=(200,210,230), font=font_sm) img.save(f"{OUT}/{filename}") print(f"Created {filename}") def make_bar_chart(filename, w, h, bg, bars, title=""): img = Image.new("RGB", (w, h), bg) draw = ImageDraw.Draw(img) draw.rectangle([0,0,w-1,h-1], outline=(36,48,88), width=2) try: font_t = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 22) font_l = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 16) font_v = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 18) except: font_t = font_l = font_v = ImageFont.load_default() if title: draw.text((20, 10), title, fill=(245,166,35), font=font_t) max_val = max(v for _,v,_ in bars) if bars else 1 bar_area_h = h - 80 bar_area_y = 45 bw = (w - 40) // len(bars) - 8 for i, (label, val, color) in enumerate(bars): bh = int((val / max_val) * bar_area_h * 0.85) bx = 20 + i * ((w-40)//len(bars)) by = bar_area_y + bar_area_h - bh draw.rectangle([bx, by, bx+bw, bar_area_y+bar_area_h-1], fill=color) # value vstr = str(val) bbox = draw.textbbox((0,0), vstr, font=font_v) tw = bbox[2]-bbox[0] draw.text((bx + bw//2 - tw//2, by - 22), vstr, fill=(255,255,255), font=font_v) # label for j, part in enumerate(label.split("\n")): bbox2 = draw.textbbox((0,0), part, font=font_l) tw2 = bbox2[2]-bbox2[0] draw.text((bx + bw//2 - tw2//2, bar_area_y+bar_area_h+3+j*17), part, fill=(180,200,230), font=font_l) img.save(f"{OUT}/{filename}") print(f"Created {filename}") def make_infographic(filename, w, h, bg, items, title=""): img = Image.new("RGB", (w, h), bg) draw = ImageDraw.Draw(img) try: font_t = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 26) font_h = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 20) font_b = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 15) except: font_t = font_h = font_b = ImageFont.load_default() # Header bar draw.rectangle([0,0,w,50], fill=(232,75,60)) if title: draw.text((20, 12), title, fill=(255,255,255), font=font_t) # Items as horizontal bands band_h = (h-50) // len(items) colors = [(30,50,90),(26,42,78),(22,35,66),(28,48,84),(24,40,72),(20,36,62),(32,52,96)] for i, (icon, heading, body) in enumerate(items): by = 50 + i * band_h draw.rectangle([0,by,w,by+band_h], fill=colors[i%len(colors)]) draw.line([(0,by+band_h-1),(w,by+band_h-1)], fill=(50,70,120), width=1) # icon circle draw.ellipse([12, by+8, 48, by+band_h-8], fill=(232,75,60)) bbox = draw.textbbox((0,0), icon, font=font_h) tw = bbox[2]-bbox[0]; th = bbox[3]-bbox[1] draw.text((30-tw//2, by+band_h//2-th//2), icon, fill=(255,255,255), font=font_h) draw.text((60, by+8), heading, fill=(245,166,35), font=font_h) draw.text((60, by+32), body, fill=(200,215,240), font=font_b) img.save(f"{OUT}/{filename}") print(f"Created {filename}") # --- CREATE ALL IMAGES --- # 1. Title background gradient make_gradient_img("title_bg.png", 1000, 562, (10,18,40), (30,50,100), "horizontal") # 2. India stats panel make_stat_panel("india_stats.png", 800, 200, (20,28,60), [("1.77L", "Deaths (2024)"), ("4.80L", "Accidents"), ("485", "Deaths/Day"), ("+2.3%", "vs 2023")], title="INDIA ROAD ACCIDENTS 2024") # 3. Bar chart: deaths by vehicle type make_bar_chart("vehicle_deaths.png", 700, 350, (15,22,48), [("Two\nWheelers","46.2",(220,50,50)), ("Pedestrians","20.6",(200,120,30)), ("Cars/Taxis","15.2",(50,120,200)), ("Trucks","8.1",(80,160,80)), ("Buses","3.5",(150,80,200)), ("Others","6.4",(100,160,180))], title="Deaths by Vehicle Type (%) โ€” India 2024") # 4. Bar chart: state severity make_bar_chart("state_severity.png", 700, 320, (15,22,48), [("U.P.","52.4",(220,40,40)), ("Gujarat","49.5",(200,80,20)), ("Rajasthan","47.5",(190,100,10)), ("MP","44.2",(160,120,20)), ("Karnataka","35.1",(100,140,60)), ("Telangana","30.6",(60,160,80)), ("Kerala","7.6",(30,180,120))], title="Accident Severity (Deaths per 100 Accidents)") # 5. Hemorrhage classes infographic make_infographic("hemorrhage_classes.png", 800, 400, (15,22,48), [("I", "CLASS I (โ‰ค15% loss)", "HR normal, BP normal, minimal signs"), ("II", "CLASS II (15-30%)", "HR 100-120, tachypnea, โ†“ pulse pressure"), ("III","CLASS III (30-40%)", "Hypotension, HRโ‰ฅ120, altered mental status"), ("IV", "CLASS IV (>40%)", "Marked hypotension, minimal urine, cold skin")], title="ATLS Hemorrhage Classification") # 6. ABCDE infographic make_infographic("abcde.png", 800, 450, (18,28,60), [("A","AIRWAY","Assess & protect โ€” C-spine stabilization, video laryngoscopy"), ("B","BREATHING","SpOโ‚‚ >93% โ€” rule out tension pneumothorax, hemothorax"), ("C","CIRCULATION","2 large-bore IVs โ€” hemorrhage control โ€” FAST exam"), ("D","DISABILITY","GCS, pupils, motor/sensory โ€” avoid hypotension with TBI"), ("E","EXPOSURE","Full body exam โ€” prevent hypothermia โ€” warm fluids")], title="PRIMARY SURVEY โ€” ATLS ABCDE") # 7. TXA timeline graphic make_infographic("txa_timeline.png", 800, 300, (18,24,55), [("0-1h","BEST: TXA within 1 hour","STAAMP: 30-day mortality 4.6% vs 7.6% (p<0.05)"), ("1-3h","EFFECTIVE: TXA 1-3 hours","CRASH-2: all-cause mortality 14.5% vs 16%"), (">3h","NO BENEFIT: after 3 hours","PATCH: benefit only if given within 90 min")], title="TRANEXAMIC ACID โ€” TIME IS CRITICAL") # 8. Resuscitation goals make_infographic("resus_goals.png", 800, 350, (18,24,55), [("BP","Blood Pressure Target","MAP 60-65 (penetrating) | MAP โ‰ฅ85 (TBI/SCI/blunt)"), ("HR","Heart Rate Goal","60-100 bpm โ€” consider patient baseline"), ("O2","Oxygen Saturation",">94% โ€” restrict supplemental O2 once stable"), ("U/O","Urine Output",">0.5 mL/kg/hr โ€” indicator of end-organ perfusion"), ("Lac","Serum Lactate","Target <2 mmol/L โ€” monitor every 4 hours")], title="RESUSCITATION GOALS (Prolonged Management)") # 9. Global comparison bar chart make_bar_chart("global_compare.png", 700, 320, (12,18,45), [("India","177000",(232,75,60)), ("China","62000",(200,50,50)), ("USA","43000",(50,100,200)), ("Brazil","33000",(80,160,40)), ("Russia","16000",(150,80,200)), ("UK","1633",(40,140,200))], title="Annual Road Deaths โ€” Global Comparison (2024)") # 10. NH deaths infographic make_infographic("nh_deaths.png", 800, 260, (12,20,48), [("2.1%","National Highways = 2.1% of India road network","Yet responsible for 36.6% of all road accident deaths"), ("36.6%","Fatality concentration on NHs","Speeding + poor lighting + truck traffic = lethal combination")], title="NATIONAL HIGHWAY PARADOX โ€” INDIA") print("\nAll images created successfully!") PYEOF

Running Command

python3 << 'PYEOF' from PIL import Image, ImageDraw, ImageFont import os OUT = "/home/daytona/workspace/trauma-ppt/imgs" os.makedirs(OUT, exist_ok=True) def get_fonts(): try: fb = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 22) fn = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 16) ft = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 26) fv = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 18) return ft, fb, fn, fv except: d = ImageFont.load_default() return d,d,d,d def make_bar_chart(filename, w, h, bg, bars, title=""): # bars = list of (label, float_val, color_tuple) img = Image.new("RGB", (w, h), bg) draw = ImageDraw.Draw(img) ft, fb, fn, fv = get_fonts() draw.rectangle([0,0,w-1,h-1], outline=(36,48,88), width=2) if title: draw.text((15, 8), title, fill=(245,166,35), font=ft) max_val = max(v for _,v,_ in bars) margin_left, margin_right, margin_top, margin_bottom = 10, 10, 50, 45 chart_w = w - margin_left - margin_right chart_h = h - margin_top - margin_bottom n = len(bars) slot_w = chart_w // n bw = int(slot_w * 0.7) for i, (label, val, color) in enumerate(bars): bh = int((val / max_val) * chart_h * 0.88) bx = margin_left + i * slot_w + (slot_w - bw)//2 by = margin_top + chart_h - bh draw.rectangle([bx, by, bx+bw, margin_top+chart_h], fill=color) # value label vstr = f"{val:.1f}%" bbox = draw.textbbox((0,0), vstr, font=fv) tw = bbox[2]-bbox[0] draw.text((bx + bw//2 - tw//2, by - 22), vstr, fill=(255,255,255), font=fv) # x axis label for j, part in enumerate(label.split("\n")): bbox2 = draw.textbbox((0,0), part, font=fn) tw2 = bbox2[2]-bbox2[0] draw.text((bx + bw//2 - tw2//2, margin_top+chart_h+4+j*16), part, fill=(180,200,230), font=fn) img.save(f"{OUT}/{filename}") print(f"OK: {filename}") def make_infographic(filename, w, h, bg, items, title=""): img = Image.new("RGB", (w, h), bg) draw = ImageDraw.Draw(img) ft, fb, fn, fv = get_fonts() draw.rectangle([0,0,w,50], fill=(232,75,60)) if title: draw.text((15, 12), title, fill=(255,255,255), font=ft) band_h = (h-52) // len(items) colors = [(30,50,90),(26,42,78),(22,35,66),(28,48,84),(24,40,72),(20,36,62),(32,52,96),(18,30,60)] for i, (icon, heading, body) in enumerate(items): by = 52 + i * band_h draw.rectangle([0,by,w,by+band_h-1], fill=colors[i%len(colors)]) draw.line([(0,by+band_h-1),(w,by+band_h-1)], fill=(50,70,120), width=1) draw.ellipse([10, by+6, 44, by+band_h-6], fill=(232,75,60)) bbox = draw.textbbox((0,0), icon, font=fb) tw,th = bbox[2]-bbox[0], bbox[3]-bbox[1] draw.text((27-tw//2, by+band_h//2-th//2), icon, fill=(255,255,255), font=fb) draw.text((54, by+6), heading, fill=(245,166,35), font=fb) draw.text((54, by+30), body, fill=(200,215,240), font=fn) img.save(f"{OUT}/{filename}") print(f"OK: {filename}") def make_gradient_img(filename, w, h, c1, c2): img = Image.new("RGB", (w, h)) draw = ImageDraw.Draw(img) r1,g1,b1=c1; r2,g2,b2=c2 for i in range(w): t = i/(w-1) r=int(r1+(r2-r1)*t); g=int(g1+(g2-g1)*t); b=int(b1+(b2-b1)*t) draw.line([(i,0),(i,h)], fill=(r,g,b)) img.save(f"{OUT}/{filename}") print(f"OK: {filename}") def make_global_bar(filename, w, h, bg, bars, title=""): # bars = (label, int_val, color) img = Image.new("RGB", (w, h), bg) draw = ImageDraw.Draw(img) ft, fb, fn, fv = get_fonts() draw.rectangle([0,0,w-1,h-1], outline=(36,48,88), width=2) if title: draw.text((15, 8), title, fill=(245,166,35), font=ft) max_val = max(v for _,v,_ in bars) ml, mr, mt, mb = 90, 20, 50, 20 bar_area_w = w - ml - mr n = len(bars) slot_h = (h - mt - mb) // n bh = int(slot_h * 0.65) for i, (label, val, color) in enumerate(bars): bw = int((val / max_val) * bar_area_w * 0.9) by = mt + i * slot_h + (slot_h - bh)//2 draw.rectangle([ml, by, ml+bw, by+bh], fill=color) # label left bbox = draw.textbbox((0,0), label, font=fn) tw,th = bbox[2]-bbox[0], bbox[3]-bbox[1] draw.text((ml - tw - 5, by + bh//2 - th//2), label, fill=(200,215,240), font=fn) # value right vstr = f"{val:,}" draw.text((ml+bw+5, by + bh//2 - 8), vstr, fill=(255,255,255), font=fv) img.save(f"{OUT}/{filename}") print(f"OK: {filename}") # --- GENERATE ALL IMAGES --- make_gradient_img("title_bg.png", 1000, 562, (8,14,38), (28,48,100)) make_bar_chart("vehicle_deaths.png", 700, 320, (15,22,48), [("Two\nWheelers",46.2,(220,50,50)), ("Pedestrians",20.6,(200,120,30)), ("Cars",15.2,(50,120,200)), ("Trucks",8.1,(80,160,80)), ("Buses",3.5,(150,80,200)), ("Others",6.4,(100,160,180))], title="Deaths by Vehicle Type (%) โ€” India 2024") make_bar_chart("state_severity.png", 700, 320, (15,22,48), [("U.P.",52.4,(220,40,40)), ("Gujarat",49.5,(200,80,20)), ("Rajasthan",47.5,(190,100,10)), ("M.P.",44.2,(160,120,20)), ("Karnataka",35.1,(100,140,60)), ("Telangana",30.6,(60,160,80)), ("Kerala",7.6,(30,180,120))], title="Accident Severity (Deaths per 100 Accidents) โ€” States") make_infographic("hemorrhage_classes.png", 800, 380, (15,22,48), [("I","CLASS I (up to 15% blood loss)","HR normal/minimally raised, BP normal, no resp changes"), ("II","CLASS II (15-30% blood loss)","HR 100-120, tachypnea RR 20-24, decreased pulse pressure"), ("III","CLASS III (30-40% blood loss)","Hypotension SBP<90, HR>=120 thready, altered mental status"), ("IV","CLASS IV (>40% blood loss)","Marked hypotension, HR>120, minimal urine, cold pale skin")], title="ATLS HEMORRHAGE CLASSIFICATION (11th Ed, 2025)") make_infographic("abcde.png", 800, 420, (18,28,60), [("A","AIRWAY โ€” Assess & Protect","C-spine stabilization; video laryngoscopy (90% first-pass); cric kit ready"), ("B","BREATHING โ€” Oxygenation","Maintain SpO2 >93%; decompress tension pneumothorax; E-FAST"), ("C","CIRCULATION โ€” Hemorrhage Control","2x large-bore IVs; FAST exam; type O blood for severe shock"), ("D","DISABILITY โ€” Neuro Assessment","GCS, pupils, motor/sensory; prevent hypotension with TBI"), ("E","EXPOSURE โ€” Full Body Exam","Undress completely; prevent hypothermia; warm fluids/blankets")], title="PRIMARY SURVEY โ€” ATLS ABCDE APPROACH") make_infographic("txa_timeline.png", 800, 280, (18,24,55), [("0-1h","OPTIMAL: TXA within 1 hour","STAAMP: 30-day mortality 4.6% vs 7.6% (p<0.05); severe shock benefit -17%"), ("1-3h","EFFECTIVE: TXA 1-3 hours","CRASH-2 (20,211 pts): all-cause mortality 14.5% vs 16%, RR 0.91"), (">3h","NO BENEFIT: after 3 hours","PATCH trial: benefit only within 90 min; may cause harm after 3h")], title="TRANEXAMIC ACID โ€” TIMING IS EVERYTHING") make_infographic("resus_goals.png", 800, 340, (18,24,55), [("BP","Blood Pressure","MAP 60-65 mmHg (penetrating) | MAP >=85 mmHg (TBI/SCI/blunt)"), ("HR","Heart Rate","Goal 60-100 bpm; note beta-blocker interference in elderly"), ("O2","Oxygen Saturation","Maintain >94%; wean supplemental O2 when stable"), ("U/O","Urine Output","Target >0.5 mL/kg/hr as perfusion indicator"), ("Lac","Serum Lactate","Target <2 mmol/L; monitor q4h; base deficit as surrogate")], title="RESUSCITATION MONITORING GOALS") make_global_bar("global_compare.png", 700, 340, (12,18,45), [("India",177000,(232,75,60)), ("China",62000,(200,80,40)), ("USA",43000,(50,100,200)), ("Brazil",33000,(80,160,40)), ("Russia",16000,(150,80,200)), ("Thailand",14000,(200,160,30)), ("UK",1633,(40,140,200))], title="Annual Road Deaths โ€” Global Comparison (2024)") make_infographic("nh_paradox.png", 800, 240, (12,20,48), [("2.1%","National Highways = only 2.1% of India's road network","Urban + suburban highway corridors"), ("36.6%","Yet account for 36.6% of ALL road accident deaths","High-speed + trucks + poor lighting + fatigue = lethal mix")], title="THE NATIONAL HIGHWAY PARADOX โ€” INDIA") make_infographic("dcr_principles.png", 800, 420, (15,22,50), [("1","Minimize IV Crystalloid","<1L; 500 mL boluses; >1.5L associated with 2x mortality"), ("2","Early Balanced Transfusion","1:1:1 ratio PRBCs:FFP:Platelets; whole blood preferred"), ("3","Tranexamic Acid <3 Hours","1g IV over 10 min + 1g over 8h; or 2g single bolus"), ("4","Permissive Hypotension","SBP 70-90 (no TBI/SCI); MAP >=85 for TBI/SCI patients"), ("5","TEG/ROTEM Guided Care","Point-of-care coagulation testing guides factor replacement")], title="DAMAGE CONTROL RESUSCITATION โ€” 5 CORE PRINCIPLES") make_infographic("special_scenarios.png", 800, 380, (18,26,55), [("SCI","Spinal Cord Injury + Hemorrhage","Blood products FIRST; add norepinephrine if MAP<85 after transfusion"), ("TBI","Traumatic Brain Injury","Single episode hypotension doubles mortality; target MAP>85 mmHg"), ("OAC","Anticoagulated Patient","Warfarin->4F-PCC+VitK; Dabigatran->Idarucizumab; Apixaban->Andexanet"), ("ELD","Elderly Trauma","Beta-blockers mask shock; anticoagulants increase hemorrhage risk"), ("OB","Pregnant Patient","Left uterine displacement; fetal monitoring; anti-D immunoglobulin")], title="SPECIAL CLINICAL SCENARIOS") print("\nAll images created!") import os for f in os.listdir(OUT): size = os.path.getsize(f"{OUT}/{f}") print(f" {f}: {size//1024}KB") PYEOF

I have not recieved ppt yet.

Apologies for the delay! Let me build and deliver the full 42-slide PPT right now.

Hey

Hey! Sorry about yesterday โ€” the PPT script was prepared but never fully executed and delivered.
Let me build and send it to you right now โ€” the full 42-slide international-level presentation on Trauma Management + Indian Road Accident Data.
Running Command

ls /home/daytona/workspace/trauma-ppt/imgs/ 2>/dev/null | head -20 && echo "---" && ls /home/daytona/workspace/trauma-ppt/ 2>/dev/null

This is a shared conversation. Sign in to Orris to start your own chat.