Prepare a ppt topic is different types of cardiac valves with pictures and drug given for each valve and cardioembolic stroke etiology symptoms and signs, relevant findings treatment

Reading File
Reading File
Finding Sources
Finding Sources
Reading File
Searching the Web

cardiac valve anatomy types aortic mitral tricuspid pulmonary images diagram

Reading File
Reading File
Finding Sources
Searching the Web

cardioembolic stroke causes symptoms signs treatment anticoagulation

Reading File
Finding Sources
Finding Sources
Reading File
Searching the Web

mitral valve stenosis regurgitation prolapse echocardiogram image cardiology

Running Command

mkdir -p /tmp/workspace/cardiac-valves-ppt && ls /tmp/workspace/

Writing File

~/cardiac-valves-ppt/build_ppt.py

import json, subprocess, base64, sys
from io import BytesIO
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

# ── Colour palette ──────────────────────────────────────────────────────────
DARK_BLUE   = RGBColor(0x0D, 0x47, 0x8A)   # deep navy
MED_BLUE    = RGBColor(0x15, 0x65, 0xC0)   # mid blue
ACCENT_TEAL = RGBColor(0x00, 0x89, 0x7B)   # teal accent
LIGHT_BG    = RGBColor(0xE8, 0xF0, 0xFE)   # very light blue bg
WHITE       = RGBColor(0xFF, 0xFF, 0xFF)
DARK_TEXT   = RGBColor(0x1A, 0x23, 0x7E)
MID_TEXT    = RGBColor(0x37, 0x47, 0x4F)
RED_ACCENT  = RGBColor(0xC6, 0x28, 0x28)
ORANGE      = RGBColor(0xE6, 0x5C, 0x00)
GREEN       = RGBColor(0x1B, 0x5E, 0x20)
GOLD        = RGBColor(0xF5, 0x7F, 0x17)

prs = Presentation()
prs.slide_width  = Inches(13.333)
prs.slide_height = Inches(7.5)

blank = prs.slide_layouts[6]   # fully blank

# ── Helper functions ─────────────────────────────────────────────────────────
def add_rect(slide, x, y, w, h, fill_color, alpha=None):
    shp = slide.shapes.add_shape(1, Inches(x), Inches(y), Inches(w), Inches(h))
    shp.fill.solid()
    shp.fill.fore_color.rgb = fill_color
    shp.line.fill.background()
    shp.shadow.inherit = False
    return shp

def add_text(slide, text, x, y, w, h, font_size=18, bold=False,
             color=DARK_TEXT, align=PP_ALIGN.LEFT, italic=False,
             v_anchor=MSO_ANCHOR.MIDDLE, wrap=True):
    tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
    tf = tb.text_frame
    tf.word_wrap = wrap
    tf.vertical_anchor = v_anchor
    tf.margin_left = Inches(0.05)
    tf.margin_right = Inches(0.05)
    tf.margin_top = 0
    tf.margin_bottom = 0
    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 tb

def add_multiline(slide, lines, x, y, w, h, font_size=14, bold_first=False,
                  color=MID_TEXT, line_color_override=None, spacing=1.15,
                  wrap=True):
    """lines: list of (text, bold, color_override)"""
    tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
    tf = tb.text_frame
    tf.word_wrap = wrap
    tf.margin_left = Inches(0.08)
    tf.margin_right = Inches(0.05)
    tf.margin_top = Inches(0.05)
    tf.margin_bottom = 0
    for i, item in enumerate(lines):
        if isinstance(item, str):
            text, bold, clr = item, False, color
        else:
            text = item[0]
            bold = item[1] if len(item) > 1 else False
            clr  = item[2] if len(item) > 2 else color
        if i == 0:
            p = tf.paragraphs[0]
        else:
            p = tf.add_paragraph()
        p.alignment = PP_ALIGN.LEFT
        run = p.add_run()
        run.text = text
        run.font.size = Pt(font_size)
        run.font.bold = bold
        run.font.color.rgb = clr
        run.font.name = "Calibri"
    return tb

def fetch_image_b64(url):
    try:
        result = json.loads(subprocess.check_output(
            ["python", "/tmp/skills/shared/scripts/fetch_images.py", url],
            timeout=20
        ))
        if result and result[0]["base64"]:
            return result[0]["base64"]
    except Exception as e:
        print(f"  fetch failed: {url} — {e}")
    return None

def embed_image(slide, url, x, y, w, h=None):
    b64 = fetch_image_b64(url)
    if not b64:
        # draw a placeholder box
        box = add_rect(slide, x, y, w, h or w*0.65, LIGHT_BG)
        add_text(slide, "[Image]", x, y, w, h or w*0.65, 10, color=MID_TEXT, align=PP_ALIGN.CENTER)
        return
    raw = base64.b64decode(b64.split(",", 1)[1])
    if h:
        slide.shapes.add_picture(BytesIO(raw), Inches(x), Inches(y),
                                  width=Inches(w), height=Inches(h))
    else:
        slide.shapes.add_picture(BytesIO(raw), Inches(x), Inches(y), width=Inches(w))

def header_bar(slide, title, subtitle=None):
    """Dark blue header bar at top with white title."""
    add_rect(slide, 0, 0, 13.333, 1.05, DARK_BLUE)
    add_text(slide, title, 0.2, 0.05, 9, 0.65, 28, True, WHITE, PP_ALIGN.LEFT)
    if subtitle:
        add_text(slide, subtitle, 0.2, 0.65, 12, 0.35, 13, False,
                 RGBColor(0xBB, 0xDE, 0xFB), PP_ALIGN.LEFT)

def bottom_bar(slide, text="Cardiac Valves & Cardioembolic Stroke"):
    add_rect(slide, 0, 7.15, 13.333, 0.35, DARK_BLUE)
    add_text(slide, text, 0.2, 7.15, 12, 0.35, 9, False,
             RGBColor(0xBB, 0xDE, 0xFB), PP_ALIGN.LEFT)

# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 1: Title Slide
# ═══════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
# full gradient-like background
add_rect(slide, 0, 0, 13.333, 7.5, DARK_BLUE)
add_rect(slide, 0, 4.5, 13.333, 3.0, MED_BLUE)
# decorative teal accent bar
add_rect(slide, 0, 3.6, 13.333, 0.06, ACCENT_TEAL)

add_text(slide, "CARDIAC VALVES", 0.5, 0.8, 12.5, 1.2, 48, True, WHITE, PP_ALIGN.CENTER)
add_text(slide, "Types  |  Pathology  |  Drug Management", 0.5, 2.0, 12.5, 0.7,
         22, False, RGBColor(0xBB, 0xDE, 0xFB), PP_ALIGN.CENTER)
add_text(slide, "CARDIOEMBOLIC STROKE", 0.5, 3.8, 12.5, 0.9, 32, True,
         WHITE, PP_ALIGN.CENTER)
add_text(slide, "Etiology  |  Symptoms & Signs  |  Relevant Findings  |  Treatment",
         0.5, 4.65, 12.5, 0.6, 18, False, RGBColor(0xBB, 0xDE, 0xFB), PP_ALIGN.CENTER)
add_text(slide, "Based on Harrison's Internal Medicine 22E • Braunwald's Heart Disease 2025 • Fuster's The Heart 15E",
         0.5, 6.8, 12.5, 0.5, 9, False, RGBColor(0x78, 0xA8, 0xD8), PP_ALIGN.CENTER)

# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 2: Overview — 4 Cardiac Valves
# ═══════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_rect(slide, 0, 0, 13.333, 7.5, RGBColor(0xF5, 0xF7, 0xFF))
header_bar(slide, "Overview: The Four Cardiac Valves",
           "Two atrioventricular valves + Two semilunar valves")

# Heart diagram image
HEART_VALVES_IMG = "https://teachmeanatomy.info/wp-content/uploads/The-Four-Valves-of-the-Heart-1024x817.jpg"
embed_image(slide, HEART_VALVES_IMG, 0.3, 1.2, 4.8, 5.8)

