Refractive surgeries for myopia,hypermetropia at level of ophthalmology residents including all the theory parts in detailed version make ppt presentation

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

mkdir -p /tmp/workspace/refractive-surgery-ppt && ls /tmp/workspace/refractive-surgery-ppt/

Writing File

~/refractive-surgery-ppt/build_ppt.py

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.oxml.ns import qn
from lxml import etree
from io import BytesIO

# ── Colour Palette ──────────────────────────────────────────────────────────
NAVY       = RGBColor(0x0D, 0x2B, 0x55)   # deep navy  – titles
TEAL       = RGBColor(0x00, 0x7E, 0x8A)   # teal       – section bars
LIGHT_BLUE = RGBColor(0xD9, 0xEF, 0xF6)   # pale blue  – background panel
WHITE      = RGBColor(0xFF, 0xFF, 0xFF)
ORANGE     = RGBColor(0xE8, 0x76, 0x22)   # accent
DARK_GREY  = RGBColor(0x22, 0x22, 0x22)
MID_GREY   = RGBColor(0x55, 0x55, 0x55)
PALE_BG    = RGBColor(0xF4, 0xF8, 0xFB)   # slide background

# ── Helpers ──────────────────────────────────────────────────────────────────

def set_slide_bg(slide, color):
    """Fill slide background with a solid colour."""
    background = slide.background
    fill = background.fill
    fill.solid()
    fill.fore_color.rgb = color

def add_rect(slide, x, y, w, h, color, alpha=None):
    shape = slide.shapes.add_shape(1, Inches(x), Inches(y), Inches(w), Inches(h))
    shape.fill.solid()
    shape.fill.fore_color.rgb = color
    shape.line.fill.background()
    return shape

def add_textbox(slide, x, y, w, h, text, font_size=18, bold=False,
                color=DARK_GREY, align=PP_ALIGN.LEFT, italic=False,
                word_wrap=True, v_anchor=MSO_ANCHOR.TOP):
    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(2)
    tf.margin_right = Pt(2)
    tf.margin_top = Pt(2)
    tf.margin_bottom = Pt(2)
    p = tf.paragraphs[0]
    p.alignment = align
    r = p.add_run()
    r.text = text
    r.font.name = "Calibri"
    r.font.size = Pt(font_size)
    r.font.bold = bold
    r.font.color.rgb = color
    r.font.italic = italic
    return tb

def add_bullet_textbox(slide, x, y, w, h, items, font_size=15, title=None,
                       title_size=17, bullet_color=TEAL, text_color=DARK_GREY):
    tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
    tf = tb.text_frame
    tf.word_wrap = True
    tf.margin_left = Pt(4)
    tf.margin_right = Pt(4)
    tf.margin_top = Pt(2)
    tf.margin_bottom = Pt(2)

    first = True
    if title:
        p = tf.paragraphs[0]
        p.alignment = PP_ALIGN.LEFT
        r = p.add_run()
        r.text = title
        r.font.name = "Calibri"
        r.font.size = Pt(title_size)
        r.font.bold = True
        r.font.color.rgb = NAVY
        first = False

    for item in items:
        p = tf.add_paragraph() if not first else tf.paragraphs[0]
        first = False
        p.alignment = PP_ALIGN.LEFT
        p.level = item.get("level", 0)
        # bullet dot
        dot_run = p.add_run()
        if item.get("level", 0) == 0:
            dot_run.text = "■  "
            dot_run.font.color.rgb = bullet_color
        else:
            dot_run.text = "     ◆  "
            dot_run.font.color.rgb = ORANGE
        dot_run.font.size = Pt(font_size - 1)
        dot_run.font.name = "Calibri"
        text_run = p.add_run()
        text_run.text = item["text"]
        text_run.font.name = "Calibri"
        text_run.font.size = Pt(font_size)
        text_run.font.color.rgb = text_color
        text_run.font.bold = item.get("bold", False)
    return tb

def add_header_bar(slide, title, subtitle=None):
    """Navy top bar with title and optional subtitle."""
    add_rect(slide, 0, 0, 13.333, 1.15, NAVY)
    add_textbox(slide, 0.3, 0.08, 12.5, 0.75, title,
                font_size=28, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE)
    if subtitle:
        add_rect(slide, 0, 1.15, 13.333, 0.32, TEAL)
        add_textbox(slide, 0.3, 1.15, 12.5, 0.32, subtitle,
                    font_size=14, bold=False, color=WHITE, italic=True,
                    v_anchor=MSO_ANCHOR.MIDDLE)

def add_section_label(slide, text, x, y, w=3.5, h=0.4):
    add_rect(slide, x, y, w, h, TEAL)
    add_textbox(slide, x+0.05, y, w-0.1, h, text,
                font_size=13, bold=True, color=WHITE,
                v_anchor=MSO_ANCHOR.MIDDLE)

def add_table_slide(prs, title, subtitle, headers, rows, col_widths):
    blank = prs.slide_layouts[6]
    slide = prs.slides.add_slide(blank)
    set_slide_bg(slide, PALE_BG)
    add_header_bar(slide, title, subtitle)

    tbl_top = Inches(1.55)
    tbl_left = Inches(0.3)
    total_w = sum(Inches(c) for c in col_widths)
    tbl_height = Inches(0.4 * (len(rows) + 1))

    table = slide.shapes.add_table(len(rows)+1, len(headers),
                                   tbl_left, tbl_top,
                                   total_w, tbl_height).table
    # col widths
    for ci, cw in enumerate(col_widths):
        table.columns[ci].width = Inches(cw)

    # header row
    for ci, h in enumerate(headers):
        cell = table.cell(0, ci)
        cell.fill.solid()
        cell.fill.fore_color.rgb = NAVY
        p = cell.text_frame.paragraphs[0]
        p.alignment = PP_ALIGN.CENTER
        r = p.add_run()
        r.text = h
        r.font.name = "Calibri"
        r.font.size = Pt(13)
        r.font.bold = True
        r.font.color.rgb = WHITE

    # data rows
    for ri, row in enumerate(rows):
        bg = LIGHT_BLUE if ri % 2 == 0 else WHITE
        for ci, val in enumerate(row):
            cell = table.cell(ri+1, ci)
            cell.fill.solid()
            cell.fill.fore_color.rgb = bg
            p = cell.text_frame.paragraphs[0]
            p.alignment = PP_ALIGN.CENTER
            r = p.add_run()
            r.text = str(val)
            r.font.name = "Calibri"
            r.font.size = Pt(12)
            r.font.color.rgb = DARK_GREY
    return slide


# ═══════════════════════════════════════════════════════════════════════════
# BUILD PRESENTATION
# ═══════════════════════════════════════════════════════════════════════════

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


# ─────────────────────────────────────────────────────────────────
# SLIDE 1 – TITLE SLIDE
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, NAVY)
add_rect(slide, 0, 3.2, 13.333, 0.06, ORANGE)   # divider line

