take Cummings as reference and explain about about anterior skull base approaches
| Type | Depth | Risk |
|---|---|---|
| I | 1–3 mm | Lowest |
| II | 4–7 mm | Moderate |
| III | 8–16 mm | Highest (thin, steeply inclined lateral lamella) |
"For anterior cranial base lesions, the most commonly used open approaches employ some form of frontal craniotomy (unilaterally or bilaterally) with some form of transfacial exposure (transnasal, transmaxillary, or transorbital)."

| Module | Area of Access | Bone Removed | CN at Risk | Common Pathologies | Key Complications |
|---|---|---|---|---|---|
| Transfrontal (sagittal) | Posterior table & floor of frontal sinus | Posterior table of frontal sinus | — | Mucocele, frontal osteoma, nasal dermoid, erosive inflammatory disease | CSF leak, orbital hematoma, frontal recess stenosis |
| Transcribriform (sagittal) | Crista galli → planum sphenoidale | Cribriform plate, crista galli | Olfactory (I) | Olfactory groove meningiomas, esthesioneuroblastoma, encephaloceles, CSF leak, sinonasal tumors | CSF leak, anterior cerebral artery bleed, anosmia, orbital hematoma |
| Transplanum / Transtuberculum (sagittal) | Suprasellar region, posterior anterior cranial base | Planum sphenoidale, tuberculum, optic strut, medial clinoid | Optic nerve/chiasm (II) | Planum meningiomas, suprasellar pituitary adenoma, craniopharyngioma, optic nerve glioma | CSF leak, ICA/ophthalmic artery bleed, cavernous sinus bleed, DI, optic nerve injury |
| Module | Area of Access | CN at Risk | Pathologies |
|---|---|---|---|
| Supraorbital | Orbital roof | Optic nerve | Fibro-osseous lesions |
| Transorbital | Intraconal lesions inferomedial to optic nerve | Optic nerve | Hemangiomas, schwannomas |

| Approach | Access | Best For | Advantage |
|---|---|---|---|
| Anterior craniofacial resection | Bifrontal craniotomy + transfacial | SCC, esthesioneuroblastoma, adenocarcinoma with anterior fossa invasion | Wide exposure, en bloc resection |
| Supraorbital/keyhole craniotomy | Small anterolateral craniotomy | Anterior fossa, parasellar lesions | Minimal retraction, cosmetic |
| Craniofacial disassembly | Facial osteotomies + craniotomy | Very large/complex tumors | Wide inferior exposure |
| EEA Transcribriform | Endonasal | Olfactory groove meningioma, esthesioneuroblastoma | No facial scar, minimal morbidity |
| EEA Transplanum/Transtuberculum | Endonasal | Planum meningioma, craniopharyngioma | Suprasellar access without retraction |
| EEA Transfrontal | Endonasal | Mucocele, osteoma, nasal dermoid | Avoids external incision |
also add trans sphenoid approach to anterior skull base
"The great majority of the transnasal endoscopic skull base operations directly involve the sphenoid sinus, which is the focal point for several of the surgical approaches."


