Create a ppt on ards:evolving strategies seminar topic for MD medicine

Reading File
Reading File
Reading File
Finding Sources
Searching PubMed

"acute respiratory distress syndrome" AND management

Finding Sources
Searching PubMed

"ARDS" AND "prone positioning" AND "mechanical ventilation"

Reading File
Finding Sources
Reading File
Reading File
Reading File
Reading File
Finding Sources
Reading File
Finding Sources
Running Command

mkdir -p /tmp/workspace/ards-ppt && ls /tmp/workspace/ards-ppt/

Writing File

~/ards-ppt/build_ards_ppt.py

#!/usr/bin/env python3
"""
ARDS: Evolving Strategies - MD Medicine Seminar PPT
"""

from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.util import Inches, Pt
from io import BytesIO

# ─── Color palette ────────────────────────────────────────────────
NAVY       = RGBColor(0x0D, 0x2E, 0x5C)   # deep navy – headings / title bg
TEAL       = RGBColor(0x00, 0x7C, 0x8A)   # teal accent – section banners
SKY        = RGBColor(0xD6, 0xEE, 0xF4)   # very light sky blue – content bg
WHITE      = RGBColor(0xFF, 0xFF, 0xFF)
YELLOW     = RGBColor(0xFF, 0xD7, 0x00)
ORANGE     = RGBColor(0xE8, 0x6B, 0x00)
LIGHT_GRAY = RGBColor(0xF2, 0xF4, 0xF7)
DARK_GRAY  = RGBColor(0x2D, 0x2D, 0x2D)
RED        = RGBColor(0xC0, 0x1C, 0x1C)

prs = Presentation()
prs.slide_width  = Inches(13.333)
prs.slide_height = Inches(7.5)
blank = prs.slide_layouts[6]

# ─── Helper functions ─────────────────────────────────────────────

def add_rect(slide, x, y, w, h, fill=None, line_color=None, line_width=Pt(0)):
    shape = slide.shapes.add_shape(1, Inches(x), Inches(y), Inches(w), Inches(h))
    shape.line.width = line_width
    if fill is None:
        shape.fill.background()
    else:
        shape.fill.solid()
        shape.fill.fore_color.rgb = fill
    if line_color:
        shape.line.color.rgb = line_color
        shape.line.width = line_width or Pt(1)
    else:
        shape.line.fill.background()
    return shape

def add_textbox(slide, text, x, y, w, h,
                font_size=18, bold=False, color=DARK_GRAY,
                align=PP_ALIGN.LEFT, italic=False,
                v_anchor=MSO_ANCHOR.TOP, word_wrap=True):
    tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
    tf = tb.text_frame
    tf.word_wrap = word_wrap
    tf.vertical_anchor = v_anchor
    tf.margin_left  = Pt(4)
    tf.margin_right = Pt(4)
    tf.margin_top   = Pt(2)
    tf.margin_bottom= Pt(2)
    p  = tf.paragraphs[0]
    p.alignment = align
    run = p.add_run()
    run.text = text
    run.font.size  = Pt(font_size)
    run.font.bold  = bold
    run.font.italic= italic
    run.font.color.rgb = color
    run.font.name  = "Calibri"
    return tf

def add_multiline_textbox(slide, lines, x, y, w, h,
                          font_size=16, bold=False, color=DARK_GRAY,
                          align=PP_ALIGN.LEFT, line_space=1.15,
                          v_anchor=MSO_ANCHOR.TOP):
    """lines: list of (text, bold_override, size_override, color_override)"""
    tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
    tf = tb.text_frame
    tf.word_wrap = True
    tf.vertical_anchor = v_anchor
    tf.margin_left   = Pt(4)
    tf.margin_right  = Pt(4)
    tf.margin_top    = Pt(2)
    tf.margin_bottom = Pt(2)
    first = True
    for item in lines:
        if isinstance(item, str):
            txt, b, sz, clr = item, bold, font_size, color
        else:
            txt = item[0]
            b   = item[1] if len(item) > 1 else bold
            sz  = item[2] if len(item) > 2 else font_size
            clr = item[3] if len(item) > 3 else color
        if first:
            p = tf.paragraphs[0]
            first = False
        else:
            p = tf.add_paragraph()
        p.alignment = align
        from pptx.oxml.ns import qn
        from lxml import etree
        pPr = p._pPr if p._pPr is not None else p._p.get_or_add_pPr()
        spcAft = etree.SubElement(pPr, qn('a:spcAft'))
        spcPts = etree.SubElement(spcAft, qn('a:spcPts'))
        spcPts.set('val', '120')  # 12pt after paragraph
        run = p.add_run()
        run.text = txt
        run.font.size  = Pt(sz)
        run.font.bold  = b
        run.font.italic= False
        run.font.color.rgb = clr
        run.font.name  = "Calibri"
    return tf

def add_footer(slide, text="ARDS: Evolving Strategies | MD Medicine Seminar"):
    add_rect(slide, 0, 7.1, 13.333, 0.4, fill=NAVY)
    add_textbox(slide, text, 0.2, 7.1, 10, 0.4,
                font_size=11, color=WHITE, align=PP_ALIGN.LEFT,
                v_anchor=MSO_ANCHOR.MIDDLE)
    add_textbox(slide, "2026", 11.8, 7.1, 1.3, 0.4,
                font_size=11, color=YELLOW, align=PP_ALIGN.RIGHT,
                v_anchor=MSO_ANCHOR.MIDDLE)

def add_slide_header(slide, title, subtitle=None, accent=TEAL):
    add_rect(slide, 0, 0, 13.333, 1.05, fill=accent)
    add_textbox(slide, title, 0.3, 0.08, 12.5, 0.7,
                font_size=26, bold=True, color=WHITE,
                align=PP_ALIGN.LEFT, v_anchor=MSO_ANCHOR.MIDDLE)
    if subtitle:
        add_textbox(slide, subtitle, 0.3, 0.72, 12.5, 0.35,
                    font_size=13, color=WHITE, align=PP_ALIGN.LEFT,
                    italic=True, v_anchor=MSO_ANCHOR.MIDDLE)
    add_footer(slide)


# ════════════════════════════════════════════════════════════════════
# SLIDE 1 – TITLE
# ════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, fill=NAVY)
# accent stripe
add_rect(s, 0, 5.8, 13.333, 0.15, fill=TEAL)
add_rect(s, 0, 5.95, 13.333, 0.1, fill=YELLOW)

add_textbox(s, "ARDS", 0.8, 0.6, 11.5, 1.8,
            font_size=80, bold=True, color=WHITE, align=PP_ALIGN.LEFT)
add_textbox(s, "EVOLVING STRATEGIES", 0.8, 2.2, 11.5, 0.8,
            font_size=34, bold=True, color=YELLOW, align=PP_ALIGN.LEFT)
add_textbox(s, "Acute Respiratory Distress Syndrome", 0.8, 3.05, 11.5, 0.45,
            font_size=20, color=SKY, align=PP_ALIGN.LEFT)
add_textbox(s, "MD Medicine Seminar  |  Department of Internal Medicine", 0.8, 3.6, 11.5, 0.4,
            font_size=16, color=SKY, align=PP_ALIGN.LEFT, italic=True)
add_textbox(s, "July 2026", 0.8, 4.15, 11.5, 0.35,
            font_size=14, color=YELLOW, align=PP_ALIGN.LEFT)