add_textbox(slide, 1, 0.7, 11.333, 1.2,
            "Refractive Surgery",
            font_size=46, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_textbox(slide, 1, 1.9, 11.333, 0.8,
            "Myopia  •  Hypermetropia  •  Astigmatism",
            font_size=28, bold=False, color=LIGHT_BLUE, align=PP_ALIGN.CENTER)
add_rect(slide, 3.5, 3.4, 6.333, 0.6, TEAL)
add_textbox(slide, 3.5, 3.35, 6.333, 0.7,
            "For Ophthalmology Residents",
            font_size=20, bold=True, color=WHITE, align=PP_ALIGN.CENTER,
            v_anchor=MSO_ANCHOR.MIDDLE)
add_textbox(slide, 1, 4.3, 11.333, 0.5,
            "Based on: Kanski's Clinical Ophthalmology 10th Edition & Wills Eye Manual",
            font_size=14, italic=True, color=LIGHT_BLUE, align=PP_ALIGN.CENTER)
add_textbox(slide, 1, 5.0, 11.333, 0.4,
            "Department of Ophthalmology  |  Residency Teaching Series",
            font_size=13, color=RGBColor(0xAA, 0xCC, 0xDD), align=PP_ALIGN.CENTER)


# ─────────────────────────────────────────────────────────────────
# SLIDE 2 – TABLE OF CONTENTS
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "Contents", "What We Will Cover Today")

topics = [
    "1.  Overview & Introduction to Refractive Surgery",
    "2.  Optics Recap – Myopia, Hypermetropia, Astigmatism",
    "3.  Patient Selection & Contraindications",
    "4.  Preoperative Assessment",
    "5.  Corneal Laser Procedures – PRK / LASEK / TransPRK",
    "6.  LASIK – Laser-Assisted In Situ Keratomileusis",
    "7.  SMILE – Small Incision Lenticule Extraction",
    "8.  Intraocular Procedures – Phakic IOL / CLE",
    "9.  Correction of Hypermetropia (Special Considerations)",
    "10. Complications & Management",
    "11. Comparison Table & Procedure Selection",
    "12. Post-Operative Care & Follow-Up",
]
for i, t in enumerate(topics):
    col = 0 if i < 6 else 6.8
    row = 1.6 + (i % 6) * 0.83
    add_rect(slide, col + 0.3, row, 6.0, 0.65, WHITE)
    add_textbox(slide, col + 0.35, row + 0.04, 5.8, 0.57, t,
                font_size=14, color=NAVY, v_anchor=MSO_ANCHOR.MIDDLE)


# ─────────────────────────────────────────────────────────────────
# SLIDE 3 – OVERVIEW / INTRODUCTION
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "Introduction to Refractive Surgery", "Changing the Optics of the Eye")

bullets = [
    {"text": "Encompasses a range of procedures aimed at changing the refraction of the eye by altering the cornea or lens – the principal refracting components", "level": 0},
    {"text": "Myopia, hypermetropia (hyperopia) and astigmatism can all be addressed", "level": 0},
    {"text": "Correction of presbyopia remains inconsistently satisfactory", "level": 1},
    {"text": "Targets: stable refractive error patients desiring improvement in visual acuity or function after surgical correction", "level": 0},
    {"text": "NOT for everyone – thorough preoperative assessment is MANDATORY", "level": 0},
    {"text": "Two broad categories of refractive surgery:", "level": 0},
    {"text": "Corneal procedures – alter corneal curvature (PRK, LASIK, SMILE, RK, CK)", "level": 1},
    {"text": "Intraocular procedures – alter lens power (Phakic IOL, Clear Lens Exchange)", "level": 1},
    {"text": "Patient satisfaction depends critically on patient expectations and surgical outcome", "level": 0},
]
add_bullet_textbox(slide, 0.4, 1.55, 12.5, 5.7, bullets, font_size=15)


# ─────────────────────────────────────────────────────────────────
# SLIDE 4 – OPTICS RECAP
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "Optics Recap – Refractive Errors", "Understanding What We Are Correcting")

# Myopia box
add_rect(slide, 0.3, 1.55, 4.0, 5.7, WHITE)
add_section_label(slide, "MYOPIA (Short-sight)", 0.3, 1.55, w=4.0)
myopia = [
    {"text": "Parallel rays focus ANTERIOR to retina", "level": 0},
    {"text": "Eye too long (axial) or cornea too curved", "level": 0},
    {"text": "Corrected with CONCAVE (minus) lens", "level": 0},
    {"text": "Prevalence – global epidemic; ~30% worldwide", "level": 0},
    {"text": "Classification by magnitude:", "level": 0},
    {"text": "Low: < 3 D", "level": 1},
    {"text": "Moderate: 3–6 D", "level": 1},
    {"text": "High: > 6 D", "level": 1},
    {"text": "Surgical goal: flatten the central cornea", "level": 0},
]
add_bullet_textbox(slide, 0.3, 2.0, 4.0, 5.2, myopia, font_size=13)

# Hypermetropia box
add_rect(slide, 4.65, 1.55, 4.0, 5.7, WHITE)
add_section_label(slide, "HYPERMETROPIA (Long-sight)", 4.65, 1.55, w=4.0)
hyper = [
    {"text": "Parallel rays focus POSTERIOR to retina", "level": 0},
    {"text": "Eye too short or cornea too flat", "level": 0},
    {"text": "Corrected with CONVEX (plus) lens", "level": 0},
    {"text": "Young patients compensate by accommodation", "level": 0},
    {"text": "Classification:", "level": 0},
    {"text": "Low: < 2 D", "level": 1},
    {"text": "Moderate: 2–5 D", "level": 1},
    {"text": "High: > 5 D", "level": 1},
    {"text": "Surgical goal: steepen the central cornea", "level": 0},
]
add_bullet_textbox(slide, 4.65, 2.0, 4.0, 5.2, hyper, font_size=13)

# Astigmatism box
add_rect(slide, 9.0, 1.55, 4.0, 5.7, WHITE)
add_section_label(slide, "ASTIGMATISM", 9.0, 1.55, w=4.0)
astig = [
    {"text": "Non-spherical (toric) cornea – different powers in different meridia", "level": 0},
    {"text": "Two types:", "level": 0},
    {"text": "Regular – correctable with cylinder", "level": 1},
    {"text": "Irregular – NOT correctable with cylinder", "level": 1},
    {"text": "Usually coexists with myopia or hypermetropia", "level": 0},
    {"text": "Surgical correction: toric ablation or arcuate incisions", "level": 0},
    {"text": "Wavefront-guided ablation improves HOA correction", "level": 0},
]
add_bullet_textbox(slide, 9.0, 2.0, 4.0, 5.2, astig, font_size=13)