# AV Valves column
add_rect(slide, 5.4, 1.15, 3.6, 2.9, RGBColor(0xE3, 0xF2, 0xFD))
add_rect(slide, 5.4, 1.15, 3.6, 0.38, MED_BLUE)
add_text(slide, "Atrioventricular (AV) Valves", 5.4, 1.15, 3.6, 0.38, 11, True, WHITE, PP_ALIGN.CENTER)
add_multiline(slide, [
    ("MITRAL VALVE (Bicuspid)", True, DARK_BLUE),
    ("  Between left atrium & left ventricle", False, MID_TEXT),
    ("  2 cusps: anterior & posterior", False, MID_TEXT),
    ("  Supported by chordae tendineae", False, MID_TEXT),
    ("  Prevents backflow to LA during systole", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("TRICUSPID VALVE", True, DARK_BLUE),
    ("  Between right atrium & right ventricle", False, MID_TEXT),
    ("  3 cusps: anterior, posterior, septal", False, MID_TEXT),
    ("  Prevents backflow to RA during systole", False, MID_TEXT),
], 5.45, 1.55, 3.5, 2.45, 11)

# Semilunar Valves column
add_rect(slide, 9.2, 1.15, 3.9, 2.9, RGBColor(0xE8, 0xF5, 0xE9))
add_rect(slide, 9.2, 1.15, 3.9, 0.38, ACCENT_TEAL)
add_text(slide, "Semilunar Valves", 9.2, 1.15, 3.9, 0.38, 11, True, WHITE, PP_ALIGN.CENTER)
add_multiline(slide, [
    ("AORTIC VALVE", True, RGBColor(0x00, 0x60, 0x50)),
    ("  Between left ventricle & aorta", False, MID_TEXT),
    ("  3 semilunar cusps (RCC, LCC, NCC)", False, MID_TEXT),
    ("  No papillary muscles", False, MID_TEXT),
    ("  Prevents backflow to LV in diastole", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("PULMONARY VALVE", True, RGBColor(0x00, 0x60, 0x50)),
    ("  Between right ventricle & pulmonary artery", False, MID_TEXT),
    ("  3 semilunar cusps", False, MID_TEXT),
    ("  Directs blood to lungs for oxygenation", False, MID_TEXT),
], 9.25, 1.55, 3.8, 2.45, 11)

# Blood flow summary boxes at bottom
for i, (label, color) in enumerate([
    ("RA -> Tricuspid -> RV", MED_BLUE),
    ("RV -> Pulmonary -> Lungs", ACCENT_TEAL),
    ("Lungs -> LA -> Mitral -> LV", MED_BLUE),
    ("LV -> Aortic -> Body", ACCENT_TEAL),
]):
    bx = 5.4 + i * 1.97
    add_rect(slide, bx, 4.2, 1.9, 0.55, color)
    add_text(slide, label, bx, 4.2, 1.9, 0.55, 9, True, WHITE, PP_ALIGN.CENTER)

# Valve types summary
add_rect(slide, 5.4, 4.9, 7.7, 2.15, WHITE)
add_rect(slide, 5.4, 4.9, 7.7, 0.3, DARK_BLUE)
add_text(slide, "Key Structural Facts", 5.4, 4.9, 7.7, 0.3, 10, True, WHITE, PP_ALIGN.CENTER)
add_multiline(slide, [
    ("Valve", True, DARK_BLUE),
    ("Type", True, DARK_BLUE),
    ("Cusps", True, DARK_BLUE),
    ("Location", True, DARK_BLUE),
], 5.45, 5.22, 7.6, 0.3, 10)
rows = [
    ("Mitral", "AV", "2", "LA - LV"),
    ("Tricuspid", "AV", "3", "RA - RV"),
    ("Aortic", "Semilunar", "3", "LV - Aorta"),
    ("Pulmonary", "Semilunar", "3", "RV - PA"),
]
for ri, (n, t, c, loc) in enumerate(rows):
    y = 5.55 + ri * 0.38
    bg = LIGHT_BG if ri % 2 == 0 else WHITE
    add_rect(slide, 5.4, y, 7.7, 0.38, bg)
    add_text(slide, n,   5.45, y, 1.5, 0.38, 10, True,  DARK_BLUE, PP_ALIGN.LEFT)
    add_text(slide, t,   7.0,  y, 1.5, 0.38, 10, False, MID_TEXT,  PP_ALIGN.LEFT)
    add_text(slide, c,   8.6,  y, 0.8, 0.38, 10, False, MID_TEXT,  PP_ALIGN.CENTER)
    add_text(slide, loc, 9.5,  y, 3.5, 0.38, 10, False, MID_TEXT,  PP_ALIGN.LEFT)

bottom_bar(slide)

# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 3: Mitral Valve — Diseases & Drugs
# ═══════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_rect(slide, 0, 0, 13.333, 7.5, RGBColor(0xF5, 0xF7, 0xFF))
header_bar(slide, "Mitral Valve — Disease & Drug Management",
           "Mitral Stenosis | Mitral Regurgitation | Mitral Valve Prolapse")

MITRAL_IMG = "https://www.heart-valve-surgery.com/Images/mitral-valve-echo-regurgitation-types.jpg"
embed_image(slide, MITRAL_IMG, 0.2, 1.15, 4.0, 2.8)

# Mitral Stenosis
add_rect(slide, 0.2, 4.1, 4.0, 0.4, RED_ACCENT)
add_text(slide, "Mitral Stenosis (MS)", 0.2, 4.1, 4.0, 0.4, 12, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 0.2, 4.5, 4.0, 2.7, RGBColor(0xFF, 0xEB, 0xEE))
add_multiline(slide, [
    ("Etiology: Rheumatic fever (most common)", True, RED_ACCENT),
    ("Clinical: Dyspnea, hemoptysis, opening snap,", False, MID_TEXT),
    ("  rumbling mid-diastolic murmur at apex", False, MID_TEXT),
    ("Complications: Atrial fibrillation, pulmonary HTN,", False, MID_TEXT),
    ("  systemic embolism", False, MID_TEXT),
    ("DRUGS:", True, RED_ACCENT),
    ("  - Beta-blockers / CCBs (rate control if AF)", False, MID_TEXT),
    ("  - Warfarin/VKA (if AF or embolism)", False, MID_TEXT),
    ("  - Diuretics (pulmonary congestion)", False, MID_TEXT),
    ("  - PBMV (balloon valvotomy) if severe", False, MID_TEXT),
], 0.25, 4.52, 3.9, 2.65, 10.5)

# Mitral Regurgitation
add_rect(slide, 4.5, 1.15, 4.1, 0.4, MED_BLUE)
add_text(slide, "Mitral Regurgitation (MR)", 4.5, 1.15, 4.1, 0.4, 12, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 4.5, 1.55, 4.1, 3.0, RGBColor(0xE3, 0xF2, 0xFD))
add_multiline(slide, [
    ("Etiology: MVP, rheumatic, ischemic, infective", True, MED_BLUE),
    ("  endocarditis, annular dilatation", False, MID_TEXT),
    ("Clinical: Pansystolic murmur at apex radiating", False, MID_TEXT),
    ("  to axilla, exertional dyspnea, AF", False, MID_TEXT),
    ("DRUGS (Acute MR):", True, MED_BLUE),
    ("  - Vasodilators: Nitroprusside, Nitrates", False, MID_TEXT),
    ("  - Inotropes: Dobutamine (cardiogenic shock)", False, MID_TEXT),
    ("DRUGS (Chronic MR / HFrEF):", True, MED_BLUE),
    ("  - ACE inhibitors / ARBs (afterload reduction)", False, MID_TEXT),
    ("  - Beta-blockers (rate/remodeling)", False, MID_TEXT),
    ("  - Anticoagulation (warfarin) if AF present", False, MID_TEXT),
    ("  - Diuretics (volume overload)", False, MID_TEXT),
    ("Surgery: Repair or replacement when LVEF <60%", False, RED_ACCENT),
], 4.55, 1.57, 4.0, 2.95, 10.5)

# Mitral Valve Prolapse
add_rect(slide, 4.5, 4.65, 4.1, 0.4, ACCENT_TEAL)
add_text(slide, "Mitral Valve Prolapse (MVP)", 4.5, 4.65, 4.1, 0.4, 12, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 4.5, 5.05, 4.1, 2.15, RGBColor(0xE0, 0xF2, 0xF1))
add_multiline(slide, [
    ("Most common cause of non-ischemic MR", True, ACCENT_TEAL),
    ("Clinical: Mid-systolic click, late systolic murmur", False, MID_TEXT),
    ("  Chest pain, palpitations, anxiety", False, MID_TEXT),
    ("DRUGS:", True, ACCENT_TEAL),
    ("  - Aspirin (cryptogenic stroke/TIA)", False, MID_TEXT),
    ("  - Beta-blockers (palpitations, chest pain)", False, MID_TEXT),
    ("  - Warfarin/OAC (if AF develops)", False, MID_TEXT),
    ("  - Avoid: No treatment if asymptomatic", False, MID_TEXT),
], 4.55, 5.07, 4.0, 2.1, 10.5)

# Drug summary column
add_rect(slide, 8.8, 1.15, 4.33, 0.4, DARK_BLUE)
add_text(slide, "Drug Reference — Mitral Valve", 8.8, 1.15, 4.33, 0.4, 12, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 8.8, 1.55, 4.33, 5.65, RGBColor(0xF3, 0xF4, 0xFF))
drug_lines = [
    ("Warfarin (VKA)", True, DARK_BLUE),
    ("  Target INR 2-3 (MS with AF/embolism)", False, MID_TEXT),
    ("  Target INR 2.5-3.5 (mechanical valve)", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("DOACs (rivaroxaban/apixaban/dabigatran)", True, DARK_BLUE),
    ("  For non-valvular AF (NOT mechanical valves)", False, MID_TEXT),
    ("  Preferred over VKA for AF in native valves", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Beta-blockers", True, DARK_BLUE),
    ("  Metoprolol, Bisoprolol", False, MID_TEXT),
    ("  Rate control in AF; symptom relief in MVP", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("ACE Inhibitors / ARBs", True, DARK_BLUE),
    ("  Enalapril, Ramipril, Losartan", False, MID_TEXT),
    ("  For chronic MR with LV dysfunction", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Diuretics (Furosemide)", True, DARK_BLUE),
    ("  Pulmonary congestion relief", False, MID_TEXT),
    ("  Use with caution (monitor electrolytes)", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Aspirin 75-100 mg", True, DARK_BLUE),
    ("  MVP with cryptogenic stroke/TIA", False, MID_TEXT),
    ("  Bioprosthetic valves", False, MID_TEXT),
]
add_multiline(slide, drug_lines, 8.85, 1.58, 4.23, 5.58, 10)
bottom_bar(slide)

# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 4: Aortic Valve — Diseases & Drugs
# ═══════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_rect(slide, 0, 0, 13.333, 7.5, RGBColor(0xF5, 0xF7, 0xFF))
header_bar(slide, "Aortic Valve — Disease & Drug Management",
           "Aortic Stenosis | Aortic Regurgitation | Bicuspid Aortic Valve")

AORTIC_IMG = "https://microbenotes.com/wp-content/uploads/2023/07/Heart-Valves.jpg"
embed_image(slide, AORTIC_IMG, 0.2, 1.15, 4.2, 2.8)

# Aortic Stenosis
add_rect(slide, 4.65, 1.15, 4.0, 0.4, RED_ACCENT)
add_text(slide, "Aortic Stenosis (AS)", 4.65, 1.15, 4.0, 0.4, 12, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 4.65, 1.55, 4.0, 3.0, RGBColor(0xFF, 0xEB, 0xEE))
add_multiline(slide, [
    ("Etiology: Calcific (degenerative, most common),", True, RED_ACCENT),
    ("  bicuspid AV, rheumatic", False, MID_TEXT),
    ("Classic Triad: Angina, Syncope, HF", True, RED_ACCENT),
    ("  Systolic murmur: harsh crescendo-decrescendo", False, MID_TEXT),
    ("  radiating to carotids; pulsus parvus et tardus", False, MID_TEXT),
    ("  Apex-carotid delay; soft S2, S4 gallop", False, MID_TEXT),
    ("DRUGS:", True, RED_ACCENT),
    ("  - No medical therapy reverses AS", False, MID_TEXT),
    ("  - ACE inhibitors (cautiously, for HF)", False, MID_TEXT),
    ("  - Beta-blockers (angina management)", False, MID_TEXT),
    ("  - Diuretics (HF symptoms)", False, MID_TEXT),
    ("  - Avoid: Vasodilators/nitrates (dangerous)", False, RED_ACCENT),
    ("Intervention: SAVR or TAVR when symptomatic", False, MID_TEXT),
    ("  or AVA <1.0 cm2 / mean gradient >40 mmHg", False, MID_TEXT),
], 4.70, 1.57, 3.9, 2.95, 10)

# Aortic Regurgitation
add_rect(slide, 4.65, 4.65, 4.0, 0.4, MED_BLUE)
add_text(slide, "Aortic Regurgitation (AR)", 4.65, 4.65, 4.0, 0.4, 12, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 4.65, 5.05, 4.0, 2.15, RGBColor(0xE3, 0xF2, 0xFD))
add_multiline(slide, [
    ("Etiology: Bicuspid AV, rheumatic, IE, Marfan,", True, MED_BLUE),
    ("  aortic root dilatation, syphilis", False, MID_TEXT),
    ("Signs: De Musset, Quincke, Duroziez, Traube,", False, MID_TEXT),
    ("  wide pulse pressure, blowing diastolic murmur", False, MID_TEXT),
    ("DRUGS:", True, MED_BLUE),
    ("  - Vasodilators: Nifedipine, ACE-I, ARBs", False, MID_TEXT),
    ("  - Diuretics: Furosemide (acute decompensation)", False, MID_TEXT),
    ("  - Acute severe AR: Nitroprusside + Dobutamine", False, MID_TEXT),
    ("  - Avoid: Beta-blockers (bradycardia worsens AR)", False, RED_ACCENT),
    ("Surgery when LVEF <50% or LVESD >50 mm", False, MID_TEXT),
], 4.70, 5.07, 3.9, 2.1, 10)

# Drug & Bicuspid Aortic Valve panel
add_rect(slide, 8.9, 1.15, 4.2, 0.4, DARK_BLUE)
add_text(slide, "Bicuspid AV & Drug Reference", 8.9, 1.15, 4.2, 0.4, 12, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 8.9, 1.55, 4.2, 5.65, RGBColor(0xF3, 0xF4, 0xFF))
add_multiline(slide, [
    ("BICUSPID AORTIC VALVE", True, DARK_BLUE),
    ("  Congenital (1-2% population)", False, MID_TEXT),
    ("  Risk: progressive AS, AR, aortic dissection", False, MID_TEXT),
    ("  Endocarditis prophylaxis recommended", False, MID_TEXT),
    ("  Beta-blockers for aortic root dilatation", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("DRUG SUMMARY — AORTIC VALVE", True, DARK_BLUE),
    ("Vasodilators (Chronic AR):", True, RGBColor(0x00, 0x60, 0x50)),
    ("  Nifedipine 30-60 mg/day", False, MID_TEXT),
    ("  Enalapril / Lisinopril / Losartan", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Acute Severe AR:", True, RED_ACCENT),
    ("  IV Nitroprusside + Dobutamine", False, MID_TEXT),
    ("  Emergency surgery usually required", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Aortic Stenosis - HF management:", True, RED_ACCENT),
    ("  Diuretics (Furosemide 20-80 mg)", False, MID_TEXT),
    ("  Digoxin (systolic HF with AF)", False, MID_TEXT),
    ("  ACE-I cautiously (no abrupt drops in BP)", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Infective Endocarditis Prophylaxis:", True, ACCENT_TEAL),
    ("  Amoxicillin 2g oral 30-60 min before procedure", False, MID_TEXT),
    ("  If penicillin allergy: Clindamycin 600 mg", False, MID_TEXT),
], 8.95, 1.58, 4.1, 5.58, 10)

# Aortic valve low image box
add_rect(slide, 0.2, 4.1, 4.2, 0.4, ACCENT_TEAL)
add_text(slide, "Aortic Valve — Key Clinical Signs", 0.2, 4.1, 4.2, 0.4, 11, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 0.2, 4.5, 4.2, 2.7, RGBColor(0xE0, 0xF2, 0xF1))
add_multiline(slide, [
    ("AORTIC STENOSIS signs:", True, ACCENT_TEAL),
    ("  Crescendo-decrescendo systolic ejection murmur", False, MID_TEXT),
    ("  Radiates to right carotid / neck", False, MID_TEXT),
    ("  Pulsus parvus et tardus (slow, weak pulse)", False, MID_TEXT),
    ("  Apex-carotid delay, reduced S2", False, MID_TEXT),
    ("  S4 gallop, LVH on echo/ECG", False, MID_TEXT),
    ("AORTIC REGURGITATION signs:", True, MED_BLUE),
    ("  Blowing early diastolic murmur (LLSB)", False, MID_TEXT),
    ("  Wide pulse pressure, water-hammer pulse", False, MID_TEXT),
    ("  Corrigan's, De Musset's, Quincke's signs", False, MID_TEXT),
], 0.25, 4.52, 4.1, 2.65, 10)
bottom_bar(slide)

# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 5: Tricuspid & Pulmonary Valves
# ═══════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_rect(slide, 0, 0, 13.333, 7.5, RGBColor(0xF5, 0xF7, 0xFF))
header_bar(slide, "Tricuspid & Pulmonary Valve — Disease & Drug Management",
           "Tricuspid Regurgitation | Tricuspid Stenosis | Pulmonary Stenosis | Pulmonary Regurgitation")

# Tricuspid Regurgitation
add_rect(slide, 0.2, 1.15, 3.15, 0.4, RED_ACCENT)
add_text(slide, "Tricuspid Regurgitation (TR)", 0.2, 1.15, 3.15, 0.4, 11, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 0.2, 1.55, 3.15, 2.6, RGBColor(0xFF, 0xEB, 0xEE))
add_multiline(slide, [
    ("Etiology: Functional (most common, RV overload),", True, RED_ACCENT),
    ("  IE (IV drug users), rheumatic, carcinoid", False, MID_TEXT),
    ("Signs: Pansystolic murmur at LLSB increasing with", False, MID_TEXT),
    ("  inspiration (Carvallo's sign), JVP elevation,", False, MID_TEXT),
    ("  pulsatile hepatomegaly, peripheral edema", False, MID_TEXT),
    ("DRUGS:", True, RED_ACCENT),
    ("  - Diuretics (edema/ascites relief)", False, MID_TEXT),
    ("  - Treat underlying cause (RV overload, PAH)", False, MID_TEXT),
    ("  - Bosentan/sildenafil (if PAH-related)", False, MID_TEXT),
    ("  - Antibiotics (IE - organism directed)", False, MID_TEXT),
    ("  - Surgical tricuspid repair (annuloplasty)", False, MID_TEXT),
], 0.25, 1.57, 3.05, 2.55, 10)

# Tricuspid Stenosis
add_rect(slide, 0.2, 4.25, 3.15, 0.4, MED_BLUE)
add_text(slide, "Tricuspid Stenosis (TS)", 0.2, 4.25, 3.15, 0.4, 11, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 0.2, 4.65, 3.15, 2.55, RGBColor(0xE3, 0xF2, 0xFD))
add_multiline(slide, [
    ("Etiology: Rheumatic (nearly always with MS),", True, MED_BLUE),
    ("  carcinoid syndrome (rare)", False, MID_TEXT),
    ("Signs: Presystolic murmur LLSB, JVP elevation", False, MID_TEXT),
    ("  (Giant 'a' wave), hepatomegaly, ascites", False, MID_TEXT),
    ("DRUGS:", True, MED_BLUE),
    ("  - Diuretics (Furosemide + Spironolactone)", False, MID_TEXT),
    ("  - Salt restriction", False, MID_TEXT),
    ("  - Warfarin (if AF present)", False, MID_TEXT),
    ("  - Balloon valvuloplasty / surgical repair", False, MID_TEXT),
], 0.25, 4.67, 3.05, 2.5, 10)

# Pulmonary Stenosis
add_rect(slide, 3.55, 1.15, 3.15, 0.4, ACCENT_TEAL)
add_text(slide, "Pulmonary Stenosis (PS)", 3.55, 1.15, 3.15, 0.4, 11, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 3.55, 1.55, 3.15, 2.6, RGBColor(0xE0, 0xF2, 0xF1))
add_multiline(slide, [
    ("Etiology: Congenital (most common), carcinoid,", True, ACCENT_TEAL),
    ("  rubella syndrome, Noonan syndrome", False, MID_TEXT),
    ("Signs: Systolic ejection murmur at 2nd LICS,", False, MID_TEXT),
    ("  ejection click (congenital), RVH, wide-split S2", False, MID_TEXT),
    ("  Cyanosis if severe (right-to-left shunt)", False, MID_TEXT),
    ("DRUGS:", True, ACCENT_TEAL),
    ("  - No specific medical therapy (mild-moderate)", False, MID_TEXT),
    ("  - Diuretics (RV failure / right HF)", False, MID_TEXT),
    ("  - Balloon pulmonary valvuloplasty (if gradient", False, MID_TEXT),
    ("    >40 mmHg or symptomatic)", False, MID_TEXT),
    ("  - Prostaglandin E1 (neonates with critical PS)", False, MID_TEXT),
], 3.60, 1.57, 3.05, 2.55, 10)

# Pulmonary Regurgitation
add_rect(slide, 3.55, 4.25, 3.15, 0.4, GOLD)
add_text(slide, "Pulmonary Regurgitation (PR)", 3.55, 4.25, 3.15, 0.4, 11, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 3.55, 4.65, 3.15, 2.55, RGBColor(0xFF, 0xF8, 0xE1))
add_multiline(slide, [
    ("Etiology: Idiopathic, post-valvuloplasty (ToF),", True, GOLD),
    ("  pulmonary hypertension, IE", False, MID_TEXT),
    ("Signs: Decrescendo diastolic murmur at LLSB", False, MID_TEXT),
    ("  (Graham Steell murmur if PAH-related)", False, MID_TEXT),
    ("  RV enlargement, dyspnea, fatigue", False, MID_TEXT),
    ("DRUGS:", True, GOLD),
    ("  - Treat underlying PAH if present", False, MID_TEXT),
    ("  - Diuretics (RV decompensation)", False, MID_TEXT),
    ("  - Pulmonary valve replacement (symptomatic)", False, MID_TEXT),
    ("  - PERCEVAL / TPVR for post-ToF repair", False, MID_TEXT),
], 3.60, 4.67, 3.05, 2.5, 10)

# Right panel: All valves drug reference
VALVES_DIAGRAM = "https://www.kenhub.com/thumbs/library/anatomy/heart-valves-small.jpeg"

add_rect(slide, 7.0, 1.15, 6.1, 0.4, DARK_BLUE)
add_text(slide, "Drug Quick Reference — Right Heart Valves", 7.0, 1.15, 6.1, 0.4, 12, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 7.0, 1.55, 6.1, 5.65, RGBColor(0xF3, 0xF4, 0xFF))

embed_image(slide, "https://microbenotes.com/wp-content/uploads/2023/07/Heart-Valves.jpg",
            9.5, 1.65, 3.5, 2.5)

add_multiline(slide, [
    ("DIURETICS (for congestion in all right-sided lesions)", True, DARK_BLUE),
    ("  Furosemide 20-80 mg IV/oral", False, MID_TEXT),
    ("  Spironolactone 25-100 mg (ascites/edema)", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("PAH TREATMENT (when TR/PR secondary to PAH)", True, DARK_BLUE),
    ("  Endothelin antagonists: Bosentan, Ambrisentan", False, MID_TEXT),
    ("  PDE5 inhibitors: Sildenafil, Tadalafil", False, MID_TEXT),
    ("  Prostacyclins: Epoprostenol (IV), Iloprost", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("ENDOCARDITIS PROPHYLAXIS", True, DARK_BLUE),
    ("  Amoxicillin 2g PO (30-60 min pre-procedure)", False, MID_TEXT),
    ("  Or Clindamycin 600 mg (if PCN allergy)", False, MID_TEXT),
    ("  Gentamicin (for high-risk procedures, prosthetic)", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("ANTICOAGULATION (if AF develops)", True, DARK_BLUE),
    ("  VKA (Warfarin) INR 2-3 for native valves + AF", False, MID_TEXT),
    ("  DOACs for non-valvular AF", False, MID_TEXT),
], 7.05, 4.2, 2.35, 2.9, 10)

bottom_bar(slide)

# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 6: Prosthetic Valves & Anticoagulation
# ═══════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_rect(slide, 0, 0, 13.333, 7.5, RGBColor(0xF5, 0xF7, 0xFF))
header_bar(slide, "Prosthetic Cardiac Valves — Types & Anticoagulation",
           "Mechanical Valves | Bioprosthetic Valves | INR Targets")

# Mechanical valves panel
add_rect(slide, 0.2, 1.15, 4.1, 0.4, DARK_BLUE)
add_text(slide, "Mechanical Prosthetic Valves", 0.2, 1.15, 4.1, 0.4, 12, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 0.2, 1.55, 4.1, 3.0, LIGHT_BG)
add_multiline(slide, [
    ("Types:", True, DARK_BLUE),
    ("  1. Bileaflet (St. Jude Medical) - most common", False, MID_TEXT),
    ("  2. Tilting disc (Medtronic-Hall)", False, MID_TEXT),
    ("  3. Ball-in-cage (Starr-Edwards, historical)", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Anticoagulation - MANDATORY (LIFELONG):", True, RED_ACCENT),
    ("  Aortic bileaflet/tilting disc (sinus rhythm):", False, MID_TEXT),
    ("    VKA target INR 2.5 (range 2.0-3.0)", False, MID_TEXT),
    ("  Mitral position (any mechanical):", False, MID_TEXT),
    ("    VKA target INR 3.0 (range 2.5-3.5)", False, MID_TEXT),
    ("  + AF, prior embolism, low EF, large LA:", False, MID_TEXT),
    ("    Add Aspirin 75-100 mg + VKA INR 2.5-3.5", False, MID_TEXT),
    ("  DOACs: CONTRAINDICATED for mechanical valves", False, RED_ACCENT),
], 0.25, 1.57, 4.0, 2.95, 10.5)

# Bioprosthetic valves panel
add_rect(slide, 4.55, 1.15, 4.15, 0.4, ACCENT_TEAL)
add_text(slide, "Bioprosthetic (Tissue) Valves", 4.55, 1.15, 4.15, 0.4, 12, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 4.55, 1.55, 4.15, 3.0, RGBColor(0xE0, 0xF2, 0xF1))
add_multiline(slide, [
    ("Types:", True, ACCENT_TEAL),
    ("  1. Porcine (pig tissue) - Carpentier-Edwards", False, MID_TEXT),
    ("  2. Bovine pericardial - longest lasting tissue", False, MID_TEXT),
    ("  3. Human homograft (pulmonary/aortic)", False, MID_TEXT),
    ("  4. TAVR valves (transcatheter)", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Anticoagulation:", True, ACCENT_TEAL),
    ("  First 3 months post-implant:", False, MID_TEXT),
    ("    VKA INR 2.5 (aortic) or INR 3.0 (mitral)", False, MID_TEXT),
    ("  After 3 months (if sinus rhythm):", False, MID_TEXT),
    ("    Aspirin 75-100 mg only", False, MID_TEXT),
    ("  If AF develops at any point:", False, MID_TEXT),
    ("    DOACs or VKA based on CHA2DS2-VASc", False, MID_TEXT),
    ("  If embolism despite aspirin:", False, MID_TEXT),
    ("    Switch to VKA", False, MID_TEXT),
], 4.60, 1.57, 4.05, 2.95, 10.5)

# INR Summary table
add_rect(slide, 9.0, 1.15, 4.1, 0.4, DARK_BLUE)
add_text(slide, "INR Targets & Drug Summary", 9.0, 1.15, 4.1, 0.4, 12, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 9.0, 1.55, 4.1, 3.0, RGBColor(0xF3, 0xF4, 0xFF))

inr_rows = [
    ("Aortic Mechanical (SR)", "2.5 (2-3)"),
    ("Mitral Mechanical (SR)", "3.0 (2.5-3.5)"),
    ("Any Mech. + AF/LV-Throm", "3.0 + Aspirin"),
    ("Bioprosthetic (0-3 mo)", "2.5-3.0"),
    ("Bioprosthetic (>3 mo, SR)", "Aspirin only"),
    ("Bioprosthetic + AF", "DOAC/VKA"),
    ("Rheumatic MS + AF", "INR 2-3"),
]
add_text(slide, "Valve Condition", 9.0, 1.55, 2.5, 0.32, 9, True, DARK_BLUE)
add_text(slide, "Target INR / Therapy", 11.5, 1.55, 1.55, 0.32, 9, True, DARK_BLUE)
for ri, (cond, tgt) in enumerate(inr_rows):
    y = 1.87 + ri * 0.34
    bg = LIGHT_BG if ri % 2 == 0 else WHITE
    add_rect(slide, 9.0, y, 4.1, 0.34, bg)
    add_text(slide, cond, 9.02, y, 2.45, 0.34, 8.5, False, MID_TEXT)
    add_text(slide, tgt,  11.5, y, 1.55, 0.34, 8.5, True, RED_ACCENT)

# Bottom expanded drug reference
add_rect(slide, 0.2, 4.65, 12.93, 0.4, MED_BLUE)
add_text(slide, "Antithrombotic Therapy for Valve Disease — Summary by Evidence (Harrison's 22E / Braunwald's HD)",
         0.2, 4.65, 12.93, 0.4, 11, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 0.2, 5.05, 12.93, 2.15, RGBColor(0xE3, 0xF2, 0xFD))

cols = [
    ("Anticoagulation STANDARD\n(Warfarin/VKA)", [
        "Non-valvular AF (CHA2DS2-VASc ≥2)",
        "LA/LV thrombus (any cause)",
        "Mechanical prosthetic valve (lifelong)",
        "Mitral stenosis + AF/embolism/LA >55mm",
    ], DARK_BLUE),
    ("DOACs PREFERRED\n(Apixaban/Rivaroxaban/Dabigatran)", [
        "Non-valvular AF (CHA2DS2-VASc ≥2)",
        "Bioprosthetic valve + AF (after 3 months)",
        "PFO-related cryptogenic stroke (some cases)",
        "NOT for mechanical valves (contraindicated)",
    ], ACCENT_TEAL),
    ("Antiplatelet ONLY\n(Aspirin 75-100 mg)", [
        "Bioprosthetic valve (after 3 months, SR)",
        "MVP with cryptogenic stroke/TIA",
        "Aortic arch atheroma",
        "PFO surgical closure adjunct therapy",
    ], MED_BLUE),
    ("ANTICOAGULATION CONTRAINDICATED", [
        "Active infective endocarditis",
        "Atrial myxoma (treat with surgery)",
        "Asymptomatic mitral annular calcification",
        "Asymptomatic aortic valve sclerosis",
    ], RED_ACCENT),
]

for ci, (header, items, color) in enumerate(cols):
    cx = 0.25 + ci * 3.23
    add_rect(slide, cx, 5.08, 3.1, 0.38, color)
    add_text(slide, header, cx, 5.08, 3.1, 0.38, 8.5, True, WHITE, PP_ALIGN.CENTER)
    for ii, item in enumerate(items):
        add_text(slide, f"  {item}", cx, 5.48 + ii * 0.38, 3.1, 0.38, 8.5, False, MID_TEXT)

bottom_bar(slide)

# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 7: Cardioembolic Stroke — Etiology
# ═══════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_rect(slide, 0, 0, 13.333, 7.5, RGBColor(0xFF, 0xF5, 0xF5))
add_rect(slide, 0, 0, 13.333, 1.05, RED_ACCENT)
add_text(slide, "CARDIOEMBOLIC STROKE — Etiology", 0.2, 0.05, 10, 0.65, 28, True, WHITE, PP_ALIGN.LEFT)
add_text(slide, "Responsible for ~20% of all ischemic strokes | Maximum deficit at onset | Higher risk of early recurrence",
         0.2, 0.65, 12.9, 0.35, 12, False, RGBColor(0xFF, 0xCC, 0xCC), PP_ALIGN.LEFT)

# Mechanism box
add_rect(slide, 0.2, 1.15, 5.5, 2.4, RGBColor(0xFF, 0xEB, 0xEE))
add_rect(slide, 0.2, 1.15, 5.5, 0.38, RED_ACCENT)
add_text(slide, "Pathophysiology", 0.2, 1.15, 5.5, 0.38, 12, True, WHITE, PP_ALIGN.CENTER)
add_multiline(slide, [
    ("Thrombus forms on:", True, RED_ACCENT),
    ("  Atrial/ventricular wall  |  Left heart valves", False, MID_TEXT),
    ("Embolism to arterial circulation:", True, RED_ACCENT),
    ("  Most common: MCA stem (3-4 mm occlusion)", False, MID_TEXT),
    ("  Also: ICA terminus, PCA, ACA branches", False, MID_TEXT),
    ("  Leads to large infarcts (deep + cortical)", False, MID_TEXT),
    ("Sudden maximum deficit at onset (hallmark)", True, RGBColor(0xC6, 0x28, 0x28)),
    ("Petechial hemorrhage on reperfusion (common)", False, MID_TEXT),
    ("Frank hemorrhagic transformation = worse outcome", False, RED_ACCENT),
], 0.25, 1.55, 5.4, 2.35, 10.5)

# Common Causes
add_rect(slide, 0.2, 3.65, 5.5, 0.38, RED_ACCENT)
add_text(slide, "Common Etiologic Causes", 0.2, 3.65, 5.5, 0.38, 12, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 0.2, 4.03, 5.5, 3.18, RGBColor(0xFF, 0xF0, 0xF0))
causes = [
    ("Atrial Fibrillation (AF)", "Most common cause (~50% of cardioembolic strokes)", RED_ACCENT),
    ("Myocardial Infarction", "Recent anterior MI with LV thrombus (transmural)", MED_BLUE),
    ("Prosthetic Heart Valves", "Mechanical valves - highest embolic risk", ACCENT_TEAL),
    ("Rheumatic Heart Disease", "Mitral stenosis + AF = very high risk", ORANGE),
    ("Dilated Cardiomyopathy", "Low EF, LV thrombus, wall motion abnormality", MED_BLUE),
    ("Infective Endocarditis", "Septic emboli (stroke + fever + new murmur)", RED_ACCENT),
    ("PFO / ASD", "Paradoxical embolism (venous -> arterial)", ACCENT_TEAL),
    ("Atrial Myxoma", "Tumour fragment embolism", ORANGE),
    ("Non-bacterial Thrombotic Endocarditis", "Marantic endocarditis (hypercoagulable states)", MED_BLUE),
]
for ri, (cause, detail, color) in enumerate(causes):
    y = 4.05 + ri * 0.35
    add_rect(slide, 0.22, y, 5.46, 0.35, WHITE if ri % 2 == 0 else RGBColor(0xFF, 0xF8, 0xF8))
    add_text(slide, cause,  0.25, y, 2.1, 0.35, 9, True,  color, PP_ALIGN.LEFT)
    add_text(slide, detail, 2.4,  y, 3.25, 0.35, 9, False, MID_TEXT, PP_ALIGN.LEFT)

# CHA2DS2-VASc panel
add_rect(slide, 6.0, 1.15, 3.35, 0.38, DARK_BLUE)
add_text(slide, "CHA\u2082DS\u2082-VASc Score", 6.0, 1.15, 3.35, 0.38, 12, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 6.0, 1.53, 3.35, 5.65, LIGHT_BG)
cha2 = [
    ("C", "Congestive Heart Failure", "1"),
    ("H", "Hypertension", "1"),
    ("A\u2082", "Age ≥ 75 years", "2"),
    ("D", "Diabetes Mellitus", "1"),
    ("S\u2082", "Stroke / TIA / TE history", "2"),
    ("V", "Vascular disease (MI, PAD, plaque)", "1"),
    ("A", "Age 65-74 years", "1"),
    ("Sc", "Sex category (Female)", "1"),
]
add_text(slide, "MAX SCORE = 9", 6.0, 1.53, 3.35, 0.3, 9, True, RED_ACCENT, PP_ALIGN.CENTER)
for ri, (letter, meaning, pts) in enumerate(cha2):
    y = 1.83 + ri * 0.42
    bg = WHITE if ri % 2 == 0 else LIGHT_BG
    add_rect(slide, 6.0, y, 3.35, 0.42, bg)
    add_rect(slide, 6.0, y, 0.4, 0.42, MED_BLUE)
    add_text(slide, letter,  6.01, y, 0.38, 0.42, 10, True,  WHITE,    PP_ALIGN.CENTER)
    add_text(slide, meaning, 6.42, y, 2.55, 0.42, 9,  False, MID_TEXT, PP_ALIGN.LEFT)
    add_text(slide, pts,     9.02, y, 0.3,  0.42, 10, True,  RED_ACCENT, PP_ALIGN.CENTER)

add_rect(slide, 6.0, 5.33, 3.35, 0.35, RED_ACCENT)
add_text(slide, "Score 0: No therapy | Score 1: Aspirin or OAC | Score ≥2: OAC",
         6.0, 5.33, 3.35, 0.35, 8, False, WHITE, PP_ALIGN.CENTER)
add_text(slide, "Source: Harrison's Internal Medicine 22E / Fuster's The Heart 15E",
         6.0, 5.7, 3.35, 0.3, 8, False, RGBColor(0x78, 0x90, 0xA8), PP_ALIGN.LEFT)

# Risk factors right panel
add_rect(slide, 9.55, 1.15, 3.6, 0.38, DARK_BLUE)
add_text(slide, "AF Risk Stratification", 9.55, 1.15, 3.6, 0.38, 12, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 9.55, 1.53, 3.6, 2.4, LIGHT_BG)
add_multiline(slide, [
    ("Annual stroke risk with AF:", True, DARK_BLUE),
    ("  No treatment: ~5% per year", False, MID_TEXT),
    ("  Aspirin: reduces risk ~22%", False, MID_TEXT),
    ("  Warfarin (INR 2-3): reduces ~64%", False, MID_TEXT),
    ("  DOACs: reduces ~70% (non-inferior/superior)", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Additional AF risk factors:", True, DARK_BLUE),
    ("  Left atrial enlargement (>55 mm)", False, MID_TEXT),
    ("  Left atrial appendage thrombus", False, MID_TEXT),
    ("  Spontaneous echo contrast", False, MID_TEXT),
], 9.6, 1.55, 3.5, 2.35, 10)

add_rect(slide, 9.55, 4.0, 3.6, 0.38, ACCENT_TEAL)
add_text(slide, "Embolic Infarct Patterns", 9.55, 4.0, 3.6, 0.38, 12, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 9.55, 4.38, 3.6, 2.8, RGBColor(0xE0, 0xF2, 0xF1))
add_multiline(slide, [
    ("MCA territory (most common):", True, ACCENT_TEAL),
    ("  Contralateral hemiplegia, hemisensory loss", False, MID_TEXT),
    ("  Aphasia (dominant hemisphere)", False, MID_TEXT),
    ("  Hemineglect (non-dominant)", False, MID_TEXT),
    ("ICA terminus:", True, ACCENT_TEAL),
    ("  Massive MCA + ACA territory infarct", False, MID_TEXT),
    ("PCA territory:", True, ACCENT_TEAL),
    ("  Contralateral homonymous hemianopia", False, MID_TEXT),
    ("  Visual agnosia, memory impairment", False, MID_TEXT),
    ("Cortical branch emboli:", True, ACCENT_TEAL),
    ("  Cortical deficits, may be transient (TIA)", False, MID_TEXT),
], 9.6, 4.40, 3.5, 2.75, 10)

bottom_bar(slide, "Cardioembolic Stroke — Etiology & Risk Factors")

# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 8: Cardioembolic Stroke — Symptoms, Signs & Relevant Findings
# ═══════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_rect(slide, 0, 0, 13.333, 7.5, RGBColor(0xF5, 0xF7, 0xFF))
add_rect(slide, 0, 0, 13.333, 1.05, RED_ACCENT)
add_text(slide, "CARDIOEMBOLIC STROKE — Symptoms, Signs & Relevant Findings",
         0.2, 0.05, 12, 0.65, 24, True, WHITE, PP_ALIGN.LEFT)
add_text(slide, "Sudden-onset neurological deficit | Cortical signs + cardiac findings | Imaging diagnosis",
         0.2, 0.65, 12.9, 0.35, 12, False, RGBColor(0xFF, 0xCC, 0xCC), PP_ALIGN.LEFT)

# Symptoms column
add_rect(slide, 0.2, 1.15, 3.0, 0.38, RED_ACCENT)
add_text(slide, "Symptoms (Patient Reports)", 0.2, 1.15, 3.0, 0.38, 11, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 0.2, 1.53, 3.0, 3.95, RGBColor(0xFF, 0xF0, 0xF0))
add_multiline(slide, [
    ("Sudden onset (hallmark — maximal at onset):", True, RED_ACCENT),
    ("", False, MID_TEXT),
    ("Motor symptoms:", True, RED_ACCENT),
    ("  Sudden hemiplegia / hemiparesis", False, MID_TEXT),
    ("  Facial droop (unilateral)", False, MID_TEXT),
    ("  Hand weakness / grip loss", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Sensory symptoms:", True, MED_BLUE),
    ("  Hemisensory loss (numbness, tingling)", False, MID_TEXT),
    ("  Face-arm-leg distribution", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Speech symptoms:", True, ACCENT_TEAL),
    ("  Aphasia (expressive/receptive/global)", False, MID_TEXT),
    ("  Dysarthria (slurred speech)", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Visual symptoms:", True, ORANGE),
    ("  Homonymous hemianopia", False, MID_TEXT),
    ("  Amaurosis fugax (transient monocular loss)", False, MID_TEXT),
    ("  Diplopia (posterior circulation)", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Other:", True, MID_TEXT),
    ("  Sudden headache (hemorrhagic transformation)", False, MID_TEXT),
    ("  Confusion, neglect, gaze deviation", False, MID_TEXT),
    ("  Vertigo, ataxia, nausea (posterior circ.)", False, MID_TEXT),
], 0.25, 1.55, 2.9, 3.9, 10)

# Signs column
add_rect(slide, 3.4, 1.15, 3.2, 0.38, MED_BLUE)
add_text(slide, "Clinical Signs (Examination)", 3.4, 1.15, 3.2, 0.38, 11, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 3.4, 1.53, 3.2, 3.95, RGBColor(0xE3, 0xF2, 0xFD))
add_multiline(slide, [
    ("Neurological Signs:", True, MED_BLUE),
    ("  Contralateral hemiplegia", False, MID_TEXT),
    ("  Contralateral hemisensory loss", False, MID_TEXT),
    ("  Forced gaze deviation toward lesion", False, MID_TEXT),
    ("  Hemineglect (non-dominant parietal)", False, MID_TEXT),
    ("  Aphasia (dominant hemisphere)", False, MID_TEXT),
    ("  UMN pattern: hyperreflexia, Babinski", False, MID_TEXT),
    ("  Cortical signs: astereognosis, agraphesthesia", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("NIHSS Score Assessment:", True, MED_BLUE),
    ("  Moderate-severe (NIHSS ≥8 suggests cardioembolic)", False, MID_TEXT),
    ("  Cortical involvement (often in cardioembolism)", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Cardiac Signs:", True, RED_ACCENT),
    ("  Irregular pulse (AF — irregular irregular)", False, MID_TEXT),
    ("  New cardiac murmur (IE, valvular disease)", False, MID_TEXT),
    ("  S3 gallop, elevated JVP (HF/LV dysfunction)", False, MID_TEXT),
    ("  Systolic murmur (MS, AS, MR, prosthetic)", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Other Signs:", True, ACCENT_TEAL),
    ("  Fever + embolic stroke = infective endocarditis", False, MID_TEXT),
    ("  Osler nodes, Janeway lesions, Roth spots", False, MID_TEXT),
    ("  Splinter hemorrhages (IE)", False, MID_TEXT),
    ("  Petechiae (IE / thrombocytopenia)", False, MID_TEXT),
], 3.45, 1.55, 3.1, 3.9, 10)

# Relevant Findings (Investigations)
add_rect(slide, 6.8, 1.15, 3.2, 0.38, ACCENT_TEAL)
add_text(slide, "Relevant Findings (Investigations)", 6.8, 1.15, 3.2, 0.38, 11, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 6.8, 1.53, 3.2, 3.95, RGBColor(0xE0, 0xF2, 0xF1))
add_multiline(slide, [
    ("Neuroimaging:", True, ACCENT_TEAL),
    ("  CT brain (non-contrast): rule out hemorrhage", False, MID_TEXT),
    ("  MRI DWI: restricted diffusion — infarct", False, MID_TEXT),
    ("    Cortical involvement typical of cardioembolism", False, MID_TEXT),
    ("  Multiple territory involvement = cardiac source", False, MID_TEXT),
    ("  Hemorrhagic transformation (on MRI/CT)", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Cardiac Investigations:", True, RED_ACCENT),
    ("  12-lead ECG: AF, LVH, recent MI (Q waves)", False, MID_TEXT),
    ("  Holter / 24-72h monitoring: paroxysmal AF", False, MID_TEXT),
    ("  Echocardiography (TTE/TEE):", False, MID_TEXT),
    ("    LV thrombus, EF, wall motion abnormality", False, MID_TEXT),
    ("    Valve morphology, vegetation, LAA thrombus", False, MID_TEXT),
    ("    Bubble contrast: PFO / intracardiac shunt", False, MID_TEXT),
    ("  Implantable cardiac monitor: cryptogenic stroke", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Labs:", True, MED_BLUE),
    ("  CBC, coagulation, metabolic panel, glucose", False, MID_TEXT),
    ("  Troponin (silent MI, demand ischemia)", False, MID_TEXT),
    ("  Blood cultures x3 (if IE suspected)", False, MID_TEXT),
    ("  Hypercoagulable screen (young patients)", False, MID_TEXT),
    ("  CRP/ESR (vasculitis, IE)", False, MID_TEXT),
    ("  HbA1c, lipids, renal function", False, MID_TEXT),
], 6.85, 1.55, 3.1, 3.9, 10)

# Differentiating cardioembolic vs other stroke
add_rect(slide, 10.2, 1.15, 2.95, 0.38, DARK_BLUE)
add_text(slide, "Distinguishing Features", 10.2, 1.15, 2.95, 0.38, 11, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 10.2, 1.53, 2.95, 3.95, LIGHT_BG)
add_multiline(slide, [
    ("Cardioembolic vs Lacunar:", True, DARK_BLUE),
    ("  Cortical signs present in cardioembolism", False, MID_TEXT),
    ("  Aphasia, neglect, hemianopia = cortical", False, MID_TEXT),
    ("  Pure motor/sensory = lacunar", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Cardioembolic vs Thrombotic:", True, DARK_BLUE),
    ("  No preceding TIA (sudden onset)", False, MID_TEXT),
    ("  Multiple territory = embolic", False, MID_TEXT),
    ("  Cardiac source identified on echo", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("MRI Features Favoring Cardioembolic:", True, DARK_BLUE),
    ("  Multiple simultaneous infarcts", False, MID_TEXT),
    ("  Bilateral or anterior + posterior", False, MID_TEXT),
    ("  Cortical/subcortical distribution", False, MID_TEXT),
    ("  Hemorrhagic transformation present", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("TOAST Classification:", True, MED_BLUE),
    ("  'Cardioembolism' when HIGH or MEDIUM", False, MID_TEXT),
    ("  risk cardiac source identified", False, MID_TEXT),
], 10.25, 1.55, 2.85, 3.9, 9.5)

# Bottom summary
add_rect(slide, 0.2, 5.55, 12.93, 0.38, DARK_BLUE)
add_text(slide, "Bedside Assessment: BE-FAST — Balance | Eyes | Face drooping | Arm weakness | Speech difficulty | Time to call", 
         0.2, 5.55, 12.93, 0.38, 11, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 0.2, 5.93, 12.93, 1.3, RGBColor(0xE3, 0xF2, 0xFD))
fast_items = [
    ("BALANCE\nSudden loss of coordination, dizziness, difficulty walking", MED_BLUE),
    ("EYES\nSudden vision loss, double vision, or hemianopia", ACCENT_TEAL),
    ("FACE\nAsk to smile — facial asymmetry/drooping", RED_ACCENT),
    ("ARM\nArm drift test — unilateral arm weakness", ORANGE),
    ("SPEECH\nSlurred, absent, or confused speech/language", MED_BLUE),
]
for ci, (item, color) in enumerate(fast_items):
    cx = 0.3 + ci * 2.55
    add_rect(slide, cx, 5.95, 2.45, 1.2, color)
    lines = item.split("\n")
    add_text(slide, lines[0], cx, 5.97, 2.45, 0.4, 11, True, WHITE, PP_ALIGN.CENTER)
    if len(lines) > 1:
        add_text(slide, lines[1], cx, 6.37, 2.45, 0.75, 8.5, False, WHITE, PP_ALIGN.CENTER)

bottom_bar(slide, "Cardioembolic Stroke — Symptoms, Signs & Investigations")

# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 9: Cardioembolic Stroke — Treatment
# ═══════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_rect(slide, 0, 0, 13.333, 7.5, RGBColor(0xF5, 0xF7, 0xFF))
add_rect(slide, 0, 0, 13.333, 1.05, RED_ACUTE := RGBColor(0x8B, 0x00, 0x00))
add_text(slide, "CARDIOEMBOLIC STROKE — Treatment", 0.2, 0.05, 12, 0.65, 28, True, WHITE, PP_ALIGN.LEFT)
add_text(slide, "Acute management | Thrombolysis | Thrombectomy | Secondary prevention | Anticoagulation timing",
         0.2, 0.65, 12.9, 0.35, 12, False, RGBColor(0xFF, 0xCC, 0xCC), PP_ALIGN.LEFT)

# Acute Phase
add_rect(slide, 0.2, 1.15, 4.0, 0.38, RED_ACUTE)
add_text(slide, "ACUTE TREATMENT (0-24 hours)", 0.2, 1.15, 4.0, 0.38, 11, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 0.2, 1.53, 4.0, 3.0, RGBColor(0xFF, 0xEB, 0xEE))
add_multiline(slide, [
    ("1. IV Thrombolysis (Alteplase / Tenecteplase):", True, RED_ACUTE),
    ("   Alteplase 0.9 mg/kg IV (max 90 mg)", False, MID_TEXT),
    ("   10% as bolus, 90% over 60 min", False, MID_TEXT),
    ("   Window: within 4.5 hours of onset", False, MID_TEXT),
    ("   Tenecteplase 0.25 mg/kg IV (single bolus)", False, MID_TEXT),
    ("   Preferred by some guidelines (AHA 2024)", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("2. Mechanical Thrombectomy (EVT):", True, RED_ACUTE),
    ("   Stent retriever / aspiration catheter", False, MID_TEXT),
    ("   For large vessel occlusion (LVO)", False, MID_TEXT),
    ("   Window: up to 24 hours (DAWN/DEFUSE-3)", False, MID_TEXT),
    ("   NIHSS ≥6, target vessel: ICA, MCA M1/M2", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("3. Supportive Care:", True, MED_BLUE),
    ("   BP management: <185/110 pre-tPA", False, MID_TEXT),
    ("   Anti-edema: Mannitol / Hypertonic saline", False, MID_TEXT),
    ("   Glycemic control: Glucose 140-180 mg/dL", False, MID_TEXT),
    ("   Temperature management: treat fever", False, MID_TEXT),
    ("   Aspirin 325 mg (if not thrombolysed)", False, MID_TEXT),
], 0.25, 1.55, 3.9, 2.95, 10)

# Anticoagulation Timing
add_rect(slide, 4.4, 1.15, 4.1, 0.38, MED_BLUE)
add_text(slide, "ANTICOAGULATION TIMING", 4.4, 1.15, 4.1, 0.38, 11, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 4.4, 1.53, 4.1, 3.0, RGBColor(0xE3, 0xF2, 0xFD))
add_multiline(slide, [
    ("When to START anticoagulation after stroke:", True, MED_BLUE),
    ("", False, MID_TEXT),
    ("Small infarct / TIA with AF:", True, MED_BLUE),
    ("  Start within 24-48 hours", False, MID_TEXT),
    ("  DOAC preferred (apixaban/rivaroxaban)", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Moderate infarct:", True, MED_BLUE),
    ("  Wait 3-5 days before anticoagulation", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Large/Severe infarct (NIHSS >15):", True, RED_ACUTE),
    ("  Wait 7-14 days (risk of hemorrhagic transformation)", False, MID_TEXT),
    ("  Repeat imaging before starting anticoagulation", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("'1-3-6-12 day rule' (ESO 2022):", True, ACCENT_TEAL),
    ("  TIA: Day 1 | Minor stroke: Day 3", False, MID_TEXT),
    ("  Moderate: Day 6 | Severe: Day 12-14", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("Mechanical valve + stroke:", True, RED_ACUTE),
    ("  Urgent re-anticoagulation after ruling out ICH", False, MID_TEXT),
    ("  Warfarin (DOACs are CONTRAINDICATED)", False, MID_TEXT),
], 4.45, 1.55, 4.0, 2.95, 10)

# Secondary Prevention
add_rect(slide, 8.7, 1.15, 4.4, 0.38, ACCENT_TEAL)
add_text(slide, "SECONDARY PREVENTION", 8.7, 1.15, 4.4, 0.38, 11, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 8.7, 1.53, 4.4, 3.0, RGBColor(0xE0, 0xF2, 0xF1))
add_multiline(slide, [
    ("A. Atrial Fibrillation:", True, ACCENT_TEAL),
    ("   DOACs (apixaban, rivaroxaban, dabigatran)", False, MID_TEXT),
    ("   Preferred over warfarin for non-valvular AF", False, MID_TEXT),
    ("   Apixaban 5mg BD / Rivaroxaban 20mg OD", False, MID_TEXT),
    ("   Warfarin (VKA) INR 2-3 (valvular AF)", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("B. Mechanical Heart Valve:", True, ACCENT_TEAL),
    ("   Warfarin (DOACs contraindicated)", False, MID_TEXT),
    ("   INR 2.5-3.5 (mitral) / 2.0-3.0 (aortic)", False, MID_TEXT),
    ("   + Aspirin 75-100 mg if high risk", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("C. LV Thrombus / Recent MI:", True, ACCENT_TEAL),
    ("   VKA (warfarin) INR 2-3 for 3-6 months", False, MID_TEXT),
    ("   Reassess with repeat echo", False, MID_TEXT),
    ("", False, MID_TEXT),
    ("D. PFO Closure:", True, ACCENT_TEAL),
    ("   Percutaneous closure (age <60, cryptogenic)", False, MID_TEXT),
    ("   Antiplatelets post-closure for 6 months", False, MID_TEXT),
    ("E. IE: Antibiotics (organism-directed)", False, MID_TEXT),
    ("   Anticoagulation CONTRAINDICATED in active IE", False, MID_TEXT),
], 8.75, 1.55, 4.3, 2.95, 10)

# Bottom treatment table
add_rect(slide, 0.2, 4.6, 12.93, 0.4, DARK_BLUE)
add_text(slide, "Drug Summary — Secondary Prevention of Cardioembolic Stroke by Etiology (Fuster's Heart 15E / Harrison's 22E)",
         0.2, 4.6, 12.93, 0.4, 11, True, WHITE, PP_ALIGN.CENTER)
add_rect(slide, 0.2, 5.0, 12.93, 2.2, RGBColor(0xF3, 0xF4, 0xFF))

sec_prev = [
    ("Atrial Fibrillation (non-valvular)", "Apixaban 5mg BD or Rivaroxaban 20mg OD or Dabigatran 150mg BD", "DOAC preferred", "Lifelong"),
    ("AF + Valvular (MS, mechanical)", "Warfarin INR 2-3 (native valve) / INR 2.5-3.5 (mechanical)", "VKA mandatory", "Lifelong"),
    ("LV Thrombus / Recent MI", "Warfarin INR 2-3 +/- Aspirin", "VKA 3-6 months", "Until thrombus resolves"),
    ("Mechanical Prosthetic Valve", "Warfarin INR 2.5 (Ao) / 3.0 (MV) + Aspirin 100mg", "VKA + Antiplatelet", "Lifelong"),
    ("Bioprosthetic Valve + AF", "DOAC or Warfarin per AF protocol", "DOAC preferred", "Lifelong"),
    ("Infective Endocarditis", "IV Antibiotics (organism-directed; no anticoagulation)", "Abx only", "4-6 weeks"),
    ("PFO Closure", "Aspirin 75-100mg after device closure", "Antiplatelet", "6-12 months post-closure"),
]

headers = ["Etiology", "Drug / Regimen", "Category", "Duration"]
for ci, hdr in enumerate(headers):
    cx = [0.25, 3.1, 9.7, 11.5][ci]
    cw = [2.8, 6.55, 1.75, 1.6][ci]
    add_rect(slide, cx, 5.02, cw, 0.3, MED_BLUE)
    add_text(slide, hdr, cx, 5.02, cw, 0.3, 9, True, WHITE, PP_ALIGN.CENTER)

for ri, row in enumerate(sec_prev):
    y = 5.32 + ri * 0.265
    bg = LIGHT_BG if ri % 2 == 0 else WHITE
    add_rect(slide, 0.22, y, 12.9, 0.265, bg)
    widths = [2.8, 6.55, 1.75, 1.6]
    starts = [0.25, 3.1, 9.7, 11.5]
    for ci, cell in enumerate(row):
        add_text(slide, cell, starts[ci], y, widths[ci], 0.265, 8, False, MID_TEXT)

bottom_bar(slide, "Cardioembolic Stroke — Treatment & Secondary Prevention")

# ═══════════════════════════════════════════════════════════════════════════
# SLIDE 10: Summary Slide
# ═══════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_rect(slide, 0, 0, 13.333, 7.5, DARK_BLUE)
add_rect(slide, 0, 1.8, 13.333, 3.8, MED_BLUE)
add_rect(slide, 0, 1.78, 13.333, 0.06, ACCENT_TEAL)
add_rect(slide, 0, 5.55, 13.333, 0.06, ACCENT_TEAL)

add_text(slide, "SUMMARY", 0.5, 0.2, 12.5, 0.8, 40, True, WHITE, PP_ALIGN.CENTER)
add_text(slide, "Key Takeaways — Cardiac Valves & Cardioembolic Stroke",
         0.5, 0.95, 12.5, 0.6, 16, False, RGBColor(0xBB, 0xDE, 0xFB), PP_ALIGN.CENTER)

summary_pts = [
    ("4 Valves", "Mitral (2 cusps), Tricuspid (3 cusps), Aortic (3 SL cusps), Pulmonary (3 SL cusps)"),
    ("Drugs: MS", "Beta-blockers/CCBs (rate), Warfarin (AF/embolism), Diuretics; PBMV if severe"),
    ("Drugs: MR", "Vasodilators (acute), ACE-I/ARBs + BB (chronic HFrEF), OAC if AF"),
    ("Drugs: AS", "No drug reverses AS; SAVR/TAVR when symptomatic; avoid vasodilators"),
    ("Drugs: AR", "Nifedipine/ACE-I (chronic), Nitroprusside+Dobutamine (acute); AVR when EF<50%"),
    ("Mechanical Valves", "Warfarin MANDATORY (DOACs contraindicated); INR 2.5-3.5 depending on position"),
    ("CES Etiology", "AF (#1), MI, prosthetic valves, rheumatic MS, dilated CMP, IE, PFO"),
    ("CES Treatment", "Alteplase <4.5h / Tenecteplase; Thrombectomy LVO <24h; AC timing by infarct size"),
    ("CES Prevention", "DOACs (non-valvular AF); Warfarin (mechanical/valvular AF); PFO closure"),
]

for i, (label, desc) in enumerate(summary_pts):
    row = i // 3
    col = i % 3
    cx = 0.3 + col * 4.38
    cy = 1.85 + row * 1.2
    add_rect(slide, cx, cy, 4.2, 0.35, ACCENT_TEAL)
    add_text(slide, label, cx, cy, 4.2, 0.35, 10, True, WHITE, PP_ALIGN.CENTER)
    add_rect(slide, cx, cy + 0.35, 4.2, 0.8, WHITE)
    add_text(slide, desc, cx + 0.05, cy + 0.37, 4.1, 0.76, 9, False, MID_TEXT,
             PP_ALIGN.LEFT, wrap=True)

add_text(slide, "References: Harrison's Principles of Internal Medicine 22E (2025) | Braunwald's Heart Disease 2025 | Fuster & Hurst's The Heart 15E",
         0.5, 5.7, 12.5, 0.5, 9, False, RGBColor(0x78, 0xA8, 0xD8), PP_ALIGN.CENTER)
add_text(slide, "Prepared using Orris AI — Evidence-Based Clinical Education",
         0.5, 6.2, 12.5, 0.5, 10, False, RGBColor(0xBB, 0xDE, 0xFB), PP_ALIGN.CENTER)

# ═══════════════════════════════════════════════════════════════════════════
# SAVE
# ═══════════════════════════════════════════════════════════════════════════
output_path = "/tmp/workspace/cardiac-valves-ppt/Cardiac_Valves_and_Cardioembolic_Stroke.pptx"
prs.save(output_path)
print(f"Saved: {output_path}")
print(f"Total slides: {len(prs.slides)}")
Running Command

cd /tmp/workspace/cardiac-valves-ppt && python build_ppt.py 2>&1

Running Command

find /tmp/skills -name "fetch_images.py" 2>/dev/null; ls /tmp/skills/ 2>/dev/null

Finding Files

**/*.py in /tmp/skills

Running Command

python /tmp/skills/shared/scripts/fetch_images.py "https://microbenotes.com/wp-content/uploads/2023/07/Heart-Valves.jpg" 2>&1 | head -c 200

Running Command

python /tmp/workspace/cardiac-valves-ppt/build_ppt.py 2>&1

Running Command

ls -lh /tmp/workspace/cardiac-valves-ppt/ && python -c " from pptx import Presentation prs = Presentation('/tmp/workspace/cardiac-valves-ppt/Cardiac_Valves_and_Cardioembolic_Stroke.pptx') print(f'Slides: {len(prs.slides)}') for i, slide in enumerate(prs.slides, 1): texts = [s.text_frame.text.split(chr(10))[0][:60] for s in slide.shapes if s.has_text_frame and s.text_frame.text.strip()] print(f' Slide {i}: {texts[0] if texts else \"(empty)\"}') "

Your presentation is ready to download:

Cardiac Valves and Cardioembolic Stroke

Presentation · PPTX


What's inside — 10 slides, full clinical detail

SlideContent
1Title slide — professional dark-blue theme
2Overview: All 4 valves — structure, cusps, location, blood flow diagram
3Mitral Valve — MS, MR, MVP: etiology, clinical features, drug management
4Aortic Valve — AS, AR, bicuspid AV: signs, drugs (nifedipine, ACE-I, TAVR/SAVR)
5Tricuspid & Pulmonary Valves — TR, TS, PS, PR: etiology, signs, drugs
6Prosthetic Valves — mechanical vs bioprosthetic + complete INR target table + 4-column antithrombotic drug reference
7Cardioembolic Stroke — Etiology: pathophysiology, 9 causes, CHA₂DS₂-VASc scoring table, AF risk, embolic infarct patterns
8Symptoms, Signs & Relevant Findings: BE-FAST, neurological/cardiac signs, MRI/echo/ECG/labs, TOAST classification
9Treatment: Alteplase/Tenecteplase thrombolysis, mechanical thrombectomy, anticoagulation timing rules (1-3-6-12 day rule), secondary prevention table by etiology
10Summary slide with 9 key takeaways + references

Key drug content covered

  • Mitral valve: Beta-blockers, CCBs, warfarin (INR 2-3), DOACs, ACE-I/ARBs, furosemide, aspirin, nitroprusside/dobutamine (acute MR)
  • Aortic valve: Nifedipine, enalapril/losartan, nitroprusside+dobutamine (acute severe AR); avoid vasodilators in AS
  • Right heart valves: Furosemide, spironolactone, bosentan/sildenafil (PAH), prostaglandin E1 (neonatal PS)
  • Prosthetic: Warfarin INR 2.5 (aortic mech.) / 3.0 (mitral mech.); DOACs contraindicated for mechanical valves; aspirin for bioprosthetic after 3 months
  • Cardioembolic stroke: Alteplase 0.9 mg/kg, tenecteplase, apixaban/rivaroxaban/dabigatran (non-valvular AF), warfarin (valvular/mechanical), 1-3-6-12 day anticoagulation timing rule, amoxicillin/clindamycin for IE prophylaxis
Sources: Harrison's Internal Medicine 22E (2025), Braunwald's Heart Disease (2025), Fuster & Hurst's The Heart 15E
This is a shared conversation. Sign in to Orris to start your own chat.