# right side decorative lung icon area
add_rect(s, 9.5, 0.4, 3.5, 5.0, fill=RGBColor(0x10, 0x3A, 0x6E))
add_textbox(s, "🫁", 10.0, 1.5, 2.5, 2.5, font_size=90,
            color=WHITE, align=PP_ALIGN.CENTER)

# ════════════════════════════════════════════════════════════════════
# SLIDE 2 – OVERVIEW / TABLE OF CONTENTS
# ════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, fill=LIGHT_GRAY)
add_slide_header(s, "Seminar Overview", accent=NAVY)

topics = [
    ("1", "Historical Perspective & Evolution of ARDS Concept"),
    ("2", "Definition: Berlin Criteria 2012"),
    ("3", "Epidemiology & Etiology"),
    ("4", "Pathophysiology – Phases of ARDS"),
    ("5", "Clinical Features & Diagnosis"),
    ("6", "Lung-Protective Ventilation – ARDSNet Protocol"),
    ("7", "PEEP Strategies & Recruitment"),
    ("8", "Prone Positioning – Evidence & Practice"),
    ("9", "Adjunct Therapies (NO, Steroids, Paralysis)"),
    ("10", "ECMO in Severe ARDS"),
    ("11", "Emerging Concepts: Phenotyping & Precision Medicine"),
    ("12", "Summary & Key Takeaways"),
]