# ─────────────────────────────────────────────────────────────────
# SLIDE 5 – PATIENT SELECTION
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "Patient Selection", "Who Is a Suitable Candidate?")

add_rect(slide, 0.3, 1.55, 6.0, 5.7, WHITE)
add_section_label(slide, "INCLUSION CRITERIA", 0.3, 1.55, w=6.0)
inc = [
    {"text": "Stable refraction for ≥ 1–2 years (change < 0.5 D/year)", "level": 0},
    {"text": "Age ≥ 18–21 years (cornea still changing before this)", "level": 0},
    {"text": "Adequate corneal thickness – ideally > 500 µm (LASIK requires residual stromal bed ≥ 250 µm)", "level": 0},
    {"text": "Motivation and realistic expectations", "level": 0},
    {"text": "Spectacle/contact-lens intolerance or occupational need", "level": 0},
    {"text": "No active ocular surface disease", "level": 0},
    {"text": "Pupil size considerations (especially for night vision)", "level": 0},
]
add_bullet_textbox(slide, 0.3, 2.0, 6.0, 5.2, inc, font_size=14)

add_rect(slide, 6.7, 1.55, 6.3, 5.7, RGBColor(0xFF, 0xEE, 0xEE))
add_section_label(slide, "CONTRAINDICATIONS", 6.7, 1.55, w=6.3,
                  h=0.4)
# override color of this label
contra = [
    {"text": "ABSOLUTE:", "bold": True, "level": 0},
    {"text": "Keratoconus / ectatic corneal disease", "level": 1},
    {"text": "Active ocular infection or inflammation", "level": 1},
    {"text": "Uncontrolled glaucoma", "level": 1},
    {"text": "Severe dry eye syndrome", "level": 1},
    {"text": "Progressive myopia / unstable refraction", "level": 1},
    {"text": "RELATIVE:", "bold": True, "level": 0},
    {"text": "SLE, rheumatoid arthritis, immunocompromise", "level": 1},
    {"text": "Previous herpes simplex keratitis", "level": 1},
    {"text": "Macular degeneration", "level": 1},
    {"text": "Chronic blepharitis", "level": 1},
    {"text": "Unrealistic expectations", "level": 1},
]
add_bullet_textbox(slide, 6.7, 2.0, 6.3, 5.2, contra, font_size=13,
                   bullet_color=ORANGE, text_color=DARK_GREY)


# ─────────────────────────────────────────────────────────────────
# SLIDE 6 – PREOPERATIVE ASSESSMENT
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "Preoperative Assessment", "Mandatory Workup Before Any Refractive Surgery")

left = [
    {"text": "Full refraction (manifest + cycloplegic)", "level": 0},
    {"text": "Corneal topography / tomography (Pentacam / Orbscan)", "level": 0},
    {"text": "Corneal thickness (pachymetry) – central and peripheral", "level": 0},
    {"text": "Pupil diameter – mesopic conditions", "level": 0},
    {"text": "Anterior segment OCT – anterior chamber depth, angle", "level": 0},
    {"text": "Tear film assessment – BUT, Schirmer test, OSDI score", "level": 0},
    {"text": "IOP measurement (non-contact tonometry before dilation)", "level": 0},
    {"text": "Dilated fundus exam – vitreoretinal status esp. in high myopia", "level": 0},
]
right = [
    {"text": "Keratometry / simulated K values", "level": 0},
    {"text": "Wavefront aberrometry (higher-order aberrations)", "level": 0},
    {"text": "Specular microscopy (if phakic IOL planned)", "level": 0},
    {"text": "Slit lamp – cornea, lens, anterior chamber depth", "level": 0},
    {"text": "Medical / systemic history", "level": 0},
    {"text": "Discontinue contact lenses:", "level": 0},
    {"text": "Soft lenses – 2 weeks before topography", "level": 1},
    {"text": "Hard/RGP lenses – 3–4 weeks before", "level": 1},
    {"text": "INFORMED CONSENT – risks, alternatives, realistic outcome", "bold": True, "level": 0},
]
add_bullet_textbox(slide, 0.3, 1.55, 6.3, 5.7, left, font_size=14)
add_bullet_textbox(slide, 6.9, 1.55, 6.1, 5.7, right, font_size=14)


# ─────────────────────────────────────────────────────────────────
# SLIDE 7 – SURFACE ABLATION (PRK / LASEK / TransPRK)
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "Surface Ablation Procedures", "PRK · LASEK · Epi-LASIK · TransPRK")

# Mechanism
add_section_label(slide, "MECHANISM", 0.3, 1.55, w=3.5)
mech = [
    {"text": "Excimer laser (193 nm ArF) photoablates corneal stroma after epithelium removal", "level": 0},
    {"text": "Each pulse removes 0.25 µm of tissue; total ablation depth depends on refractive error", "level": 0},
    {"text": "Cornea flattened centrally → reduces plus power → corrects myopia", "level": 0},
    {"text": "Peripheral ablation → steepen cornea → corrects hypermetropia", "level": 0},
]
add_bullet_textbox(slide, 0.3, 2.0, 6.3, 2.6, mech, font_size=13)

# Techniques
add_section_label(slide, "TECHNIQUES", 0.3, 4.7, w=3.5)
tech = [
    {"text": "PRK – mechanical / alcohol epithelium removal then direct ablation", "level": 0},
    {"text": "LASEK – epithelial flap preserved with 20% alcohol; replaced after ablation", "level": 0},
    {"text": "Epi-LASIK – epithelial flap created with epikeratome", "level": 0},
    {"text": "TransPRK (TPRK) – no-touch; laser removes epithelium + ablates stroma simultaneously", "level": 0},
]
add_bullet_textbox(slide, 0.3, 5.15, 6.3, 2.1, tech, font_size=13)

# PRK Specifics
add_rect(slide, 6.9, 1.55, 6.1, 5.7, WHITE)
add_section_label(slide, "PRK – CLINICAL DETAILS", 6.9, 1.55, w=6.1)
prk = [
    {"text": "Indications – myopia up to 6 D; astigmatism up to ~3 D; low-moderate hypermetropia", "level": 0},
    {"text": "Preferred when cornea is thin (inadequate for LASIK flap) or occupation at risk of flap trauma", "level": 0},
    {"text": "Procedure:", "level": 0},
    {"text": "Topical anaesthesia, epithelium removed over 8–9 mm zone", "level": 1},
    {"text": "Excimer laser applied to Bowman + stroma", "level": 1},
    {"text": "Mitomycin C 0.02% for 20–40 sec (if > 50 µm ablation) to prevent haze", "level": 1},
    {"text": "BCL inserted; topical antibiotics + NSAIDs + steroids", "level": 1},
    {"text": "Advantages vs LASIK – no flap complications, lower ectasia risk, suitable for thinner corneas", "level": 0},
    {"text": "Disadvantages – slower recovery (3–7 days pain; vision stabilises 1–3 months), subepithelial haze, regression", "level": 0},
    {"text": "Post-op haze grading: 0–4 scale; mitomycin C prophylaxis reduces incidence", "level": 0},
]
add_bullet_textbox(slide, 6.9, 2.0, 6.1, 5.2, prk, font_size=12.5)