| CSF Leak Status | Reconstruction |
|---|---|
| No CSF leak | Mucoperiosteum replaced; nasoseptal flap returned to original position |
| Low-flow CSF leak | Nasoseptal flap alone seals the defect |
| Large defect / high-flow leak | Triple-F technique: fat + fascia lata + nasoseptal flap (multilayer) |
| Extension | Target | Key Pathology |
|---|---|---|
| Transclival | Clivus, retroclival region, cavernous sinus, petrous apex | Chordoma, clival meningioma, petrous apex cholesterol granuloma |
| Transcribriform (unilateral) | Olfactory groove (one side), ethmoid roof | Esthesioneuroblastoma, sinonasal malignancy with intradural extension; preserves contralateral olfaction |
| Transcribriform (bilateral) | Full cribriform/olfactory groove + frontal sinus (Draf III required) | Bilateral malignancy; limits: medial orbital wall laterally, frontal sinus anteriorly, sphenoid posteriorly |
| Transtuberculum-Transplanum | Planum sphenoidale, tuberculum sellae, suprasellar cistern | Planum meningioma, craniopharyngioma, Rathke pouch cyst, optic nerve glioma, suprasellar pituitary adenoma |
| Target Region | Preferred Transsphenoidal Route |
|---|---|
| Sella (pituitary adenoma) | Transseptal or binostril transsphenoidal |
| Parasellar / cavernous sinus | Transsphenoidal-transsellar extended laterally |
| Suprasellar (planum meningioma) | Transtuberculum-transplanum |
| Olfactory groove | Transcribriform (uni- or bilateral) |
| Clivus / petrous apex | Transclival/transphenoidal with petrous apex drilling |
| Frontal sinus / nasal dermoid | Transfrontal (Draf III combined) |
make pdf
ls /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or missing"
mkdir -p /home/daytona/workspace/anterior-skull-base
~/anterior-skull-base/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, Image, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus.flowables import HRFlowable
import urllib.request
import os
import io
OUTPUT = "/home/daytona/workspace/anterior-skull-base/Anterior_Skull_Base_Approaches_Cummings.pdf"
IMG_DIR = "/home/daytona/workspace/anterior-skull-base/images"
os.makedirs(IMG_DIR, exist_ok=True)
# Download images
images = {
"sagittal_modules.png": "https://cdn.orris.care/cdss_images/c696cc974bffc3c7e774a6c8b3316291fffc78b41d315076dddb569777a77724.png",
"approach_algorithm.png": "https://cdn.orris.care/cdss_images/110bf8746fa7c17aac9377778b12e6c3c22363a12fdb582fb671f7c3693bc099.png",
"kerrison_sphenoid.png": "https://cdn.orris.care/cdss_images/93bf77a96696693a6434842dd1bcc9418e99b4893ae100cc133767f9af86df89.png",
"endoscopic_sphenoid.png": "https://cdn.orris.care/cdss_images/96399cce4b4067737a9c3326117cd432332eb9713acde242e02bb118884750d7.png",
}
for fname, url in images.items():
fpath = os.path.join(IMG_DIR, fname)
if not os.path.exists(fpath):
try:
urllib.request.urlretrieve(url, fpath)
print(f"Downloaded {fname}")
except Exception as e:
print(f"Failed {fname}: {e}")
# ── Styles ────────────────────────────────────────────────────────────────────
PAGE_W, PAGE_H = A4
MARGIN = 2 * cm
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=MARGIN, rightMargin=MARGIN,
topMargin=2.2 * cm, bottomMargin=2 * cm,
title="Anterior Skull Base Approaches – Cummings",
author="Orris Medical Reference"
)
styles = getSampleStyleSheet()
BASE_FONT = "Helvetica"
def sty(name, parent="Normal", **kw):
return ParagraphStyle(name, parent=styles[parent], fontName=BASE_FONT, **kw)
TITLE_STYLE = sty("DocTitle", fontSize=20, leading=26, alignment=TA_CENTER,
textColor=colors.HexColor("#1a3a5c"), spaceAfter=6)
SUBTITLE_STYLE = sty("Subtitle", fontSize=11, leading=15, alignment=TA_CENTER,
textColor=colors.HexColor("#4a6fa5"), spaceAfter=4)
SOURCE_STYLE = sty("Source", fontSize=9, leading=12, alignment=TA_CENTER,
textColor=colors.HexColor("#666666"), spaceAfter=14, fontName="Helvetica-Oblique")
H1_STYLE = sty("H1", fontSize=14, leading=18, spaceBefore=16, spaceAfter=6,
textColor=colors.HexColor("#1a3a5c"), fontName="Helvetica-Bold")
H2_STYLE = sty("H2", fontSize=12, leading=16, spaceBefore=12, spaceAfter=4,
textColor=colors.HexColor("#2e5fa3"), fontName="Helvetica-Bold")
H3_STYLE = sty("H3", fontSize=10.5, leading=14, spaceBefore=8, spaceAfter=3,
textColor=colors.HexColor("#3a7abf"), fontName="Helvetica-Bold")
BODY_STYLE = sty("Body", fontSize=9.5, leading=14, spaceAfter=6, alignment=TA_JUSTIFY)
BULLET_STYLE = sty("Bullet", fontSize=9.5, leading=14, spaceAfter=3,
leftIndent=14, firstLineIndent=0)
QUOTE_STYLE = sty("Quote", fontSize=9, leading=13, spaceAfter=6,
leftIndent=20, rightIndent=20, fontName="Helvetica-Oblique",
textColor=colors.HexColor("#444444"), spaceBefore=4)
CAPTION_STYLE = sty("Caption", fontSize=8.5, leading=12, alignment=TA_CENTER,
textColor=colors.HexColor("#555555"), fontName="Helvetica-Oblique", spaceAfter=8)
def h1(text): return Paragraph(text, H1_STYLE)
def h2(text): return Paragraph(text, H2_STYLE)
def h3(text): return Paragraph(text, H3_STYLE)
def body(text): return Paragraph(text, BODY_STYLE)
def bullet(text): return Paragraph(f"• {text}", BULLET_STYLE)
def quote(text): return Paragraph(f'"{text}"', QUOTE_STYLE)
def caption(text): return Paragraph(text, CAPTION_STYLE)
def sp(h=6): return Spacer(1, h)
def hr(): return HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=6, spaceBefore=6)
def img(fname, w_cm=14, caption_text=""):
path = os.path.join(IMG_DIR, fname)
if not os.path.exists(path):
return [body(f"[Image not available: {fname}]")]
elems = [Image(path, width=w_cm*cm, height=None)]
if caption_text:
elems.append(caption(caption_text))
return elems
def make_table(headers, rows, col_widths=None):
data = [headers] + rows
if col_widths is None:
available = PAGE_W - 2 * MARGIN
col_widths = [available / len(headers)] * len(headers)
table = Table(data, colWidths=col_widths, repeatRows=1)
style = TableStyle([
('BACKGROUND', (0,0), (-1,0), colors.HexColor("#1a3a5c")),
('TEXTCOLOR', (0,0), (-1,0), colors.white),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,0), 8.5),
('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor("#f0f4fa"), colors.white]),
('FONTNAME', (0,1), (-1,-1), 'Helvetica'),
('FONTSIZE', (0,1), (-1,-1), 8),
('ALIGN', (0,0), (-1,-1), 'LEFT'),
('VALIGN', (0,0), (-1,-1), 'TOP'),
('GRID', (0,0), (-1,-1), 0.3, colors.HexColor("#aaaaaa")),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 5),
('RIGHTPADDING', (0,0), (-1,-1), 5),
])
table.setStyle(style)
return table
def wrap_table_cells(data):
"""Wrap all cells in Paragraph objects for text wrapping."""
result = []
for row in data:
result.append([Paragraph(str(c), ParagraphStyle("tc", fontName="Helvetica", fontSize=8, leading=11)) for c in row])
return result
def wrap_header_cells(headers):
return [Paragraph(str(h), ParagraphStyle("th", fontName="Helvetica-Bold", fontSize=8.5, leading=12, textColor=colors.white)) for h in headers]
def make_table2(headers, rows, col_widths=None):
"""Table with wrapped text cells."""
available = PAGE_W - 2 * MARGIN
if col_widths is None:
col_widths = [available / len(headers)] * len(headers)
data = [wrap_header_cells(headers)] + wrap_table_cells(rows)
table = Table(data, colWidths=col_widths, repeatRows=1)
style = TableStyle([
('BACKGROUND', (0,0), (-1,0), colors.HexColor("#1a3a5c")),
('ROWBACKGROUNDS',(0,1), (-1,-1), [colors.HexColor("#f0f4fa"), colors.white]),
('ALIGN', (0,0), (-1,-1), 'LEFT'),
('VALIGN', (0,0), (-1,-1), 'TOP'),
('GRID', (0,0), (-1,-1), 0.3, colors.HexColor("#aaaaaa")),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 5),
('RIGHTPADDING', (0,0), (-1,-1), 5),
])
table.setStyle(style)
return table
# ── Build story ────────────────────────────────────────────────────────────────
story = []
# ── TITLE PAGE ────────────────────────────────────────────────────────────────
story += [
sp(30),
Paragraph("Anterior Skull Base Approaches", TITLE_STYLE),
Paragraph("A Comprehensive Reference Based on Cummings Otolaryngology", SUBTITLE_STYLE),
Paragraph("Cummings Otolaryngology Head and Neck Surgery, 7th Edition", SOURCE_STYLE),
hr(),
sp(10),
]
# ── SECTION 1: ANATOMY ────────────────────────────────────────────────────────
story.append(h1("1. Anatomy of the Anterior Skull Base"))
story.append(body(
"The anterior skull base is formed by the <b>cribriform plate medially</b> and the <b>ethmoidal roof laterally</b>. "
"The cribriform plate may be only 0.1–0.2 mm thick and often lies much lower than the ethmoidal roof. "
"The lateral lamella of the cribriform plate connects to the ethmoidal roof and is particularly thin and vulnerable to iatrogenic injury."
))
story.append(sp(4))
story.append(h2("Keros Classification — Depth of Olfactory Groove"))
keros_headers = ["Type", "Depth", "Anatomic Feature", "Risk of Injury"]
keros_rows = [
["Type I", "1–3 mm", "Shallow olfactory groove", "Lowest"],
["Type II", "4–7 mm", "Moderate depth", "Intermediate"],
["Type III", "8–16 mm", "Deep groove; thin, steeply inclined lateral lamella", "Highest — greatest vulnerability during ESS"],
]
story.append(make_table2(keros_headers, keros_rows, [1.5*cm, 2*cm, 8*cm, 4.5*cm]))
story.append(sp(8))
story.append(h2("Key Surgical Landmarks"))
for b in [
"<b>Anterior ethmoidal artery</b> — lies posterior to the frontal recess; can 'sling' downward within the ethmoid space. Retraction into the orbit causes acute orbital hematoma and blindness.",
"<b>Posterior ethmoidal artery</b> — lies just anterior to the sphenoid sinus in the skull base.",
"<b>Skull base slope</b> — highest anteriorly, slopes downward posteriorly. Dissection should proceed from posterior to anterior once the skull base is identified.",
"<b>Asymmetric cribriform heights</b> — can occur bilaterally; ratio of posterior ethmoid height to maxillary sinus height helps predict skull base level.",
]:
story.append(bullet(b))
story.append(sp(4))
# ── SECTION 2: OVERVIEW ───────────────────────────────────────────────────────
story.append(h1("2. Overview of Approaches"))
story.append(quote(
"For anterior cranial base lesions, the most commonly used open approaches employ some form of frontal "
"craniotomy (unilaterally or bilaterally) with some form of transfacial exposure (transnasal, transmaxillary, or transorbital)."
))
story.append(body(
"Surgical approaches to the anterior skull base span a spectrum from purely intracranial (neurosurgical) to purely "
"extracranial (endonasal endoscopic), with most contemporary procedures combining both components. "
"Purely endoscopic endonasal approaches have revolutionized anterior skull base surgery over the past two decades, "
"in many cases replacing traditional open craniofacial approaches."
))
# ── SECTION 3: OPEN APPROACHES ────────────────────────────────────────────────
story.append(PageBreak())
story.append(h1("3. Open Craniotomy-Based Approaches"))
story.append(h2("3.1 Anterior Craniofacial Resection (ACR)"))
story.append(body(
"The traditional workhorse for sinonasal malignancies invading the anterior cranial fossa. "
"ACR combines <b>bifrontal craniotomy</b> (intracranial component) with <b>transfacial exposure</b> — "
"most often lateral rhinotomy ± contralateral Lynch incision, or midfacial degloving."
))
story.append(h3("Indications"))
for b in [
"Squamous cell carcinoma of the sinonasal tract with anterior fossa invasion",
"Esthesioneuroblastoma (olfactory neuroblastoma)",
"Adenocarcinoma of the sinonasal tract",
"Other sinonasal malignancies with cribriform / anterior fossa involvement",
"Orbital exenteration added when tumor invades orbital soft tissues",
]:
story.append(bullet(b))
story.append(sp(4))
story.append(h3("Operative Steps"))
steps = [
("Step 1 — Transfacial Exposure", "Periosteum elevated from nasal bones and medial/inferior orbit. Naso-lacrimal duct identified and transected distally. Anterior and posterior ethmoidal arteries identified and cauterized/clipped. Contralateral Lynch incision made for bilateral ethmoidectomy."),
("Step 2 — Bifrontal Craniotomy", "If large frontal sinus: osteoplastic flap to avoid bur holes in forehead. If small: frontal bone flap with bur holes above hairline. Lower horizontal bone cut kept within 1 cm of superior orbital rims to minimize brain retraction."),
("Step 3 — Brain Relaxation", "25–50 mL CSF withdrawn via lumbar drain. Controlled hyperventilation (PCO₂ 25–30 mmHg). Mannitol and/or corticosteroids as adjuncts."),
("Step 4 — Frontal Lobe Elevation", "Dura incised; olfactory nerves severed at cribriform plate. CSF leakage controlled with dural patch (temporal fascia, fascia lata, or pericranium). Dura elevated to expose orbital roofs and planum sphenoidale."),
("Step 5 — Posterior Margin", "If disease confined to cribriform: planum entered with cutting bur/osteotome. If planum must be removed: intracranial optic nerves unroofed via optic canal decompression before sphenoid osteotomy."),
("Step 6 — En Bloc Resection", "Ethmoidectomy completed with sagittal saw osteotomies. Orbital exenteration added if intraoperative confirmation of orbital soft tissue invasion."),
]
for title, detail in steps:
story.append(KeepTogether([
Paragraph(f"<b>{title}</b>", ParagraphStyle("step", parent=styles["Normal"],
fontName="Helvetica-Bold", fontSize=9.5, leading=14, spaceBefore=6, spaceAfter=2,
textColor=colors.HexColor("#2e5fa3"))),
body(detail),
]))
story.append(h3("Bicoronal Incision — Technical Notes"))
for b in [
"Placed in true coronal plane at level of top of helix (or slightly anterior)",
"Preserves anterior branches of the superficial temporal artery",
"High placement maximizes length of vascularized pericranial flap available for reconstruction",
"Central scalp flap: subgaleal plane (if pericranial flap planned) or subperiosteal if not",
"Lateral to temporal lines: subgaleal plane just above deep temporal fascia",
"Interfascial incision at temporal lines protects the frontal branch of the facial nerve",
]:
story.append(bullet(b))
story.append(sp(6))
story.append(h2("3.2 Supraorbital / Keyhole Craniotomy"))
story.append(body(
"A minimally invasive open technique based on the concept that a <b>small, tailored craniotomy</b> can access "
"deep-seated anterior fossa pathology with limited brain retraction. Craniotomy centered anterolaterally "
"at the orbital roof/anterior fossa floor."
))
story.append(h3("Incision Options"))
for b in [
"Transciliary incision",
"Supraciliary incision",
"Upper blepharoplasty crease",
"Transpalpebral incision (Raza modification) — avoids frontalis palsy, cosmetically superior",
]:
story.append(bullet(b))
story.append(h3("Orbital Osteotomy (Raza Modification)"))
for b in [
"Increases visualization of anterior fossa, parasellar region, interpeduncular cistern",
"Limits frontal lobe retraction",
"Expands working space compared to craniotomy alone",
]:
story.append(bullet(b))
story.append(sp(6))
story.append(h2("3.3 Craniofacial Disassembly Techniques"))
story.append(body(
"Derived from plastic surgery for congenital craniofacial corrections. These techniques systematically dismantle "
"the craniofacial skeleton to expose the skull base <i>from below the neuraxis</i>, significantly reducing brain retraction. "
"Now largely supplanted by endoscopic approaches but remain in use for very large or complex tumors."
))
for b in [
"Le Fort I and II osteotomies",
"Maxillary splitting",
"Removal of the frontonasal unit",
"Midfacial degloving with sublabial incisions",
"Facial translocation approaches",
]:
story.append(bullet(b))
# ── SECTION 4: ENDOSCOPIC APPROACHES ─────────────────────────────────────────
story.append(PageBreak())
story.append(h1("4. Endoscopic Endonasal Approaches (EEA)"))
story.append(body(
"Expanded by Kassam et al. (University of Pittsburgh, 2005) to the full ventral skull base — from crista galli "
"to foramen magnum. The EEA is now the most dynamic area of growth in anterior skull base surgery. "
"Access to the central skull base from the frontal sinus to C2 and from the sella to the jugular foramen is possible."
))
story.append(h3("Documented Advantages"))
for b in [
"No facial scars",
"Decreased trauma to normal tissue",
"Decreased hospital length of stay",
"Improved quality of life",
"Diminished overall morbidity",
]:
story.append(bullet(b))
story.append(sp(6))
story.append(h2("4.1 Sagittal Plane Modules — Anterior Skull Base"))
story.append(body(
"Three modules proceed in stepwise succession rostrally along the sagittal axis. "
"Each begins with bilateral sphenoid exposure creating a single rectangular cavity."
))
story.append(sp(4))
story += img("sagittal_modules.png", w_cm=12,
caption_text="Fig. 176.17 — Sagittal CT showing the three anterior EEA modules: Transfrontal (pink), Transcribriform (yellow), Transplanum/Transtuberculum (teal). [Cummings Otolaryngology, Ch. 176]")
story.append(sp(8))
eea_headers = ["Module", "Area of Access", "Bone Removed", "CN at Risk", "Common Pathologies", "Key Complications"]
eea_rows = [
["Transfrontal\n(sagittal)",
"Posterior table & floor of frontal sinus",
"Posterior table of frontal sinus",
"—",
"Mucocele, frontal osteoma, nasal dermoid, erosive inflammatory disease",
"CSF leak, orbital hematoma, frontal recess stenosis"],
["Transcribriform\n(sagittal)",
"Crista galli → planum sphenoidale",
"Cribriform plate, crista galli",
"CN I (olfactory)",
"Olfactory groove meningiomas, esthesioneuroblastoma, encephaloceles, CSF leak, sinonasal tumors",
"CSF leak, anterior cerebral artery bleed, anosmia, orbital hematoma"],
["Transplanum /\nTranstuberculum\n(sagittal)",
"Suprasellar region, posterior anterior cranial base",
"Planum sphenoidale, tuberculum, optic strut, medial clinoid",
"CN II (optic nerve/chiasm)",
"Planum meningiomas, suprasellar pituitary adenoma, craniopharyngioma, optic nerve glioma",
"CSF leak, ICA/ophthalmic artery bleed, cavernous sinus bleed, DI, optic nerve injury"],
]
avail = PAGE_W - 2*MARGIN
eea_widths = [avail*0.13, avail*0.14, avail*0.15, avail*0.10, avail*0.27, avail*0.21]
story.append(make_table2(eea_headers, eea_rows, eea_widths))
story.append(sp(10))
story.append(h2("4.2 Coronal Plane Modules"))
cp_headers = ["Module", "Area of Access", "CN at Risk", "Common Pathologies", "Key Complications"]
cp_rows = [
["Supraorbital", "Orbital roof", "CN II (optic)", "Benign fibro-osseous lesions", ""],
["Transorbital", "Intraconal lesions inferomedial to optic nerve", "CN II (optic)", "Hemangiomas, schwannomas", "Vision loss, EOM injury/diplopia, globe injury, CSF leak"],
]
cp_widths = [avail*0.14, avail*0.22, avail*0.12, avail*0.27, avail*0.25]
story.append(make_table2(cp_headers, cp_rows, cp_widths))
story.append(sp(10))
story.append(h2("4.3 EEA Surgical Setup"))
story.append(body(
"Each module begins with <b>bilateral sphenoid exposure</b> creating a single rectangular working cavity, accomplished in sequence:"
))
for b in [
"Right middle turbinectomy",
"Disarticulation and removal of sphenoid rostrum",
"Lateralization of left middle turbinate",
"Bilateral sphenoidectomy — lateral margins extended to medial pterygoid plates",
"Resection of ~1–2 cm of posterior nasal septum",
]:
story.append(bullet(b))
story.append(sp(6))
story.append(h2("4.4 Contraindications to Purely Endonasal Approach"))
story.append(body("<b>Absolute contraindications:</b>"))
for b in [
"Involvement of nasal bones or anterior table of frontal sinus",
"Overlying skin of nasal dorsum or frontal sinus",
"Orbital involvement requiring exenteration",
]:
story.append(bullet(b))
story.append(body("<b>Relative contraindications:</b>"))
for b in [
"Need for vascular reconstruction",
"Expected very long operative duration",
"Tumor involvement of superficial tissues",
]:
story.append(bullet(b))
story.append(sp(6))
story.append(h2("4.5 Approach Selection Algorithm"))
story.append(body(
"The algorithm below (Naunheim et al., J Neurol Surg B 2016, redrawn in Cummings Fig. 176.18) guides approach selection based on "
"tumor characteristics:"
))
story.append(sp(4))
story += img("approach_algorithm.png", w_cm=13,
caption_text="Fig. 176.18 — Algorithm for surgical approach to the anterior skull base (Naunheim et al., redrawn in Cummings Otolaryngology, Ch. 176)")
story.append(sp(6))
# ── SECTION 5: TRANSSPHENOIDAL ────────────────────────────────────────────────
story.append(PageBreak())
story.append(h1("5. Transsphenoidal Approach to the Anterior Skull Base"))
story.append(body(
"The transsphenoidal approach is the <b>central endonasal corridor</b> to the anterior skull base. "
"The sphenoid sinus serves as the focal point for multiple extended approaches: transsellar/parasellar, transclival, and petrous apical. "
"All transsphenoidal routes begin with a <b>large pedicled nasoseptal flap</b> based on the vascular pedicle of the "
"sphenopalatine foramen — the primary reconstruction tool at closure."
))
story.append(sp(6))
story.append(h2("5.1 Methods of Sphenoid Sinus Access"))
story.append(h3("A. Direct Transnasal Access"))
story.append(body(
"Performed through one nostril. Septoplasty performed first if nasal cavity is narrow. "
"Superior turbinate removed with through-cutting forceps; posterior middle turbinate also removed if access remains narrow. "
"Sphenoid ostium identified → opened with micro-Kerrison punch → enlarged inferiorly (avoiding the septal artery on the anterior wall). "
"Both sphenoid sinuses exposed: anterior wall, rostrum, and all intersinus septa resected with semicutting or diamond burs."
))
story.append(body("<b>Indications:</b> Lesions of the nasal cavity roof (without ethmoid involvement), nasopharyngeal lesions, isolated sphenoid sinus disease."))
story.append(sp(4))
story += img("kerrison_sphenoid.png", w_cm=10,
caption_text="Fig. 177.11 — Opening the sphenoid sinus anterior wall via Kerrison micropunch through the direct transnasal approach. [Cummings Otolaryngology, Ch. 177]")
story.append(sp(4))
story += img("endoscopic_sphenoid.png", w_cm=10,
caption_text="Fig. 177.12 — Endoscopic view of posterior sphenoid sinus wall showing ICA, optic-carotid recess (OCR), optic nerves (ON), planum sphenoidale (PS), sella, and clivus. [Cummings Otolaryngology, Ch. 177]")
story.append(sp(6))
story.append(h3("B. Transseptal Access"))
story.append(body(
"Provides <b>midline access</b> through the nasal septum — designed to avoid the lateral sphenoid wall, ICA, and optic nerve. "
"Submucoperichondrial/submucoperiosteal infiltration with ropivacaine 0.75% + epinephrine 1:100,000 (hydraulic dissection). "
"Vertical hemi-transfixion incision at caudal septal edge → septal flaps elevated as in septoplasty. "
"Osseocartilaginous junction disarticulated; posterior septal bone resected with Jansen-Middleton forceps. "
"Sphenoidotomy made with Kerrison punch enlarged with 5-mm diamond bur — large enough for simultaneous 4-mm endoscope + instrument."
))
story.append(body("<b>Indications:</b> Pituitary adenomas, sellar and parasellar lesions, clival lesions."))
story.append(sp(6))
story.append(h3("C. Transseptal-Transnasal (Binostril) Access"))
story.append(body(
"Described by Stamm et al. (2008). Enables <b>two-surgeon, four-hand</b> technique without septal perforation. "
"Middle turbinates compressed and outfractured laterally. Septal hemi-transfixion incision → nasoseptal flap harvested "
"on one side and stored in nasopharynx. Contralateral septal mucosa kept intact. "
"Creates wide bilateral working corridor through both nostrils simultaneously."
))
story.append(body("<b>Advantage:</b> Less nasal mucosal injury than bilateral direct transnasal approach; optimal for complex two-surgeon endoscopic resections."))
story.append(sp(6))
story.append(h3("D. Transnasal + Transethmoid Access"))
story.append(body(
"Combines nasal and ethmoid corridors. Used when disease involves both ethmoid and sphenoid sinuses, the ethmoid roof, or orbits."
))
story.append(sp(8))
story.append(h2("5.2 Transsellar and Parasellar Phase"))
story.append(body(
"After wide sphenoidotomy, key anatomic landmarks on the posterior sphenoid wall are identified before dural opening:"
))
for b in [
"ICA prominences (bilateral)",
"Optic nerve canal prominences (bilateral)",
"Optic-carotid recesses (OCR)",
"Planum sphenoidale (superiorly)",
"Clivus (inferiorly)",
"Floor of the sella turcica (centrally)",
]:
story.append(bullet(b))
story.append(sp(4))
story.append(h3("Steps for Pituitary Fossa Opening"))
pf_steps = [
("1", "All intersinus septa resected with strong through-cutting forceps"),
("2", "Mucoperiosteum over sellar floor displaced laterally and preserved for reconstruction"),
("3", "Wide sellar bone resection with diamond bur + Kerrison punch — from ICA to ICA (lateral) and from planum to clivus (superoinferiorly)"),
("4", "U-shaped dural incision after confirming locations of cavernous sinuses, intercavernous sinuses, and bilateral ICAs"),
("5", "Dura removed with attached tumor fragments (sent for histopathology)"),
("6", "Tumor resection begins laterally using 45° angled endoscope + curved suction; dissection is more important than curettage"),
("7", "Arachnoid (diaphragma sellae) = limit of superior/posterior dissection"),
]:
story.append(bullet(f"<b>Step {s[0]}:</b> {s[1]}" for s in [("", "")])
)
# Fix the step iteration
story = story[:-1] # remove last bad entry
for num, detail in pf_steps:
story.append(bullet(f"<b>Step {num}:</b> {detail}"))
story.append(sp(6))
story.append(h3("Hemostasis"))
story.append(body("Warm saline irrigation, Spongostan, Surgicel packing."))
story.append(sp(6))
story.append(h2("5.3 Closure and Reconstruction"))
recon_headers = ["CSF Leak Status", "Reconstruction Strategy"]
recon_rows = [
["No CSF leak", "Mucoperiosteum replaced; nasoseptal flap returned to original position"],
["Low-flow CSF leak", "Nasoseptal flap alone seals the defect"],
["Large defect / high-flow leak", "Triple-F technique: Fat + Fascia lata + nasoseptal Flap (multilayer). Spongostan + Gelfoam + antibiotic-soaked gauze. Rapid Rhino insufflate packing × 3 days"],
]
story.append(make_table2(recon_headers, recon_rows, [avail*0.28, avail*0.72]))
story.append(sp(10))
story.append(h2("5.4 Extended Transsphenoidal Modules"))
ext_headers = ["Extension", "Target", "Key Pathology"]
ext_rows = [
["Transclival", "Clivus, retroclival region, cavernous sinus, petrous apex", "Chordoma, clival meningioma, petrous apex cholesterol granuloma"],
["Transcribriform (unilateral)", "Olfactory groove (one side), ethmoid roof", "Esthesioneuroblastoma, sinonasal malignancy; preserves contralateral olfaction"],
["Transcribriform (bilateral)", "Full cribriform/olfactory groove + frontal sinus (Draf III required)", "Bilateral malignancy; limits: medial orbital wall, frontal sinus, sphenoid sinus"],
["Transtuberculum–Transplanum", "Planum sphenoidale, tuberculum sellae, suprasellar cistern", "Planum meningioma, craniopharyngioma, Rathke pouch cyst, optic nerve glioma, suprasellar adenoma"],
]
story.append(make_table2(ext_headers, ext_rows, [avail*0.22, avail*0.36, avail*0.42]))
story.append(sp(10))
# ── SECTION 6: SUMMARY TABLE ──────────────────────────────────────────────────
story.append(PageBreak())
story.append(h1("6. Summary: All Anterior Skull Base Approaches"))
sum_headers = ["Approach", "Access", "Best For", "Key Advantage"]
sum_rows = [
["Anterior craniofacial resection", "Bifrontal craniotomy + transfacial (lateral rhinotomy / midfacial degloving)", "SCC, esthesioneuroblastoma, adenocarcinoma with anterior fossa invasion", "Wide exposure; en bloc oncologic resection"],
["Supraorbital / Keyhole craniotomy", "Small anterolateral craniotomy (transciliary / transpalpebral)", "Anterior fossa, parasellar, interpeduncular cistern lesions", "Minimal brain retraction; cosmetic incision"],
["Craniofacial disassembly", "Facial osteotomies (Le Fort I/II, maxillary split) + craniotomy", "Very large or complex tumors", "Wide inferior exposure; reduces brain retraction"],
["EEA — Transfrontal", "Endonasal", "Mucocele, frontal osteoma, nasal dermoid, erosive disease", "No facial scar; avoids external incision"],
["EEA — Transcribriform", "Endonasal", "Olfactory groove meningioma, esthesioneuroblastoma", "No facial scar; minimal morbidity"],
["EEA — Transplanum / Transtuberculum", "Endonasal", "Planum meningioma, craniopharyngioma", "Suprasellar access without brain retraction"],
["Transsphenoidal — Transsellar / Parasellar", "Endonasal (transseptal, direct transnasal, or binostril)", "Pituitary adenoma, sellar/parasellar lesions", "Workhorse pituitary approach; minimal morbidity"],
["Transsphenoidal — Transclival", "Endonasal via sphenoid + clivus drilling", "Chordoma, clival meningioma, cholesterol granuloma", "Midline sterile corridor; replaces most transoral routes"],
["Transsphenoidal — Transcribriform (EEA)", "Endonasal via ethmoid + cribriform", "Sinonasal malignancy with intradural extension (unilateral: preserves olfaction)", "No facial incision; controlled dural resection possible"],
["Transtuberculum–Transplanum (EEA)", "Endonasal via sphenoid + planum drilling", "Planum meningioma, craniopharyngioma, Rathke cyst", "Direct suprasellar access without craniotomy"],
]
story.append(make_table2(sum_headers, sum_rows, [avail*0.20, avail*0.22, avail*0.30, avail*0.28]))
story.append(sp(10))
story.append(h2("Approach Selection by Target Region"))
sel_headers = ["Target Region", "Preferred Approach"]
sel_rows = [
["Sella / pituitary adenoma", "Transsphenoidal (transseptal or binostril)"],
["Parasellar / cavernous sinus", "Transsphenoidal-transsellar extended laterally"],
["Suprasellar (planum meningioma)", "Transtuberculum-transplanum EEA"],
["Olfactory groove (meningioma, esthesioneuroblastoma)", "Transcribriform EEA or ACR (if large/complex)"],
["Sinonasal malignancy + anterior fossa invasion (medial)", "EEA transcribriform ± craniotomy"],
["Sinonasal malignancy + skin / nasal bone involvement", "ACR (transfacial + bifrontal craniotomy)"],
["Clivus / petrous apex lesion", "Transclival / transphenoidal EEA"],
["Frontal sinus mucocele / osteoma", "Transfrontal EEA"],
["Deep anterior fossa / parasellar (no nasal involvement)", "Supraorbital keyhole craniotomy"],
["Very large tumors / orbital exenteration required", "ACR with craniofacial disassembly"],
]
story.append(make_table2(sel_headers, sel_rows, [avail*0.42, avail*0.58]))
story.append(sp(14))
# Footer source
story.append(hr())
story.append(Paragraph(
"<i>Source: Cummings Otolaryngology Head and Neck Surgery, 7th Edition — "
"Chapter 44 (pp. 873–973), Chapter 176 (pp. 3359–3390), Chapter 177 (pp. 3390–3394).</i>",
ParagraphStyle("footer", fontName="Helvetica-Oblique", fontSize=8.5, leading=12,
alignment=TA_CENTER, textColor=colors.HexColor("#666666"))
))
# ── Build PDF ─────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF written to: {OUTPUT}")
cd /home/daytona/workspace/anterior-skull-base && python generate_pdf.py 2>&1
~/anterior-skull-base/generate_pdf.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/anterior-skull-base/generate_pdf.py'
cd /home/daytona/workspace/anterior-skull-base && python generate_pdf.py 2>&1
~/anterior-skull-base/generate_pdf.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/anterior-skull-base/generate_pdf.py'
cd /home/daytona/workspace/anterior-skull-base && python generate_pdf.py 2>&1
~/anterior-skull-base/generate_pdf.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/anterior-skull-base/generate_pdf.py'
cd /home/daytona/workspace/anterior-skull-base && python generate_pdf.py 2>&1
Anterior Skull Base Approaches Cummings
PDF Document · PDF