cols = [topics[:6], topics[6:]]
for ci, col in enumerate(cols):
    x_num = 0.4 + ci * 6.5
    x_txt = 1.1 + ci * 6.5
    for ri, (num, txt) in enumerate(col):
        y = 1.2 + ri * 0.88
        add_rect(s, x_num, y, 0.55, 0.62, fill=TEAL)
        add_textbox(s, num, x_num, y, 0.55, 0.62,
                    font_size=16, bold=True, color=WHITE,
                    align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
        add_textbox(s, txt, x_txt, y + 0.04, 5.3, 0.58,
                    font_size=14, color=DARK_GRAY,
                    align=PP_ALIGN.LEFT, v_anchor=MSO_ANCHOR.MIDDLE)

# ════════════════════════════════════════════════════════════════════
# SLIDE 3 – HISTORICAL PERSPECTIVE
# ════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, fill=LIGHT_GRAY)
add_slide_header(s, "Historical Perspective", "From 'Wet Lung' to ARDS – A Conceptual Journey")

timeline = [
    ("1967", "Ashbaugh & Petty", "First description of ARDS in 12 patients – 'Adult Respiratory Distress Syndrome'", TEAL),
    ("1971", "Petty & Ashbaugh", "Term 'ARDS' formally coined; characterized by hypoxemia, stiff lungs, CXR infiltrates", NAVY),
    ("1988", "Murray Score", "Lung Injury Score introduced – chest X-ray, PaO₂/FiO₂, PEEP, Compliance", TEAL),
    ("1994", "AECC Definition", "American-European Consensus Conference – ALI (P:F ≤300) vs ARDS (P:F ≤200)", NAVY),
    ("2000", "ARDSNet ARMA", "Low tidal volume 6 mL/kg PBW reduces mortality 22%→31% vs traditional volumes", TEAL),
    ("2012", "Berlin Definition", "Replaced AECC; 3-tier severity; removed ALI term; mandatory PEEP ≥5 cmH₂O", NAVY),
    ("2021+", "Phenotyping Era", "Hyper- vs hypo-inflammatory phenotypes; precision/personalized ventilation strategies", ORANGE),
]

for i, (year, who, desc, clr) in enumerate(timeline):
    y = 1.15 + i * 0.79
    add_rect(s, 0.3, y, 1.35, 0.65, fill=clr)
    add_textbox(s, year, 0.3, y, 1.35, 0.65,
                font_size=15, bold=True, color=WHITE,
                align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
    add_rect(s, 1.65, y + 0.17, 0.02, 0.3, fill=clr)
    add_textbox(s, f"{who}: {desc}", 1.75, y + 0.01, 11.2, 0.63,
                font_size=13, color=DARK_GRAY,
                align=PP_ALIGN.LEFT, v_anchor=MSO_ANCHOR.MIDDLE)

# ════════════════════════════════════════════════════════════════════
# SLIDE 4 – BERLIN DEFINITION
# ════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, fill=LIGHT_GRAY)
add_slide_header(s, "Berlin Definition of ARDS (2012)",
                 "JAMA 2012;307(23):2526–2533 | Standard diagnostic framework")

# Left box – criteria
add_rect(s, 0.3, 1.1, 6.0, 5.8, fill=WHITE, line_color=TEAL, line_width=Pt(2))
add_rect(s, 0.3, 1.1, 6.0, 0.55, fill=TEAL)
add_textbox(s, "DIAGNOSTIC CRITERIA", 0.3, 1.1, 6.0, 0.55,
            font_size=15, bold=True, color=WHITE,
            align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)

criteria = [
    "⏱  TIMING",
    "   Onset within 1 week of a known clinical insult\n   or new/worsening respiratory symptoms",
    "📷  IMAGING",
    "   Bilateral opacities on CXR/CT – not fully\n   explained by collapse or nodules",
    "💧  ORIGIN OF EDEMA",
    "   Respiratory failure not fully explained by\n   cardiac failure or fluid overload",
    "🩸  OXYGENATION  (on PEEP ≥ 5 cmH₂O)",
    "   Mild:     PaO₂/FiO₂  201–300 mmHg",
    "   Moderate: PaO₂/FiO₂  101–200 mmHg",
    "   Severe:   PaO₂/FiO₂  ≤ 100 mmHg",
]
for i, line in enumerate(criteria):
    bold = line.startswith("⏱") or line.startswith("📷") or line.startswith("💧") or line.startswith("🩸")
    clr = NAVY if bold else DARK_GRAY
    add_textbox(s, line, 0.45, 1.75 + i * 0.51, 5.7, 0.5,
                font_size=12, bold=bold, color=clr, align=PP_ALIGN.LEFT)

# Right – severity boxes
add_rect(s, 6.8, 1.1, 6.2, 5.8, fill=WHITE, line_color=NAVY, line_width=Pt(2))
add_rect(s, 6.8, 1.1, 6.2, 0.55, fill=NAVY)
add_textbox(s, "SEVERITY CLASSIFICATION & IMPLICATIONS", 6.8, 1.1, 6.2, 0.55,
            font_size=13, bold=True, color=WHITE,
            align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)

sev_data = [
    ("MILD", "P:F  201–300 mmHg", "Mortality ~27%", "Consider HFNC / NIV\nOptimise PEEP", RGBColor(0xFF, 0xE0, 0x80)),
    ("MODERATE", "P:F  101–200 mmHg", "Mortality ~32%", "Lung-protective MV\nProne if P:F <150", RGBColor(0xFF, 0xA5, 0x00)),
    ("SEVERE", "P:F  ≤ 100 mmHg", "Mortality ~45%", "Prone ≥16 h/day\nNMB, consider ECMO", RED),
]

for i, (sev, pf, mort, rx, clr) in enumerate(sev_data):
    y = 1.8 + i * 1.65
    add_rect(s, 6.95, y, 5.85, 1.5, fill=RGBColor(0xF8, 0xF8, 0xF8), line_color=clr, line_width=Pt(2))
    add_rect(s, 6.95, y, 1.3, 1.5, fill=clr)
    add_textbox(s, sev, 6.95, y, 1.3, 1.5,
                font_size=14, bold=True, color=WHITE if sev=="SEVERE" else DARK_GRAY,
                align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
    add_textbox(s, pf, 8.35, y + 0.05, 4.3, 0.45,
                font_size=13, bold=True, color=DARK_GRAY)
    add_textbox(s, mort, 8.35, y + 0.5, 4.3, 0.35,
                font_size=12, color=NAVY)
    add_textbox(s, rx, 8.35, y + 0.85, 4.3, 0.6,
                font_size=11, color=DARK_GRAY, italic=True)

# ════════════════════════════════════════════════════════════════════
# SLIDE 5 – EPIDEMIOLOGY & ETIOLOGY
# ════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, fill=LIGHT_GRAY)
add_slide_header(s, "Epidemiology & Etiology", accent=NAVY)

# Left – epidemiology
add_rect(s, 0.3, 1.1, 5.9, 5.8, fill=WHITE, line_color=TEAL, line_width=Pt(2))
add_rect(s, 0.3, 1.1, 5.9, 0.5, fill=TEAL)
add_textbox(s, "EPIDEMIOLOGY", 0.3, 1.1, 5.9, 0.5,
            font_size=15, bold=True, color=WHITE,
            align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)

epi_points = [
    "• Incidence: 10–86 cases / 100,000 person-years\n  (varies by definition used)",
    "• ~3 million new cases annually worldwide",
    "• ICU prevalence: ~10% of ICU admissions;\n  23% of mechanically ventilated patients",
    "• Mortality: ~40% overall\n  Mild ~27%, Moderate ~32%, Severe ~45%",
    "• Median ICU stay: 8–12 days",
    "• Survivors: 25–30% have long-term\n  cognitive & functional impairment (PICS)",
    "• Male sex, increasing age, alcohol use,\n  low albumin – risk factors",
]
for i, pt in enumerate(epi_points):
    add_textbox(s, pt, 0.5, 1.7 + i * 0.73, 5.5, 0.68,
                font_size=12, color=DARK_GRAY)

# Right – etiology
add_rect(s, 6.6, 1.1, 6.5, 5.8, fill=WHITE, line_color=NAVY, line_width=Pt(2))
add_rect(s, 6.6, 1.1, 6.5, 0.5, fill=NAVY)
add_textbox(s, "COMMON CAUSES", 6.6, 1.1, 6.5, 0.5,
            font_size=15, bold=True, color=WHITE,
            align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)

# Direct vs indirect
add_rect(s, 6.75, 1.7, 2.9, 0.4, fill=TEAL)
add_textbox(s, "DIRECT (PULMONARY)", 6.75, 1.7, 2.9, 0.4,
            font_size=12, bold=True, color=WHITE,
            align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
direct = ["• Pneumonia (most common ~40%)",
          "• Aspiration of gastric contents",
          "• Pulmonary contusion/trauma",
          "• Inhalation injury / smoke",
          "• Near-drowning",
          "• Reperfusion injury"]
for i, p in enumerate(direct):
    add_textbox(s, p, 6.8, 2.18 + i * 0.45, 2.85, 0.42, font_size=12, color=DARK_GRAY)

add_rect(s, 9.85, 1.7, 3.1, 0.4, fill=ORANGE)
add_textbox(s, "INDIRECT (EXTRAPULMONARY)", 9.85, 1.7, 3.1, 0.4,
            font_size=12, bold=True, color=WHITE,
            align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
indirect = ["• Sepsis / Septic shock (most common ~40%)",
            "• Severe trauma / Burns",
            "• Pancreatitis",
            "• Blood transfusion (TRALI)",
            "• DIC / major surgery",
            "• Drug overdose"]
for i, p in enumerate(indirect):
    add_textbox(s, p, 9.9, 2.18 + i * 0.45, 3.05, 0.42, font_size=12, color=DARK_GRAY)

add_textbox(s, "⚠ Pneumonia + Sepsis account for ~80% of all ARDS cases", 6.75, 5.0, 6.1, 0.5,
            font_size=13, bold=True, color=RED, align=PP_ALIGN.CENTER)

# ════════════════════════════════════════════════════════════════════
# SLIDE 6 – PATHOPHYSIOLOGY
# ════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, fill=LIGHT_GRAY)
add_slide_header(s, "Pathophysiology – Phases of ARDS",
                 "Diffuse Alveolar Damage (DAD) – the histologic hallmark")

phases = [
    ("EXUDATIVE\n(Days 1–7)", TEAL,
     "• Disruption of alveolar-capillary membrane\n• Protein-rich edema floods alveoli\n• Hyaline membrane formation\n• Neutrophil infiltration; cytokine storm\n• Loss of surfactant → atelectasis\n• Severe V/Q mismatch → refractory hypoxemia",
     "Volutrauma\nBarotrauma\nAtelectrauma"),
    ("PROLIFERATIVE\n(Days 7–21)", NAVY,
     "• Type II pneumocyte proliferation\n• Resolution of alveolar edema\n• Shift to lymphocyte-predominant infiltrates\n• Alveolar exudate organization\n• New surfactant synthesis\n• Most patients begin to improve",
     "Reduced\ncompliance\nIncreased dead\nspace"),
    ("FIBROTIC\n(>21 days)", RED,
     "• Alveolar-duct & interstitial fibrosis\n• Emphysema-like bullae (barotrauma risk)\n• Pulmonary microvascular occlusion\n• Progressive pulmonary hypertension\n• High risk of pneumothorax\n• Persistent ventilator dependence",
     "Pulmonary HTN\nPneumothorax\nVentilator\ndependence"),
]

for i, (title, clr, bullets, risks) in enumerate(phases):
    x = 0.3 + i * 4.35
    add_rect(s, x, 1.1, 4.1, 0.7, fill=clr)
    add_textbox(s, title, x, 1.1, 4.1, 0.7,
                font_size=15, bold=True, color=WHITE,
                align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
    add_rect(s, x, 1.8, 4.1, 3.6, fill=WHITE, line_color=clr, line_width=Pt(2))
    add_textbox(s, bullets, x + 0.1, 1.85, 3.9, 3.5,
                font_size=12, color=DARK_GRAY)
    add_rect(s, x, 5.45, 4.1, 1.0, fill=RGBColor(0xF0, 0xF0, 0xF0), line_color=clr, line_width=Pt(1))
    add_textbox(s, "Key concerns:", x + 0.1, 5.45, 3.9, 0.3,
                font_size=11, bold=True, color=clr)
    add_textbox(s, risks, x + 0.1, 5.78, 3.9, 0.65,
                font_size=11, italic=True, color=DARK_GRAY)

# ════════════════════════════════════════════════════════════════════
# SLIDE 7 – CLINICAL FEATURES & DIAGNOSIS
# ════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, fill=LIGHT_GRAY)
add_slide_header(s, "Clinical Features & Diagnosis", accent=TEAL)

# Left column
add_rect(s, 0.3, 1.1, 5.9, 5.8, fill=WHITE, line_color=TEAL, line_width=Pt(2))
add_rect(s, 0.3, 1.1, 5.9, 0.5, fill=TEAL)
add_textbox(s, "CLINICAL FEATURES", 0.3, 1.1, 5.9, 0.5,
            font_size=15, bold=True, color=WHITE,
            align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)

feat_items = [
    ("Symptoms:", "• Acute onset dyspnoea (hours to days)\n• Severe hypoxaemia – refractory to oxygen\n• Tachypnoea, tachycardia, cyanosis\n• Signs of underlying cause (fever, sepsis)"),
    ("Signs:", "• Diffuse bilateral crackles on auscultation\n• Accessory muscle use / paradoxical breathing\n• No evidence of LVF (dry rale pattern)"),
    ("ABG:", "• PaO₂/FiO₂ <300 mmHg\n• Respiratory alkalosis early → acidosis late\n• Increased A-a gradient"),
    ("CXR/CT:", "• Bilateral alveolar opacities\n• CT: dense consolidation > dependent\n• Atelectasis > consolidation > GGO"),
]
y = 1.7
for label, content in feat_items:
    add_textbox(s, label, 0.45, y, 5.5, 0.3, font_size=12, bold=True, color=NAVY)
    add_textbox(s, content, 0.45, y + 0.28, 5.5, 0.9, font_size=12, color=DARK_GRAY)
    y += 1.28

# Right column – differential
add_rect(s, 6.6, 1.1, 6.5, 5.8, fill=WHITE, line_color=NAVY, line_width=Pt(2))
add_rect(s, 6.6, 1.1, 6.5, 0.5, fill=NAVY)
add_textbox(s, "DIFFERENTIAL DIAGNOSIS", 6.6, 1.1, 6.5, 0.5,
            font_size=15, bold=True, color=WHITE,
            align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)

diff_items = [
    ("Cardiogenic Pulmonary Oedema",
     "• PCWP >18 mmHg (ARDS <18)\n• BNP elevated, S3 gallop, JVD\n• Responds to diuretics"),
    ("Cryptogenic Organising Pneumonia",
     "• Subacute, patchy consolidation\n• Responds to steroids"),
    ("DAH / Alveolar Haemorrhage",
     "• Haemoptysis, anaemia\n• BAL: haemosiderin-laden macrophages"),
    ("Acute Eosinophilic Pneumonia",
     "• BAL >25% eosinophils\n• Dramatic steroid response"),
    ("TRALI",
     "• Within 6h of transfusion\n• Anti-HLA or anti-neutrophil antibodies"),
]
y = 1.7
for title, body in diff_items:
    add_textbox(s, title, 6.75, y, 6.1, 0.3, font_size=12, bold=True, color=TEAL)
    add_textbox(s, body, 6.75, y + 0.28, 6.1, 0.7, font_size=12, color=DARK_GRAY)
    y += 1.08

# ════════════════════════════════════════════════════════════════════
# SLIDE 8 – LUNG PROTECTIVE VENTILATION
# ════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, fill=LIGHT_GRAY)
add_slide_header(s, "Lung-Protective Ventilation – ARDSNet Protocol",
                 "ARMA Trial (N Engl J Med 2000) – The landmark study defining modern ARDS management")

# Key trial box
add_rect(s, 0.3, 1.1, 12.7, 1.1, fill=NAVY)
add_textbox(s,
    "ARDSNet ARMA Trial: TV 6 mL/kg PBW vs 12 mL/kg PBW — Mortality reduced from 39.8% → 31.0% (p=0.007)",
    0.35, 1.15, 12.6, 1.0,
    font_size=15, bold=True, color=YELLOW, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)

params = [
    ("Tidal Volume",       "6 mL/kg Predicted Body Weight\n(↓ to 4 mL/kg if Pplat >30 cmH₂O)"),
    ("Plateau Pressure",   "Target ≤ 30 cmH₂O\n(Minimise volutrauma/barotrauma)"),
    ("Driving Pressure",   "ΔP = Pplat – PEEP\nTarget < 14–15 cmH₂O (mortality predictor)"),
    ("PEEP",               "Minimum PEEP ≥ 5 cmH₂O\nTitrate by PEEP–FiO₂ table (ARDSNet)"),
    ("Respiratory Rate",   "6–35 bpm to maintain pH 7.30–7.45\n(Permissive hypercapnia acceptable pH ≥7.20)"),
    ("FiO₂ / SpO₂ goals",  "SpO₂ 88–95% (PaO₂ 55–80 mmHg)\nMinimise oxygen toxicity"),
]

for i, (param, val) in enumerate(params):
    col = i % 2
    row = i // 2
    x = 0.3 + col * 6.5
    y = 2.3 + row * 1.55
    add_rect(s, x, y, 6.2, 1.4, fill=WHITE, line_color=TEAL if col==0 else NAVY, line_width=Pt(2))
    add_rect(s, x, y, 2.2, 1.4, fill=TEAL if col==0 else NAVY)
    add_textbox(s, param, x, y, 2.2, 1.4,
                font_size=13, bold=True, color=WHITE,
                align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
    add_textbox(s, val, x + 2.3, y + 0.1, 3.75, 1.2,
                font_size=12, color=DARK_GRAY, v_anchor=MSO_ANCHOR.MIDDLE)

add_textbox(s,
    "💡 Predicted Body Weight (Males): 50 + 2.3 × (height in inches – 60) | (Females): 45.5 + 2.3 × (height in inches – 60)",
    0.3, 6.85, 12.7, 0.3,
    font_size=11, italic=True, color=NAVY, align=PP_ALIGN.CENTER)

# ════════════════════════════════════════════════════════════════════
# SLIDE 9 – PEEP STRATEGIES
# ════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, fill=LIGHT_GRAY)
add_slide_header(s, "PEEP Strategies & Lung Recruitment",
                 "Optimising end-expiratory pressure – no 'one-size-fits-all'", accent=NAVY)

# Three strategy boxes
strat = [
    ("ARDSNet\nPEEP-FiO₂ Table", TEAL,
     "Paired PEEP:FiO₂ table from ARMA trial\nSimple protocol, widely implemented\nFiO₂ 0.5 → PEEP 8–10 cmH₂O\nFiO₂ 0.9–1.0 → PEEP 14–24 cmH₂O\nMost commonly used in clinical practice"),
    ("Esophageal\nManometry", NAVY,
     "PEEP titrated to maintain +ve transpulmonary pressure\nPEEP = pleural pressure surrogate\nEPVent-2 Trial (2019):\nNo difference in mortality vs PEEP-FiO₂ table\nUseful in obese patients & stiff chest wall"),
    ("EIT-Guided\nPEEP Titration", ORANGE,
     "Electrical Impedance Tomography\nRealtime regional ventilation monitoring\n2024 Systematic Review (Songsangvorn et al.):\nImproved oxygenation vs standard care\nRecruitment manoeuvre + decremental PEEP\nEmergent tool for individualisation"),
]

for i, (title, clr, content) in enumerate(strat):
    x = 0.3 + i * 4.35
    add_rect(s, x, 1.1, 4.1, 0.8, fill=clr)
    add_textbox(s, title, x, 1.1, 4.1, 0.8,
                font_size=14, bold=True, color=WHITE,
                align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
    add_rect(s, x, 1.9, 4.1, 4.0, fill=WHITE, line_color=clr, line_width=Pt(2))
    add_textbox(s, content, x + 0.1, 1.95, 3.9, 3.9,
                font_size=12, color=DARK_GRAY)

# PEEP-FiO₂ mini-table
add_rect(s, 0.3, 6.0, 12.7, 0.95, fill=WHITE, line_color=TEAL, line_width=Pt(1))
add_textbox(s, "ARDSNet Lower PEEP / Higher FiO₂ Table:", 0.4, 5.97, 4.0, 0.4,
            font_size=12, bold=True, color=NAVY)
table_text = "FiO₂: 0.3  |  0.4  |  0.4  |  0.5  |  0.5  |  0.6  |  0.7  |  0.7  |  0.7  |  0.8  |  0.9  |  0.9  |  0.9  |  1.0\nPEEP:  5   |   5   |   8   |   8   |  10   |  10   |  10   |  12   |  14   |  14   |  14   |  16   |  18   |  18-24"
add_textbox(s, table_text, 0.4, 6.38, 12.5, 0.55,
            font_size=10.5, color=DARK_GRAY, align=PP_ALIGN.CENTER)

# ════════════════════════════════════════════════════════════════════
# SLIDE 10 – PRONE POSITIONING
# ════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, fill=LIGHT_GRAY)
add_slide_header(s, "Prone Positioning",
                 "A life-saving intervention in severe ARDS (P:F < 150 mmHg)")

# Mechanism box
add_rect(s, 0.3, 1.1, 6.0, 2.2, fill=WHITE, line_color=TEAL, line_width=Pt(2))
add_rect(s, 0.3, 1.1, 6.0, 0.45, fill=TEAL)
add_textbox(s, "MECHANISM OF BENEFIT", 0.3, 1.1, 6.0, 0.45,
            font_size=14, bold=True, color=WHITE,
            align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
mech = ("• Redistribution of atelectasis: dependent → non-dependent\n"
        "• More homogeneous stress/strain distribution across lung\n"
        "• Improved V/Q matching – reduces shunt fraction\n"
        "• Improved secretion drainage\n"
        "• Reduction in ventilator-induced lung injury (VILI)")
add_textbox(s, mech, 0.4, 1.6, 5.8, 1.65, font_size=12, color=DARK_GRAY)

# Evidence box
add_rect(s, 6.6, 1.1, 6.5, 2.2, fill=WHITE, line_color=NAVY, line_width=Pt(2))
add_rect(s, 6.6, 1.1, 6.5, 0.45, fill=NAVY)
add_textbox(s, "KEY EVIDENCE", 6.6, 1.1, 6.5, 0.45,
            font_size=14, bold=True, color=WHITE,
            align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
evid = ("• PROSEVA Trial (Guérin, NEJM 2013):\n  28-day mortality: 16% vs 32.8% (p<0.001)\n  P:F <150 mmHg; proned ≥16 h/day\n"
        "• Extended Prone (2026 Meta-analysis, Wawrzeniak):\n  Extended duration (>16h) further reduces mortality\n"
        "• ECMO + Prone (2025 Meta-analysis, Chen et al.):\n  Safe; improves oxygenation in VV-ECMO patients")
add_textbox(s, evid, 6.7, 1.6, 6.3, 1.65, font_size=11.5, color=DARK_GRAY)

# Protocol
add_rect(s, 0.3, 3.4, 12.7, 0.45, fill=NAVY)
add_textbox(s, "PRACTICAL PROTOCOL", 0.3, 3.4, 12.7, 0.45,
            font_size=14, bold=True, color=WHITE,
            align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)

prot_cols = [
    ("INDICATION", "• P:F < 150 mmHg on MV\n• ≥ 12 h optimised supine ventilation\n• Severe ARDS by Berlin criteria"),
    ("PRE-PRONE CHECKLIST", "• NMB (cisatracurium 15 mcg/kg/h)\n• Secure ETT, lines & catheters\n• Elevate head 30° (Trendelenburg)\n• Eye protection, pressure care"),
    ("DURATION & MONITORING", "• Minimum 16 consecutive h/session\n• SpO₂, SpO₂:FiO₂ ratio every hour\n• ABG at 1h, 4h, and end of session\n• Reassess P:F after resupination"),
    ("CONTRAINDICATIONS", "• Spinal instability / unstable fractures\n• Open abdomen / sternal wound\n• Massive haemoptysis (relative)\n• Facial trauma (relative)"),
]
for i, (hdr, body) in enumerate(prot_cols):
    x = 0.3 + i * 3.25
    add_rect(s, x, 3.85, 3.15, 3.1, fill=WHITE, line_color=TEAL, line_width=Pt(1))
    add_textbox(s, hdr, x + 0.1, 3.88, 2.95, 0.35, font_size=12, bold=True, color=TEAL)
    add_textbox(s, body, x + 0.1, 4.25, 2.95, 2.65, font_size=11, color=DARK_GRAY)

# ════════════════════════════════════════════════════════════════════
# SLIDE 11 – ADJUNCT THERAPIES
# ════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, fill=LIGHT_GRAY)
add_slide_header(s, "Adjunct Therapies in ARDS", accent=TEAL)

adjuncts = [
    ("NEUROMUSCULAR\nBLOCKADE", TEAL,
     "Mechanism: ↓O₂ consumption, ↑ synchrony,\nfacilitate prone positioning\n\n"
     "ACURASYS Trial (2010):\nCisatracurium → ↓90-day mortality in P:F <120\n\n"
     "ROSE Trial (2019):\nNo mortality benefit vs light sedation (P:F <150)\n\n"
     "Current practice: Use to facilitate prone positioning;\nroutine use NOT recommended",
     "ROSE & ACURASYS\ntrials"),
    ("CORTICOSTEROIDS", NAVY,
     "Mechanism: Anti-inflammatory; reduce fibroproliferation\n\n"
     "Early use (≤14 days):\nDexamethasone 20 mg/day → 10 mg/day\n(Villar DEXA-ARDS trial 2020: ↓ 60d mortality)\n\n"
     "Late use (>14 days): NOT beneficial – possibly harmful\n\n"
     "COVID-19 ARDS: Dexamethasone 6 mg/day × 10 days\n(RECOVERY Trial) – 28-day mortality ↓ significantly",
     "2026 Meta-analysis\n(Soumare et al.)\nAnn Intern Med:\n↓ Mortality in\npneumonia-ARDS"),
    ("INHALED VASODILATORS\n(iNO / Prostacyclins)", ORANGE,
     "Mechanism: Selective pulmonary vasodilation\nin ventilated alveoli → improves V/Q\n\n"
     "Inhaled NO (iNO):\n• Improves oxygenation transiently\n• NO mortality benefit\n• ↑ Risk of renal dysfunction\n• Limited to: severe ARDS + pulmonary HTN\n\n"
     "Inhaled prostacyclins:\n• Similar effect to iNO\n• No RCT mortality benefit",
     "Rescue use only;\nNO routine use"),
    ("CONSERVATIVE FLUID\nMANAGEMENT", TEAL,
     "Mechanism: Reduces lung oedema, shorter MV time\n\n"
     "FACTT Trial (ARDSNet, 2006):\nConservative strategy (CVP <4, PCWP <8)\n→ ↑Ventilator-free days by 2.5 days\nNo mortality difference\n\n"
     "Current recommendation:\nFluid-liberal in resuscitation phase\nConservative once haemodynamically stable",
     "FACTT Trial,\nARDSNet 2006"),
]

for i, (title, clr, content, ref) in enumerate(adjuncts):
    col = i % 2
    row = i // 2
    x = 0.3 + col * 6.5
    y = 1.1 + row * 2.95
    add_rect(s, x, y, 6.2, 2.85, fill=WHITE, line_color=clr, line_width=Pt(2))
    add_rect(s, x, y, 6.2, 0.55, fill=clr)
    add_textbox(s, title, x, y, 4.5, 0.55,
                font_size=13, bold=True, color=WHITE,
                align=PP_ALIGN.LEFT, v_anchor=MSO_ANCHOR.MIDDLE)
    add_textbox(s, "Ref: " + ref, x + 4.5, y, 1.65, 0.55,
                font_size=9, color=WHITE, italic=True,
                align=PP_ALIGN.RIGHT, v_anchor=MSO_ANCHOR.MIDDLE)
    add_textbox(s, content, x + 0.1, y + 0.6, 5.9, 2.2,
                font_size=11, color=DARK_GRAY)

# ════════════════════════════════════════════════════════════════════
# SLIDE 12 – ECMO
# ════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, fill=LIGHT_GRAY)
add_slide_header(s, "ECMO in Severe ARDS",
                 "Extracorporeal Membrane Oxygenation – Rescue Strategy when All Else Fails", accent=RED)

# Indications box
add_rect(s, 0.3, 1.1, 5.9, 2.9, fill=WHITE, line_color=RED, line_width=Pt(2))
add_rect(s, 0.3, 1.1, 5.9, 0.45, fill=RED)
add_textbox(s, "VV-ECMO INDICATIONS", 0.3, 1.1, 5.9, 0.45,
            font_size=14, bold=True, color=WHITE,
            align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
ind_text = ("EOLIA Trial Criteria (2018):\n"
            "• P:F <80 mmHg for >6h on FiO₂ ≥0.80 + PEEP ≥10\n"
            "• P:F <80 for >6h on FiO₂ >90% + PEEP ≥15\n"
            "• pH <7.25 + PaCO₂ >60 for >6h with RR >35\n\n"
            "Murray Score ≥3.0 (severe respiratory failure)\n"
            "Failed all conventional & advanced strategies:\n"
            "  – Prone positioning, iNO, high PEEP, HFOV")
add_textbox(s, ind_text, 0.4, 1.6, 5.7, 2.35, font_size=11.5, color=DARK_GRAY)

# Evidence box
add_rect(s, 6.6, 1.1, 6.5, 2.9, fill=WHITE, line_color=NAVY, line_width=Pt(2))
add_rect(s, 6.6, 1.1, 6.5, 0.45, fill=NAVY)
add_textbox(s, "KEY TRIALS", 6.6, 1.1, 6.5, 0.45,
            font_size=14, bold=True, color=WHITE,
            align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
trial_text = ("CESAR Trial (Peek, Lancet 2009):\n"
              "Referral to ECMO centre → improved survival\n"
              "63% vs 47% survival to 6 months (p=0.03)\n\n"
              "EOLIA Trial (Combes, NEJM 2018):\n"
              "60-day mortality: 35% ECMO vs 46% control (p=0.07)\n"
              "Network meta-analysis (Intensive Care Med 2024):\n"
              "VV-ECMO superior to prone or supine MV alone\n"
              "for severe ARDS (PMID: 38842731)")
add_textbox(s, trial_text, 6.7, 1.6, 6.3, 2.35, font_size=11, color=DARK_GRAY)

# Bottom – practical points
add_rect(s, 0.3, 4.1, 12.7, 0.45, fill=NAVY)
add_textbox(s, "PRACTICAL CONSIDERATIONS", 0.3, 4.1, 12.7, 0.45,
            font_size=14, bold=True, color=WHITE,
            align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)

ecmo_cols = [
    ("Circuit Mode", "Veno-Venous (VV-ECMO)\nfor pure respiratory failure\n(VA-ECMO if cardiac failure)"),
    ("Ultra-Protective\nVentilation", "TV 3–4 mL/kg PBW\nPplat <25 cmH₂O\nRR 10–15, PEEP 8–10\n'Lung rest' on ECMO"),
    ("Anticoagulation", "UFH infusion\nTarget ACT 180–220 s or\naPTT 60–80 s\nBalance bleeding vs clotting"),
    ("Weaning", "Wean FiO₂ sweep gas first\nThen blood flow\nSBO test: clamp sweep gas\nConsider decannulation if\nSpO₂ maintained ≥2h"),
]
for i, (hdr, body) in enumerate(ecmo_cols):
    x = 0.3 + i * 3.25
    add_rect(s, x, 4.6, 3.15, 2.35, fill=WHITE, line_color=RED, line_width=Pt(1))
    add_textbox(s, hdr, x + 0.1, 4.63, 2.95, 0.4, font_size=12, bold=True, color=RED)
    add_textbox(s, body, x + 0.1, 5.08, 2.95, 1.85, font_size=11, color=DARK_GRAY)

# ════════════════════════════════════════════════════════════════════
# SLIDE 13 – PHENOTYPING & PRECISION MEDICINE
# ════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, fill=LIGHT_GRAY)
add_slide_header(s, "Emerging Concepts: Phenotyping & Precision Medicine",
                 "Moving beyond 'one-size-fits-all' – individualised ARDS management", accent=TEAL)

# Phenotype boxes
add_rect(s, 0.3, 1.1, 6.0, 4.5, fill=WHITE, line_color=TEAL, line_width=Pt(2))
add_rect(s, 0.3, 1.1, 6.0, 0.5, fill=TEAL)
add_textbox(s, "HYPERINFLAMMATORY vs HYPOINFLAMMATORY", 0.3, 1.1, 6.0, 0.5,
            font_size=13, bold=True, color=WHITE,
            align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)

phen_table = [
    ("Feature", "Phenotype 1 (Hypo)", "Phenotype 2 (Hyper)"),
    ("Frequency", "~70%", "~30%"),
    ("Mortality", "Lower ~25%", "Higher ~45%"),
    ("IL-6, IL-8", "Low", "High"),
    ("Protein C", "Normal", "Low"),
    ("sRAGE", "Low", "High"),
    ("Vasopressor use", "Less", "More"),
    ("Response to\nhigh PEEP", "No benefit / harm", "Beneficial"),
    ("Response to\nsimvastatin", "Beneficial", "No benefit"),
]
col_widths = [2.0, 1.8, 1.8]
col_starts = [0.4, 2.5, 4.4]
row_colors = [TEAL, RGBColor(0xE8, 0xF5, 0xFB), WHITE]
for ri, row in enumerate(phen_table):
    y = 1.7 + ri * 0.44
    for ci, cell in enumerate(row):
        bg = TEAL if ri == 0 else (RGBColor(0xE8, 0xF5, 0xFB) if ci == 0 else WHITE)
        txt_clr = WHITE if ri == 0 or ci == 0 else DARK_GRAY
        add_rect(s, col_starts[ci], y, col_widths[ci] - 0.05, 0.42, fill=bg,
                 line_color=RGBColor(0xCC, 0xCC, 0xCC), line_width=Pt(0.5))
        add_textbox(s, cell, col_starts[ci] + 0.05, y + 0.02, col_widths[ci] - 0.15, 0.38,
                    font_size=10.5, bold=(ri == 0 or ci == 0),
                    color=txt_clr, v_anchor=MSO_ANCHOR.MIDDLE)

# Right – emerging therapies
add_rect(s, 6.6, 1.1, 6.5, 4.5, fill=WHITE, line_color=NAVY, line_width=Pt(2))
add_rect(s, 6.6, 1.1, 6.5, 0.5, fill=NAVY)
add_textbox(s, "EMERGING & INVESTIGATIONAL STRATEGIES", 6.6, 1.1, 6.5, 0.5,
            font_size=12, bold=True, color=WHITE,
            align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)

emerging = [
    ("Awake Prone Positioning", TEAL,
     "Spontaneously breathing patients on HFNC\nMeta-analyses show ↓ intubation risk in COVID-ARDS\nNow explored in non-COVID ARDS"),
    ("EIT-Guided Ventilation", NAVY,
     "Realtime regional lung ventilation monitoring\nIndividualise PEEP & TV\nPromising in 2024 systematic review"),
    ("Mesenchymal Stem Cells", TEAL,
     "Phase II RCTs underway\nAnti-inflammatory, regenerative potential\nNot yet standard of care"),
    ("Biomarker-Guided Therapy", NAVY,
     "Targeted Rx based on plasma phenotype\n(Latent class analysis – Calfee et al.)\nHigh PEEP for hyperinflammatory phenotype\nStatins for hypoinflammatory phenotype"),
    ("Extravascular Lung Water\n(EVLW) Monitoring", TEAL,
     "Transpulmonary thermodilution (PiCCO)\nGuide fluid management\nPVPI >3 = alveolar flooding"),
]
y = 1.7
for title, clr, body in emerging:
    add_textbox(s, "▶ " + title, 6.75, y, 6.1, 0.3,
                font_size=12, bold=True, color=clr)
    add_textbox(s, body, 6.75, y + 0.3, 6.1, 0.55,
                font_size=11, color=DARK_GRAY)
    y += 0.9

# Bottom – future
add_rect(s, 0.3, 5.7, 12.7, 0.55, fill=RGBColor(0xE8, 0xF5, 0xFB), line_color=TEAL, line_width=Pt(1))
add_textbox(s,
    "🔬 The future of ARDS management lies in sub-phenotyping patients to match interventions (PEEP, steroids, statins) to individual biology rather than applying uniform protocols.",
    0.4, 5.72, 12.5, 0.5,
    font_size=12, italic=True, color=NAVY, align=PP_ALIGN.CENTER)

# ════════════════════════════════════════════════════════════════════
# SLIDE 14 – COVID-19 ARDS (Bonus)
# ════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, fill=LIGHT_GRAY)
add_slide_header(s, "COVID-19 Associated ARDS – Lessons & Legacy",
                 "The pandemic that reshaped critical care practice", accent=NAVY)

add_rect(s, 0.3, 1.1, 12.7, 0.7, fill=RGBColor(0xE0, 0xF0, 0xFA))
add_textbox(s,
    "COVID-ARDS shares features of classic ARDS but exhibits distinct phenotypes:\n"
    "Type L (Low elastance, Low PEEP responsiveness) and Type H (High elastance, High PEEP responsiveness, recruitable)",
    0.4, 1.12, 12.5, 0.65,
    font_size=12, color=NAVY, italic=True)

cols_covid = [
    ("DIFFERENCES from\nClassic ARDS", RED,
     "• Disproportionate hypoxaemia vs\n  preserved compliance (Type L)\n• Severe endotheliitis / microthrombi\n• High D-dimer, hypercoagulability\n• Prone to pulmonary emboli\n• Prolonged fibrotic phase\n• Cytokine storm (IL-6, IL-1β)\n• Higher ECMO utilisation"),
    ("MANAGEMENT\nPEARLS", TEAL,
     "• Awake prone positioning (HFNC)\n  ↓ Intubation in mild–mod COVID-ARDS\n• Dexamethasone 6 mg × 10 days\n  (RECOVERY Trial – mortality ↓ ~3%)\n• Anticoagulation with LMWH\n• Tocilizumab / baricitinib in cytokine storm\n• CPAP/NIV acceptable in Type L\n• Early intubation in Type H"),
    ("LEGACY TO CRITICAL\nCARE PRACTICE", NAVY,
     "• Universal adoption of awake proning\n• Accelerated ECMO programme expansion\n• Phenotype-based ventilation strategies\n• Widespread HFNC use before intubation\n• Multidisciplinary ARDS teams\n• Remote ICU / telemedicine ICU\n• Revalidation of steroid use in ARDS\n• Enhanced post-ICU rehabilitation"),
]

for i, (title, clr, body) in enumerate(cols_covid):
    x = 0.3 + i * 4.35
    add_rect(s, x, 1.95, 4.1, 5.0, fill=WHITE, line_color=clr, line_width=Pt(2))
    add_rect(s, x, 1.95, 4.1, 0.6, fill=clr)
    add_textbox(s, title, x, 1.95, 4.1, 0.6,
                font_size=14, bold=True, color=WHITE,
                align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
    add_textbox(s, body, x + 0.1, 2.6, 3.9, 4.3,
                font_size=12, color=DARK_GRAY)

# ════════════════════════════════════════════════════════════════════
# SLIDE 15 – SUMMARY & KEY TAKEAWAYS
# ════════════════════════════════════════════════════════════════════
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, fill=NAVY)
add_rect(s, 0, 0, 13.333, 1.05, fill=TEAL)
add_textbox(s, "Summary & Key Takeaways", 0.3, 0.08, 12.5, 0.7,
            font_size=26, bold=True, color=WHITE,
            align=PP_ALIGN.LEFT, v_anchor=MSO_ANCHOR.MIDDLE)
add_textbox(s, "ARDS: Evolving Strategies | MD Medicine Seminar 2026", 0.3, 0.73, 12.5, 0.33,
            font_size=13, color=WHITE, align=PP_ALIGN.LEFT, italic=True)

takeaways = [
    ("1", "Berlin 2012 is the current gold standard – 3-tier severity (Mild/Moderate/Severe) guides management intensity"),
    ("2", "Lung-protective ventilation (6 mL/kg PBW, Pplat ≤30, ΔP <15) is the single most evidence-based intervention – ARDSNet ARMA trial"),
    ("3", "Prone positioning ≥16 h/day is the most powerful intervention for P:F <150 – PROSEVA trial (NNT ~6)"),
    ("4", "PEEP titration remains controversial – no universal method; PEEP-FiO₂ table for simplicity, phenotype-guided for precision"),
    ("5", "ECMO is a rescue therapy – VV-ECMO for pure respiratory failure when P:F <80 despite maximal conventional therapy"),
    ("6", "Steroids: Dexamethasone early (≤14 days) may reduce mortality; late use is harmful; COVID-ARDS – RECOVERY protocol"),
    ("7", "ARDS phenotyping (hyper vs hypo-inflammatory) is the frontier – same P:F, different biology, different optimal treatment"),
    ("8", "General ICU care (early enteral nutrition, VTE prophylaxis, sedation minimisation, infection control) saves as many lives as specific therapies"),
]

for i, (num, txt) in enumerate(takeaways):
    col = i % 2
    row = i // 2
    x = 0.3 + col * 6.5
    y = 1.15 + row * 1.45
    clr = TEAL if col == 0 else YELLOW
    add_rect(s, x, y, 0.55, 1.25, fill=clr)
    add_textbox(s, num, x, y, 0.55, 1.25,
                font_size=20, bold=True, color=NAVY,
                align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
    add_textbox(s, txt, x + 0.65, y + 0.08, 5.65, 1.15,
                font_size=12, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE)

add_rect(s, 0, 7.1, 13.333, 0.4, fill=TEAL)
add_textbox(s, "Thank you  |  Questions & Discussion",
            0.3, 7.1, 10, 0.4,
            font_size=13, bold=True, color=WHITE, align=PP_ALIGN.LEFT,
            v_anchor=MSO_ANCHOR.MIDDLE)
add_textbox(s, "2026", 11.8, 7.1, 1.3, 0.4,
            font_size=13, color=WHITE, align=PP_ALIGN.RIGHT,
            v_anchor=MSO_ANCHOR.MIDDLE)

# ════════════════════════════════════════════════════════════════════
# SAVE
# ════════════════════════════════════════════════════════════════════
out_path = "/tmp/workspace/ards-ppt/ARDS_Evolving_Strategies_MD_Medicine.pptx"
buf = BytesIO()
prs.save(buf)
with open(out_path, "wb") as f:
    f.write(buf.getvalue())

print(f"Saved: {out_path}")
print(f"Slides: {len(prs.slides)}")
Running Command

cd /tmp/workspace/ards-ppt && python build_ards_ppt.py 2>&1

Running Command

python3 -c " from pptx import Presentation prs = Presentation('/tmp/workspace/ards-ppt/ARDS_Evolving_Strategies_MD_Medicine.pptx') for i, slide in enumerate(prs.slides, 1): texts = [] for shape in slide.shapes: if shape.has_text_frame: t = shape.text_frame.text.strip() if t: texts.append(t[:60]) print(f'Slide {i}: {texts[:3]}') import os sz = os.path.getsize('/tmp/workspace/ards-ppt/ARDS_Evolving_Strategies_MD_Medicine.pptx') print(f'File size: {sz/1024:.1f} KB') "

Your presentation is ready for download:

ARDS Evolving Strategies MD Medicine

Presentation · PPTX


What's inside – 15 slides, fully content-rich

#SlideKey Content
1Title Slide"ARDS: Evolving Strategies" – Navy/Teal/Gold design
2Seminar Overview12-topic index with numbered tiles
3Historical TimelineAshbaugh 1967 → Berlin 2012 → Phenotyping era
4Berlin Definition 2012All 4 criteria + 3-tier severity with mortality & management implications
5Epidemiology & EtiologyIncidence, ICU prevalence, mortality; Direct vs Indirect causes table
6Pathophysiology3 phases: Exudative / Proliferative / Fibrotic with key pathology
7Clinical Features & DiagnosisSymptoms, ABG, CXR/CT findings + differential diagnosis
8Lung-Protective VentilationARDSNet ARMA data (31% vs 39.8%), TV/Pplat/ΔP/PEEP targets
9PEEP StrategiesARDSNet table, esophageal manometry (EPVent-2), EIT-guided (2024 evidence)
10Prone PositioningPROSEVA trial, 2026 meta-analysis (extended prone), protocol & contraindications
11Adjunct TherapiesNMB (ACURASYS vs ROSE), Steroids (DEXA-ARDS + COVID), iNO, Fluids (FACTT)
12ECMOCESAR + EOLIA trials, VV-ECMO indications, circuit management, weaning
13Phenotyping & Precision MedicineHyper vs Hypo-inflammatory phenotype table; emerging strategies
14COVID-19 ARDSType L/H phenotypes, RECOVERY trial dexamethasone, legacy lessons
15Summary & Key Takeaways8 core messages on dark navy background
Sources used: Fishman's Pulmonary, Harrison's 22e (2025), Murray & Nadel, Washington Manual, Miller's Anesthesia, Barash's Anesthesia, plus PubMed evidence up to 2026 (PMID 38842731, 41325621, 41631378, 40043585).

Lft picture of chronic hepatitis B

Reading File
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Reading File
Reading File
Reading File
Finding Sources
Reading File
I now have all the data needed for a thorough answer. Here is a comprehensive breakdown of the LFT (Liver Function Test) picture in Chronic Hepatitis B, synthesised from Harrison's 22e, Goldman-Cecil, Tietz, and Sleisenger:

LFT Picture in Chronic Hepatitis B

1. Aminotransferases (ALT & AST) - The Most Important Tests

ParameterFindingKey Points
ALTMildly-moderately elevatedUsually 100–1000 IU/L; tends to be higher than AST in early/active disease
ASTMildly elevatedAST < ALT in early phases; once cirrhosis is established, AST exceeds ALT (AST:ALT ratio >1)
PatternFluctuatingNot persistently elevated - may be normal between flares
"Aminotransferase elevations tend to be modest for chronic hepatitis B but may fluctuate in the range of 100 to 1000 units. ALT tends to be more elevated than AST; however, once cirrhosis is established, AST tends to exceed ALT." - Harrison's 22e

2. Cholestatic Markers

ParameterFinding
Alkaline Phosphatase (ALP)Normal or only marginally elevated (unlike cholestatic liver disease)
GGT (γ-GT)Mildly elevated, especially in patients with cirrhosis
BilirubinUsually normal in mild/moderate disease; 3–10 mg/dL in severe cases

3. Synthetic Function Tests

ParameterFinding
Serum AlbuminNormal in early/compensated disease; hypoalbuminemia in severe or end-stage disease
Prothrombin Time (PT)/INRNormal initially; prolonged in severe or end-stage cases
GlobulinsNotably, hyperglobulinemia is ABSENT in CHB (distinguishes it from autoimmune hepatitis)

4. Phase-Based LFT Pattern (Tietz TABLE 51.5)

PhaseALT/ASTHBsAgHBeAgHBV DNA
Immune TolerantNormal++/−High positive
Immune Active (HBeAg+)Elevated (100-1000 IU/L)++>10⁶ IU/mL
Immune Control (Inactive carrier)Normal+Low/negative
HBeAg-negative CHBElevated (fluctuating)+2×10³–10⁶ IU/mL
Occult HBVNormalVery low/negative

5. Other Relevant Tests

  • Platelet count: Thrombocytopenia (due to hypersplenism) indicates progression to cirrhosis
  • APRI score: (AST / AST-ULN × 100) / platelet count - used as a non-invasive fibrosis marker
  • Autoantibodies (ANA, ASMA): Absent - helps exclude autoimmune hepatitis

6. When Cirrhosis Develops

FeatureChange
AST:ALT ratioReverses - AST > ALT
BilirubinRising
AlbuminFalling
PT/INRProlonged
ALP/GGTModerately elevated
PlateletsFalling (hypersplenism)
ALT/ASTMay paradoxically normalise ("burnt-out cirrhosis")

Summary Pattern at a Glance

EARLY/ACTIVE CHB:        ALT > AST (modest ↑) | ALP normal | Bili normal | Albumin normal
SEVERE/CIRRHOTIC CHB:    AST > ALT | ALP/GGT ↑ | Bili ↑ | Albumin ↓ | PT prolonged
INACTIVE CARRIER:        ALL LFTs NORMAL (but HBsAg+, HBV DNA low)
Sources: Harrison's Principles of Internal Medicine 22e (2025), Goldman-Cecil Medicine, Tietz Textbook of Laboratory Medicine 7e, Sleisenger & Fordtran's Gastrointestinal and Liver Disease.
This is a shared conversation. Sign in to Orris to start your own chat.