# ─────────────────────────────────────────────────────────────────
# SLIDE 8 – LASIK PROCEDURE
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "LASIK – Laser-Assisted In Situ Keratomileusis", "Gold Standard Corneal Refractive Procedure")

add_rect(slide, 0.3, 1.55, 12.7, 5.7, WHITE)

# Steps column
add_section_label(slide, "SURGICAL STEPS", 0.3, 1.55, w=5.5)
steps = [
    {"text": "STEP 1 – Create corneal flap:", "bold": True, "level": 0},
    {"text": "Microkeratome (mechanical) OR femtosecond laser (IntraLASIK) – preferred", "level": 1},
    {"text": "Flap thickness: 100–160 µm; hinge superiorly or nasally", "level": 1},
    {"text": "STEP 2 – Lift flap; expose stroma", "bold": True, "level": 0},
    {"text": "STEP 3 – Excimer laser ablation of stromal bed:", "bold": True, "level": 0},
    {"text": "Central ablation → myopia correction (flatten)", "level": 1},
    {"text": "Peripheral/mid-peripheral ablation → hyperopia correction (steepen)", "level": 1},
    {"text": "Toric ablation for astigmatism", "level": 1},
    {"text": "Wavefront-guided / topography-guided ablation available", "level": 1},
    {"text": "STEP 4 – Reposition and smooth flap; self-seals within minutes", "bold": True, "level": 0},
    {"text": "No sutures required; flap adheres via epithelium", "level": 1},
]
add_bullet_textbox(slide, 0.3, 2.0, 6.0, 5.2, steps, font_size=13)

# Parameters column
add_section_label(slide, "PARAMETERS & LIMITS", 6.5, 1.55, w=6.5)
params = [
    {"text": "Myopia correction range: up to –10 to –12 D (depending on corneal thickness)", "level": 0},
    {"text": "Hypermetropia: up to +4 D (higher corrections more regression-prone)", "level": 0},
    {"text": "Astigmatism: up to 5–6 D (with toric ablation)", "level": 0},
    {"text": "Residual stromal bed (RSB): MUST remain ≥ 250 µm (ectasia risk if thinner)", "level": 0},
    {"text": "RSB = Preop thickness − flap thickness − ablation depth", "bold": True, "level": 1},
    {"text": "Ablation zone: 6–9 mm optical zone", "level": 0},
    {"text": "Advantages:", "bold": True, "level": 0},
    {"text": "Rapid visual recovery (1–2 days)", "level": 1},
    {"text": "Minimal post-op pain", "level": 1},
    {"text": "Predictable outcomes", "level": 1},
    {"text": "Disadvantages / Risks:", "bold": True, "level": 0},
    {"text": "Flap complications (striae, epithelial ingrowth, free flap)", "level": 1},
    {"text": "Dry eye (severed corneal nerves)", "level": 1},
    {"text": "Ectasia (if RSB < 250 µm or subclinical keratoconus missed)", "level": 1},
    {"text": "DLK (Diffuse Lamellar Keratitis) – 'Sands of Sahara'", "level": 1},
    {"text": "Under/over-correction; regression", "level": 1},
]
add_bullet_textbox(slide, 6.5, 2.0, 6.5, 5.2, params, font_size=12.5)


# ─────────────────────────────────────────────────────────────────
# SLIDE 9 – FEMTOSECOND LASIK vs CONVENTIONAL
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "Femtosecond LASIK vs Conventional LASIK", "Flap Creation Technology")

left = [
    {"text": "Mechanical microkeratome (Moria M2, Hansatome):", "bold": True, "level": 0},
    {"text": "Oscillating metal blade creates flap by translation across cornea under suction ring", "level": 1},
    {"text": "Fast, well-established, cost-effective", "level": 1},
    {"text": "Risk: irregular flap, buttonhole, free cap, epithelial defect", "level": 1},
    {"text": "Flap thickness variability: ±15–20 µm", "level": 1},
]
right = [
    {"text": "Femtosecond laser (IntraLase, VisuMax, WaveLight):", "bold": True, "level": 0},
    {"text": "Infrared (1053 nm) laser creates photodisruption plasma at precise depth → gas-filled cleavage plane", "level": 1},
    {"text": "All-laser LASIK (iLASIK) – USFDA approved for military aviators", "level": 1},
    {"text": "Advantages: thinner, more precise, reproducible flap; lower risk of buttonhole/free cap", "level": 1},
    {"text": "Disadvantage: slower, costlier; transient light sensitivity syndrome (TLSS)", "level": 1},
    {"text": "Flap thickness variability: ±5–10 µm", "level": 1},
]
add_rect(slide, 0.3, 1.55, 6.3, 5.7, WHITE)
add_bullet_textbox(slide, 0.3, 1.55, 6.3, 5.7, left, font_size=14)
add_rect(slide, 6.9, 1.55, 6.1, 5.7, WHITE)
add_bullet_textbox(slide, 6.9, 1.55, 6.1, 5.7, right, font_size=14)

add_textbox(slide, 0.3, 7.1, 12.7, 0.35,
            "KEY PRINCIPLE: Regardless of flap method – residual stromal bed ≥ 250 µm is non-negotiable to prevent ectasia.",
            font_size=12, bold=True, color=ORANGE)


# ─────────────────────────────────────────────────────────────────
# SLIDE 10 – SMILE
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "SMILE – Small Incision Lenticule Extraction", "Flapless Femtosecond Refractive Surgery")

left_col = [
    {"text": "Developed as an alternative to LASIK – entirely flapless", "level": 0},
    {"text": "Uses VisuMax femtosecond laser ONLY (no excimer laser required)", "level": 0},
    {"text": "MECHANISM:", "bold": True, "level": 0},
    {"text": "Femtosecond laser creates a disc-shaped lenticule within stroma at two pre-defined depths", "level": 1},
    {"text": "Second cut creates a small peripheral arc incision (2–4 mm)", "level": 1},
    {"text": "Surgeon dissects and extracts lenticule through small incision", "level": 1},
    {"text": "Removal of lenticule flattens cornea → corrects myopia", "level": 1},
    {"text": "INDICATIONS:", "bold": True, "level": 0},
    {"text": "Myopia: –1 D to –10 D", "level": 1},
    {"text": "Myopic astigmatism up to –5 D", "level": 1},
    {"text": "Hyperopia corrections – under investigation", "level": 1},
]
right_col = [
    {"text": "ADVANTAGES over LASIK:", "bold": True, "level": 0},
    {"text": "No flap – eliminates flap complications (striae, dislocation, trauma risk)", "level": 1},
    {"text": "Preserves more anterior corneal stroma (biomechanically stronger)", "level": 1},
    {"text": "Less dry eye – fewer corneal nerve fibres severed", "level": 1},
    {"text": "Suitable for patients with thin corneas or contact sports", "level": 1},
    {"text": "Better candidate for active duty military/athletes", "level": 1},
    {"text": "DISADVANTAGES:", "bold": True, "level": 0},
    {"text": "Limited range of correction (vs LASIK)", "level": 1},
    {"text": "No wavefront-guided/topography-guided option yet in wide use", "level": 1},
    {"text": "Technically demanding; lenticule extraction requires skill", "level": 1},
    {"text": "Enhancement more difficult – requires surface PRK or conversion to LASIK", "level": 1},
    {"text": "Longer learning curve for surgeon", "level": 1},
]
add_rect(slide, 0.3, 1.55, 6.3, 5.7, WHITE)
add_bullet_textbox(slide, 0.3, 1.55, 6.3, 5.7, left_col, font_size=13)
add_rect(slide, 6.9, 1.55, 6.1, 5.7, WHITE)
add_bullet_textbox(slide, 6.9, 1.55, 6.1, 5.7, right_col, font_size=13)


# ─────────────────────────────────────────────────────────────────
# SLIDE 11 – PHAKIC IOL
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "Phakic Intraocular Lens (pIOL)", "For High Myopia – Preserving the Natural Lens")

top_note = ("Phakic IOLs correct high refractive errors that are beyond the safe limit "
            "for corneal laser surgery, while PRESERVING the natural crystalline lens "
            "(and hence accommodation in young patients).")
add_rect(slide, 0.3, 1.55, 12.7, 0.65, LIGHT_BLUE)
add_textbox(slide, 0.35, 1.55, 12.5, 0.65, top_note,
            font_size=13, color=NAVY, v_anchor=MSO_ANCHOR.MIDDLE)

# AC Phakic IOL
add_rect(slide, 0.3, 2.3, 6.2, 4.9, WHITE)
add_section_label(slide, "ANTERIOR CHAMBER pIOL", 0.3, 2.3, w=6.2)
ac = [
    {"text": "Iris-claw (Artisan/Verisyse) – clipped onto mid-iris at 3 and 9 o'clock", "level": 0},
    {"text": "AC angle-supported (Baikoff type) – rests on angle structures", "level": 0},
    {"text": "Power: –5 D to –25 D", "level": 0},
    {"text": "Requires adequate ACD > 3.0–3.2 mm", "level": 0},
    {"text": "Complications:", "level": 0},
    {"text": "Endothelial cell loss (ongoing – annual monitoring)", "level": 1},
    {"text": "Pupillary block glaucoma → peripheral iridotomy pre-op", "level": 1},
    {"text": "Cataract formation", "level": 1},
    {"text": "Oval pupil (iris claw), subluxation", "level": 1},
    {"text": "Uveitis-Glaucoma-Hyphema (UGH) syndrome (angle-supported)", "level": 1},
]
add_bullet_textbox(slide, 0.3, 2.75, 6.2, 4.4, ac, font_size=13)

# PC Phakic IOL
add_rect(slide, 6.8, 2.3, 6.2, 4.9, WHITE)
add_section_label(slide, "POSTERIOR CHAMBER pIOL (ICL)", 6.8, 2.3, w=6.2)
pc = [
    {"text": "ICL (Implantable Collamer Lens) – EVO/STAAR platform", "level": 0},
    {"text": "Made of Collamer (porcine collagen + HEMA copolymer)", "level": 0},
    {"text": "Placed BEHIND iris, ANTERIOR to crystalline lens", "level": 0},
    {"text": "Supported in ciliary sulcus", "level": 0},
    {"text": "Power range: –3 D to –20.5 D", "level": 0},
    {"text": "ADVANTAGES – excellent visual quality, reversible, large range", "level": 0},
    {"text": "Complications:", "level": 0},
    {"text": "Anterior subcapsular cataract (if vault too low)", "level": 1},
    {"text": "Pupillary block → pre-op laser peripheral iridotomy (or ICL with central port)", "level": 1},
    {"text": "Raised IOP, endothelial cell loss, uveitis", "level": 1},
    {"text": "Retinal detachment (more likely in high myopes)", "level": 1},
    {"text": "EVO ICL has central aqueous port – reduces need for iridotomy", "level": 0},
]
add_bullet_textbox(slide, 6.8, 2.75, 6.2, 4.4, pc, font_size=12.5)


# ─────────────────────────────────────────────────────────────────
# SLIDE 12 – CLEAR LENS EXCHANGE / CLE
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "Clear Lens Exchange (CLE) / Refractive Lens Exchange", "Replacing the Natural Lens to Correct Refraction")

left = [
    {"text": "AKA Refractive Lens Exchange (RLE) – technique is identical to cataract surgery", "level": 0},
    {"text": "INDICATIONS:", "bold": True, "level": 0},
    {"text": "High hypermetropia (> 4–5 D) not correctable by LASIK", "level": 1},
    {"text": "High myopia (> –10 D) with inadequate corneal thickness for laser", "level": 1},
    {"text": "Presbyopia (with multifocal/EDOF IOL)", "level": 1},
    {"text": "Age > 40 years (less loss from sacrificing accommodation)", "level": 1},
    {"text": "PROCEDURE:", "bold": True, "level": 0},
    {"text": "Phacoemulsification of clear crystalline lens", "level": 1},
    {"text": "IOL implanted in capsular bag – monofocal, multifocal, toric or EDOF", "level": 1},
    {"text": "Biometry mandatory – IOL power calculation (SRK-T, Haigis, Barrett Universal II)", "level": 1},
]
right = [
    {"text": "ADVANTAGES:", "bold": True, "level": 0},
    {"text": "Very accurate for high errors", "level": 1},
    {"text": "Good visual results", "level": 1},
    {"text": "Eliminates future cataract surgery need", "level": 1},
    {"text": "DISADVANTAGES:", "bold": True, "level": 0},
    {"text": "LOSS OF ACCOMMODATION (especially < 40 years) – major concern", "level": 1},
    {"text": "Retinal detachment risk – significantly increased in high myopes", "level": 1},
    {"text": "Posterior capsule opacification (PCO)", "level": 1},
    {"text": "Cystoid macular oedema (CMO)", "level": 1},
    {"text": "Endophthalmitis risk (as with any intraocular surgery)", "level": 1},
    {"text": "COUNSELLING IMPORTANT – loss of accommodation must be discussed pre-op", "bold": True, "level": 0},
]
add_rect(slide, 0.3, 1.55, 6.3, 5.7, WHITE)
add_bullet_textbox(slide, 0.3, 1.55, 6.3, 5.7, left, font_size=14)
add_rect(slide, 6.9, 1.55, 6.1, 5.7, WHITE)
add_bullet_textbox(slide, 6.9, 1.55, 6.1, 5.7, right, font_size=14)


# ─────────────────────────────────────────────────────────────────
# SLIDE 13 – CORRECTION OF HYPERMETROPIA
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "Correction of Hypermetropia", "Special Considerations – Steepening the Cornea")

left = [
    {"text": "Surface Ablation (PRK/LASEK) – corrects low hypermetropia < 2–3 D with reasonable results", "level": 0},
    {"text": "LASIK – corrects up to +4 D; higher corrections have more regression", "level": 0},
    {"text": "Conductive Keratoplasty (CK):", "bold": True, "level": 0},
    {"text": "Radiofrequency energy applied via thin probe into corneal periphery", "level": 1},
    {"text": "Thermally shrinks stromal collagen → increases central corneal curvature", "level": 1},
    {"text": "Burns placed in 1–2 concentric rings in periphery (not centre)", "level": 1},
    {"text": "Corrects low-moderate hypermetropia and hyperopic astigmatism", "level": 1},
    {"text": "Also used for monovision/presbyopia correction", "level": 1},
    {"text": "Complications: early overcorrection, significant regression, induced astigmatism", "level": 1},
    {"text": "Laser Thermal Keratoplasty (LTK) with holmium laser – now OBSOLETE", "level": 0},
]
right = [
    {"text": "Why hypermetropia correction is harder than myopia:", "bold": True, "level": 0},
    {"text": "Requires steepening – peripheral ablation; technically challenging to achieve uniform steepening", "level": 1},
    {"text": "More regression (corneal healing flattens steepened zone)", "level": 1},
    {"text": "Smaller effective optical zone; more night glare / halos", "level": 1},
    {"text": "High hypermetropia (> 4–5 D) – intraocular approaches preferred:", "bold": True, "level": 0},
    {"text": "Phakic IOL (anterior or posterior chamber)", "level": 1},
    {"text": "Clear lens exchange with appropriate IOL", "level": 1},
    {"text": "IMPORTANT: Hypermetropia corrections must account for latent hypermetropia (cycloplegic refraction essential)", "bold": True, "level": 0},
    {"text": "Under-correction common if only manifest refraction used", "level": 1},
]
add_rect(slide, 0.3, 1.55, 6.3, 5.7, WHITE)
add_bullet_textbox(slide, 0.3, 1.55, 6.3, 5.7, left, font_size=13)
add_rect(slide, 6.9, 1.55, 6.1, 5.7, WHITE)
add_bullet_textbox(slide, 6.9, 1.55, 6.1, 5.7, right, font_size=13)


# ─────────────────────────────────────────────────────────────────
# SLIDE 14 – COMPARISON TABLE (via function)
# ─────────────────────────────────────────────────────────────────
headers = ["Procedure", "Myopia Range", "Hyperopia Range", "Flap", "Recovery", "Key Risk"]
rows = [
    ["PRK/LASEK", "Up to –6 D", "Low < 2–3 D", "No", "3–7 days pain;\n1–3 months vision", "Subepithelial haze"],
    ["TransPRK", "Up to –8 D", "Limited", "No (no-touch)", "Similar to PRK", "Haze if no MMC"],
    ["LASIK\n(Microkeratome)", "Up to –12 D", "Up to +4 D", "Yes (~110 µm)", "1–2 days", "Flap complications\nDry eye, Ectasia"],
    ["Femto-LASIK", "Up to –12 D", "Up to +4 D", "Yes (~90–110 µm)", "1–2 days", "TLSS; DLK"],
    ["SMILE", "–1 to –10 D", "Under study", "No (flapless)", "2–3 days", "Lenticule tear;\nenhancement difficult"],
    ["Iris-Claw pIOL", "–5 to –25 D", "Available", "No", "Days–weeks", "Endothelial loss\nPupillary block"],
    ["ICL (pIOL)", "–3 to –20.5 D", "Available", "No", "Days", "Cataract, RD"],
    ["CLE / RLE", "Any (IOL)", "Any (IOL)", "No", "Weeks", "RD in myopes\nLoss of accommodation"],
    ["Conductive\nKeratoplasty", "None", "Low-moderate", "No", "Days", "Regression;\nAstigmatism"],
]
slide14 = add_table_slide(prs,
    "Comparison of Refractive Procedures",
    "Quick Reference Guide for Procedure Selection",
    headers, rows,
    col_widths=[2.2, 1.6, 1.7, 1.3, 2.0, 2.1])


# ─────────────────────────────────────────────────────────────────
# SLIDE 15 – COMPLICATIONS (CORNEAL LASER)
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "Complications of Corneal Laser Surgery", "Recognition & Management")

comp_data = [
    ("Intraoperative", [
        "Flap complications – buttonhole, free cap, incomplete flap (LASIK)", 
        "Suction loss during flap creation → abort procedure",
        "Epithelial defect – especially with CXL or RGP wearers",
        "Decentred ablation",
    ]),
    ("Early Post-op (Days–Weeks)", [
        "Pain / discomfort – most severe in PRK (surface ablation)",
        "Diffuse Lamellar Keratitis (DLK) – 'Sands of Sahara'; grade I–IV; Rx: intensive steroids ± flap lift",
        "Epithelial ingrowth under LASIK flap – islands under flap edge",
        "Flap striae/folds – smoothed with hydration ± sutures if severe",
        "Transient Light Sensitivity Syndrome (TLSS) – specific to femto-LASIK",
        "IOP elevation from steroid use",
    ]),
    ("Late Post-op (Months–Years)", [
        "Under-correction / Over-correction – may require enhancement",
        "Regression – especially hyperopia corrections; natural re-steepening over time",
        "Subepithelial haze (PRK) – prevented with MMC; Rx: topical steroid, PTK",
        "Post-LASIK ectasia – corneal thinning + steepening; Rx: cross-linking ± scleral lens; very serious complication",
        "Dry eye syndrome – severed corneal nerves; may persist > 6 months; Rx: lubricants, cyclosporin",
        "Glare, halos, starbursts – related to pupil size > optical zone",
    ]),
]
y = 1.6
for title, items in comp_data:
    add_rect(slide, 0.3, y, 12.7, 0.38, TEAL)
    add_textbox(slide, 0.35, y, 12.5, 0.38, title,
                font_size=14, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE)
    y += 0.42
    tb = slide.shapes.add_textbox(Inches(0.3), Inches(y), Inches(12.7), Inches(1.5))
    tf = tb.text_frame
    tf.word_wrap = True
    first = True
    for item in items:
        p = tf.add_paragraph() if not first else tf.paragraphs[0]
        first = False
        r1 = p.add_run(); r1.text = "▸  "; r1.font.color.rgb = ORANGE; r1.font.size = Pt(12); r1.font.name = "Calibri"
        r2 = p.add_run(); r2.text = item; r2.font.size = Pt(12); r2.font.color.rgb = DARK_GREY; r2.font.name = "Calibri"
    y += 1.35 if title == "Early Post-op (Days–Weeks)" else (1.0 if title == "Intraoperative" else 1.3)


# ─────────────────────────────────────────────────────────────────
# SLIDE 16 – POST-LASIK ECTASIA (Special Focus)
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "Post-Refractive Surgery Ectasia", "A Sight-Threatening Complication")

left = [
    {"text": "Progressive corneal thinning and steepening following LASIK/PRK", "level": 0},
    {"text": "Aetiology:", "bold": True, "level": 0},
    {"text": "Biomechanical weakening when RSB < 250 µm", "level": 1},
    {"text": "Pre-existing subclinical keratoconus (missed on topography)", "level": 1},
    {"text": "Excessive ablation depth", "level": 1},
    {"text": "Risk Factors:", "bold": True, "level": 0},
    {"text": "Thin pre-op cornea (< 500 µm)", "level": 1},
    {"text": "High myopia treated (large ablation)", "level": 1},
    {"text": "Suspicious topography (inferior steepening, high I-S value)", "level": 1},
    {"text": "Young age, family history of keratoconus", "level": 1},
    {"text": "Thin RSB (< 250 µm)", "level": 1},
]
right = [
    {"text": "Clinical Features:", "bold": True, "level": 0},
    {"text": "Increasing myopia and irregular astigmatism months-years post-op", "level": 1},
    {"text": "Topography shows progressive inferior steepening", "level": 1},
    {"text": "Reduced BCVA, corneal thinning", "level": 1},
    {"text": "Management:", "bold": True, "level": 0},
    {"text": "Corneal Cross-Linking (CXL) – HALT progression; riboflavin + UVA", "level": 1},
    {"text": "Intracorneal ring segments (ICRS) – Ferrara/Intacs – flattening effect", "level": 1},
    {"text": "Scleral contact lenses – for visual rehabilitation", "level": 1},
    {"text": "Keratoplasty (DALK or PK) if severe", "level": 1},
    {"text": "PREVENTION is key:", "bold": True, "level": 0},
    {"text": "Never operate on suspicious topographies", "level": 1},
    {"text": "Always ensure RSB ≥ 250 µm", "level": 1},
    {"text": "Use Ectasia risk score (Randleman score) pre-operatively", "level": 1},
]
add_rect(slide, 0.3, 1.55, 6.3, 5.7, WHITE)
add_bullet_textbox(slide, 0.3, 1.55, 6.3, 5.7, left, font_size=13.5)
add_rect(slide, 6.9, 1.55, 6.1, 5.7, WHITE)
add_bullet_textbox(slide, 6.9, 1.55, 6.1, 5.7, right, font_size=13.5)


# ─────────────────────────────────────────────────────────────────
# SLIDE 17 – PROCEDURE SELECTION ALGORITHM
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "Procedure Selection Guide", "Which Surgery for Which Patient?")

add_rect(slide, 0.3, 1.55, 12.7, 0.6, LIGHT_BLUE)
add_textbox(slide, 0.35, 1.55, 12.5, 0.6,
            "Decision framework – always individualise based on corneal thickness, error magnitude, lifestyle, and patient preference",
            font_size=13, italic=True, color=NAVY, v_anchor=MSO_ANCHOR.MIDDLE)

rows2 = [
    ("Myopia –1 to –6 D; normal cornea > 500 µm", "→ LASIK (fem or mK) OR SMILE OR PRK",
     "PRK if thin cornea or contact sport"),
    ("Myopia –6 to –10 D; adequate cornea", "→ Femto-LASIK OR SMILE",
     "SMILE preferred if contact sport; check RSB"),
    ("Myopia > –10 D OR thin cornea", "→ Phakic IOL (ICL preferred) OR CLE if > 40 yrs",
     "CLE loses accommodation in young patients"),
    ("Hypermetropia +1 to +4 D", "→ Hyperopic LASIK OR PRK (low amounts)",
     "More regression; careful counselling"),
    ("Hypermetropia > +4 D", "→ CLE with +IOL OR AC phakic IOL",
     "Cycloplegic refraction essential"),
    ("Astigmatism ≤ 5 D (with myopia/hyperopia)", "→ Toric ablation (LASIK/PRK) OR toric ICL",
     "Topography-guided ablation preferred"),
    ("High myopia + dry eye", "→ SMILE or pIOL (avoid LASIK – severs more nerves)",
     "LASIK worsens dry eye"),
    ("Thin cornea < 480 µm, any error", "→ PRK (if mild error) OR pIOL",
     "AVOID LASIK/SMILE – ectasia risk"),
]
y = 2.25
for situation, proc, note in rows2:
    add_rect(slide, 0.3, y, 4.5, 0.55, NAVY)
    add_textbox(slide, 0.35, y, 4.4, 0.55, situation, font_size=11.5, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE)
    add_rect(slide, 4.85, y, 4.5, 0.55, TEAL)
    add_textbox(slide, 4.9, y, 4.4, 0.55, proc, font_size=12, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE)
    add_rect(slide, 9.4, y, 3.6, 0.55, WHITE)
    add_textbox(slide, 9.45, y, 3.5, 0.55, note, font_size=11, color=MID_GREY, v_anchor=MSO_ANCHOR.MIDDLE, italic=True)
    y += 0.62


# ─────────────────────────────────────────────────────────────────
# SLIDE 18 – POST-OPERATIVE CARE
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "Post-Operative Care & Follow-Up", "Managing the Patient After Refractive Surgery")

left = [
    {"text": "LASIK Post-op Protocol:", "bold": True, "level": 0},
    {"text": "Day 1 – Slit lamp exam; check flap position, epithelium, IOP", "level": 1},
    {"text": "Topical antibiotics – 1 week (e.g. moxifloxacin QID)", "level": 1},
    {"text": "Topical steroids – 1–4 weeks (tapered)", "level": 1},
    {"text": "Lubricating drops – 3–6 months minimum (nerve recovery)", "level": 1},
    {"text": "Avoid rubbing eyes – risk of flap displacement", "level": 1},
    {"text": "Avoid swimming / water exposure – 1–2 weeks", "level": 1},
    {"text": "Shield at night – 1 week (LASIK)", "level": 1},
    {"text": "PRK Post-op Protocol:", "bold": True, "level": 0},
    {"text": "BCL (bandage contact lens) for 4–5 days until epithelium heals", "level": 1},
    {"text": "Topical NSAID – pain control (first 3–4 days)", "level": 1},
    {"text": "Steroid drops – tapered over 2–4 months (haze prevention)", "level": 1},
    {"text": "Frequent lubricants essential", "level": 1},
]
right = [
    {"text": "Follow-up Schedule:", "bold": True, "level": 0},
    {"text": "Day 1, Day 3–5 (BCL removal PRK), Week 1, Month 1, Month 3, Month 6, Year 1", "level": 1},
    {"text": "At each visit: VA (uncorrected + best corrected), refraction, IOP, slit lamp", "level": 1},
    {"text": "Topography at 1, 3, 6 months – monitor for ectasia", "level": 1},
    {"text": "Enhancement (retreatment):", "bold": True, "level": 0},
    {"text": "Consider if residual error > 0.5–1 D after refraction stable (> 3 months)", "level": 1},
    {"text": "LASIK enhancement – flap relifted (up to 5 years) or surface ablation over flap", "level": 1},
    {"text": "SMILE enhancement – PRK over SMILE or LASIK conversion ('CIRCLE')", "level": 1},
    {"text": "Patient Education:", "bold": True, "level": 0},
    {"text": "Vision fluctuates for weeks-months – reassure", "level": 1},
    {"text": "Presbyopia will develop with age regardless of surgery", "level": 1},
    {"text": "Warn about night glare/halos in early period", "level": 1},
    {"text": "Always carry spectacles/contact lens prescription", "level": 1},
]
add_rect(slide, 0.3, 1.55, 6.3, 5.7, WHITE)
add_bullet_textbox(slide, 0.3, 1.55, 6.3, 5.7, left, font_size=13)
add_rect(slide, 6.9, 1.55, 6.1, 5.7, WHITE)
add_bullet_textbox(slide, 6.9, 1.55, 6.1, 5.7, right, font_size=13)


# ─────────────────────────────────────────────────────────────────
# SLIDE 19 – KEY EXAM POINTS / SUMMARY
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, PALE_BG)
add_header_bar(slide, "Key Points for Residents", "High-Yield Facts & Common Exam Questions")

keypoints = [
    "RSB ≥ 250 µm is the most critical safety parameter in LASIK to prevent ectasia",
    "PRK preferred over LASIK: thin cornea, contact sport, previous LASIK, high ablation depth",
    "SMILE: flapless, less dry eye, no excimer laser – uses VisuMax femtosecond laser only; limited to myopia currently",
    "ICL power range: –3 D to –20.5 D; Collamer material; placed in ciliary sulcus; preserves accommodation",
    "Conductive Keratoplasty (CK) corrects hypermetropia via peripheral RF-induced stromal shrinkage",
    "Contraindications to ALL refractive surgery: keratoconus, unstable refraction, severe dry eye, uncontrolled glaucoma",
    "DLK ('Sands of Sahara') – early post-LASIK complication; diffuse interface inflammation; treat with intensive topical steroids",
    "MMC 0.02% for 20–40 sec applied after PRK ablation > 50 µm – prevents subepithelial haze",
    "Post-refractive surgery IOL calculation: Modified refractor methods (Haigis-L, Barrett True-K, Masket formula)",
    "Cycloplegic refraction essential for hypermetropia – prevents under-correction from latent hypermetropia",
    "Ectasia risk: Randleman risk scoring system; suspicious topography = absolute contraindication",
    "LASIK flap types: microkeratome (±15–20 µm variability) vs femtosecond laser (±5–10 µm; more precise)",
]

y = 1.6
for i, kp in enumerate(keypoints):
    col = 0 if i < 6 else 6.6
    row_y = 1.6 + (i % 6) * 0.93
    bg = LIGHT_BLUE if i % 2 == 0 else WHITE
    add_rect(slide, col + 0.3, row_y, 6.0, 0.82, bg)
    num_tb = slide.shapes.add_textbox(Inches(col+0.35), Inches(row_y+0.05), Inches(0.45), Inches(0.72))
    tf = num_tb.text_frame
    tf.word_wrap = False
    p = tf.paragraphs[0]
    r = p.add_run(); r.text = f"{i+1}."; r.font.size = Pt(14); r.font.bold = True; r.font.color.rgb = TEAL; r.font.name = "Calibri"
    add_textbox(slide, col+0.82, row_y+0.04, 5.4, 0.74, kp, font_size=12, color=DARK_GREY, v_anchor=MSO_ANCHOR.TOP)


# ─────────────────────────────────────────────────────────────────
# SLIDE 20 – REFERENCES
# ─────────────────────────────────────────────────────────────────
slide = prs.slides.add_slide(blank)
set_slide_bg(slide, NAVY)
add_rect(slide, 0, 0, 13.333, 1.15, NAVY)
add_textbox(slide, 0.5, 0.15, 12.333, 0.9,
            "References & Further Reading",
            font_size=30, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
add_rect(slide, 0, 1.15, 13.333, 0.06, ORANGE)

refs = [
    "1. Kanski JJ, Bowling B. Kanski's Clinical Ophthalmology: A Systematic Approach, 10th Edition. Elsevier, 2022. Chapter 8 – Corneal and Refractive Surgery.",
    "2. Rapuano CJ et al. The Wills Eye Manual – Office and Emergency Room Diagnosis and Treatment of Eye Disease, 8th Edition. Wolters Kluwer, 2022.",
    "3. American Academy of Ophthalmology. Basic and Clinical Science Course (BCSC), Section 13: Refractive Surgery. AAO, 2023.",
    "4. Azar DT (ed). Refractive Surgery, 3rd Edition. Elsevier, 2020.",
    "5. ESCRS Clinical Guidelines on Refractive Surgery. European Society of Cataract & Refractive Surgeons.",
    "6. Randleman JB et al. Risk Assessment for Ectasia after Corneal Refractive Surgery. Ophthalmology 2008; 115(1): 37–50.",
    "7. Reinstein DZ et al. SMILE: History, Fundamentals of a New Refractive Surgery Technique and Clinical Outcomes. Eye Vis (Lond) 2014; 1:3.",
    "8. EVO Visian ICL Instructions for Use. STAAR Surgical, 2020.",
]
for i, ref in enumerate(refs):
    y = 1.4 + i * 0.7
    add_textbox(slide, 0.5, y, 12.333, 0.65, ref,
                font_size=12, color=LIGHT_BLUE if i % 2 == 0 else WHITE, italic=(i % 2 == 0))


# ─────────────────────────────────────────────────────────────────
# SAVE
# ─────────────────────────────────────────────────────────────────
out_path = "/tmp/workspace/refractive-surgery-ppt/Refractive_Surgery_Ophthalmology_Residents.pptx"
buf = BytesIO()
prs.save(buf)
with open(out_path, "wb") as f:
    f.write(buf.getvalue())
print(f"Saved: {out_path}")
print(f"Total slides: {len(prs.slides)}")
Your credits are exhausted. You can purchase a top-up or subscribe to a plan to continue using Orris. If you're already subscribed, your daily credits will reset tomorrow.
This is a shared conversation. Sign in to Orris to start your own chat.