Give me an elaborate discussion on anti glaucoma medications explaining in details the use, all the mechanisms of action in details , contraindications (ocular and systemic) , peak action , wash off period , dosage . Also fixed dose combination( how they work)

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

anti glaucoma medications peak action washout period fixed dose combinations 2024

Reading Web Page

https://eyesoneyecare.com/resources/heres-the-washout-period…

I now have comprehensive data from multiple authoritative sources. Let me compile the complete, elaborate response.

Anti-Glaucoma Medications: A Comprehensive Discussion

Glaucoma is characterized by progressive optic nerve damage with visual field loss, usually associated with elevated intraocular pressure (IOP). Normal IOP is 10-20 mmHg. All pharmacological treatment targets IOP reduction, either by decreasing aqueous humor production or increasing aqueous humor outflow (conventional trabecular or unconventional uveoscleral route).

Overview of Aqueous Humor Dynamics

Aqueous humor is produced by the ciliary body epithelium via a beta-receptor mediated cAMP-PKA pathway (ultrafiltration and active secretion). It drains primarily through:
  • Trabecular meshwork → Schlemm's canal (conventional pathway, ~80%)
  • Uveoscleral pathway (unconventional, ~20%)
Drugs either suppress production or enhance one or both outflow pathways.

CLASS 1: PROSTAGLANDIN ANALOGUES (PGAs)

Drugs: Latanoprost, Travoprost, Bimatoprost, Tafluprost, Latanoprostene bunod, Unoprostone
These are now the first-line agents for most forms of open-angle glaucoma due to once-daily dosing, potent IOP lowering (25-35%), and favorable systemic safety profile.

Mechanism of Action

PGF2α and its analogues are prodrugs (isopropyl ester form) that are hydrolyzed by corneal esterases to the free acid form after topical instillation. The free acid binds to FP receptors (prostaglandin F receptors), which are G-protein coupled receptors linked to the Gα11-PLC-IP3-Ca2+ signaling pathway. This pathway is active in ciliary muscle cells.
The IOP-lowering mechanism works primarily via increased uveoscleral outflow:
  1. Ciliary muscle relaxation/remodeling: FP receptor activation alters ciliary muscle tension, widening the spaces in the ciliary muscle bundles and facilitating uveoscleral outflow
  2. Matrix metalloproteinase (MMP) release: FP receptor activation upregulates MMP-1, MMP-3, and MMP-9, which digest extracellular matrix (collagen, fibronectin) in the ciliary muscle and trabecular meshwork, reducing resistance to outflow
  3. Trabecular meshwork effects: Some enhancement of conventional outflow through trabecular cell effects
  4. Latanoprostene bunod (Vyzulta) is unique - it has a nitric oxide (NO)-donating moiety attached to the latanoprost backbone. The NO is released locally and activates soluble guanylate cyclase → increased cGMP → relaxation of the trabecular meshwork cytoskeleton → enhanced conventional trabecular outflow, in addition to the latanoprost-mediated uveoscleral outflow. This dual mechanism makes it slightly more potent than standard latanoprost.

Dosage

DrugConcentrationDose
Latanoprost (Xalatan)0.005%1 drop once nightly (q.h.s.)
Travoprost (Travatan Z)0.004%1 drop once nightly
Bimatoprost (Lumigan)0.01% or 0.03%1 drop once nightly
Tafluprost (Zioptan)0.0015%1 drop once nightly (preservative-free)
Latanoprostene bunod (Vyzulta)0.024%1 drop once nightly
Unoprostone (Rescula)0.15%1 drop twice daily
Nocturnal dosing is preferred because uveoscleral outflow is highest overnight and corneal penetration is better with reduced tearing.

Onset and Peak Action

  • Onset: IOP begins to fall within 3-4 hours of first dose
  • Peak IOP reduction: 8-12 hours after instillation
  • Maximum therapeutic effect: Achieved after 3-6 weeks of continuous use (latanoprost and brimonidine may plateau at 6-8 weeks in some patients)

Washout Period

All prostaglandin analogues: 4-4.5 weeks
  • Latanoprost, travoprost, bimatoprost, tafluprost: 4.5 weeks
  • Unoprostone: 4 weeks
  • Latanoprostene bunod: 4.5 weeks

Contraindications

Ocular:
  • Active uveitis or intraocular inflammation (PGs can exacerbate or trigger uveitis)
  • Cystoid macular edema (CME) - can worsen or precipitate CME, especially in aphakic and pseudophakic eyes
  • Herpes simplex keratitis (relative)
Systemic:
  • Pregnancy (absolutely contraindicated - PGF2α is used to induce labor/abortion; may cause uterine contractions)
  • Women wishing to conceive
Side Effects (Ocular):
  • Iris hyperpigmentation (irreversible): Due to increased melanin synthesis in iris stromal melanocytes via FP receptor-cAMP pathway. Highest risk in hazel/green/mixed-colored eyes; rarely affects blue or dark brown eyes. Patients must be informed this is irreversible.
  • Periorbital/periocular skin darkening (reversible on stopping)
  • Hypertrichosis of eyelashes: Longer, thicker, darker lashes (Bimatoprost is FDA-approved as Latisse for this purpose)
  • Conjunctival hyperemia
  • Deepening of upper eyelid sulcus (prostaglandin-associated periorbitopathy - PAP)
  • Eyelash/vellus hair growth on periorbital skin
  • Drying of eyes, conjunctivitis

CLASS 2: BETA-ADRENERGIC RECEPTOR ANTAGONISTS (Beta-Blockers)

Drugs: Timolol, Levobunolol, Carteolol, Metipranolol (non-selective); Betaxolol (β1-selective)
Previously first-line; now second-line after PGAs.

Mechanism of Action

Beta receptors in the ciliary body epithelium and blood vessels are predominantly of the β2 subtype (75-90% of total). Normally, β-receptor activation → adenylyl cyclase → increased cAMP → protein kinase A (PKA) activation → stimulates active secretion of aqueous humor.
Beta-blockers blunt this pathway by competitive antagonism:
  1. Primary mechanism: Block β2 receptors on the ciliary body non-pigmented epithelium → reduced cAMP-PKA signaling → decreased active secretion of Na+, Cl-, HCO3- into the posterior chamber → decreased aqueous humor production by 20-30%
  2. Secondary hypothesis: Beta-blockers may decrease ocular blood flow, which reduces ultrafiltration (passive component of aqueous formation)
  • Timolol, levobunolol, carteolol, metipranolol: Non-selective (block β1 and β2)
  • Betaxolol: β1-selective - less efficacious (because the eye's receptors are mainly β2), but safer in asthma/COPD (avoids pulmonary β2 blockade)
  • Carteolol has intrinsic sympathomimetic activity (ISA), making it less likely to impair lipid profiles
Beta-blockers do not affect pupil size or accommodation (no miotic effect).

Dosage

DrugConcentrationDose
Timolol (Timoptic)0.25%, 0.5% solution1 drop twice daily; gel: once daily
Levobunolol (Betagan)0.25%, 0.5%1 drop once or twice daily
Betaxolol (Betoptic S)0.25% suspension1 drop twice daily
Carteolol1%1 drop twice daily
Metipranolol0.3%1 drop twice daily

Onset and Peak Action

  • Onset: IOP reduction begins within 30 minutes
  • Peak IOP reduction: 1-2 hours after instillation
  • Duration: 12-24 hours (permits once or twice daily dosing)

Washout Period

Beta-blockers: 4 weeks (one of the longest among single agents, reflecting residual β-receptor down-regulation and systemic effects that persist)

Contraindications

Ocular:
  • None absolute; use caution in corneal epithelial disease (reduced corneal sensitivity)
  • Contact lens wearers may have reduced tolerance due to effects on corneal sensation
Systemic (Absolute):
  • Asthma / reactive airway disease (non-selective agents cause bronchospasm via β2 blockade in bronchi; even topical drops are significantly absorbed via nasal mucosa, bypassing hepatic first-pass)
  • COPD (significant risk; betaxolol may be used with caution)
  • Second- or third-degree AV block / significant bradycardia / sick sinus syndrome
  • Decompensated / unstable congestive heart failure
Systemic (Relative):
  • Depression (CNS penetrant agents)
  • Myasthenia gravis (may worsen neuromuscular blockade)
  • Raynaud phenomenon
  • Insulin-dependent diabetes (masks hypoglycemia symptoms)
  • Reduced exercise tolerance, sexual dysfunction, hypotension
Important note on systemic absorption: Topical timolol is absorbed through the conjunctiva and nasal mucosa, bypassing hepatic first-pass metabolism. This produces therapeutic systemic levels capable of causing bronchospasm, bradycardia, and hypotension. Nasolacrimal occlusion (gentle pressure at the inner canthus for 1-2 minutes after instillation) significantly reduces systemic absorption.

CLASS 3: ALPHA-2 ADRENERGIC AGONISTS

Drugs: Brimonidine (Alphagan P), Apraclonidine (Iopidine)

Mechanism of Action

Both drugs are selective α2 adrenergic agonists.
Dual mechanism:
  1. Reduced aqueous humor production: Presynaptic α2 receptor activation on ciliary body → decreased cAMP → reduced active secretion of aqueous humor (similar effect to beta-blockers but through a different pathway)
  2. Enhanced uveoscleral outflow: α2 stimulation may enhance uveoscleral outflow, possibly via endogenous prostaglandin production. Some conventional (trabecular) outflow enhancement via α2 receptor signaling also occurs.
Brimonidine vs Apraclonidine:
  • Brimonidine: Highly lipophilic (good corneal penetration), more selective for α2 vs α1 receptors, crosses the blood-brain barrier (may cause CNS depression, especially in children)
  • Apraclonidine: Clonidine derivative, highly ionized at physiological pH → does not cross the blood-brain barrier → relatively free of CNS effects → but high rate of tachyphylaxis (up to 40-48% by 3 months) and allergic conjunctivitis
Brimonidine also has a neuroprotective role - α2 receptor activation has been associated with protection of retinal ganglion cells from apoptosis, making it valuable in glaucomatous neurodegeneration beyond just IOP lowering.

Dosage

DrugConcentrationDose
Brimonidine (Alphagan P)0.1%, 0.15%, 0.2%1 drop 2-3 times daily
Apraclonidine (Iopidine)0.5%, 1%1% used perioperatively; 0.5% t.i.d. for short-term use

Onset and Peak Action

  • Onset: 30-60 minutes
  • Peak IOP reduction: 2 hours after instillation
  • Duration: 8-12 hours (hence b.i.d. to t.i.d. dosing)

Washout Period

  • Brimonidine (Alphagan): 5 weeks
  • Apraclonidine (Iopidine): 5 weeks

Contraindications

Ocular:
  • Active uveitis (relative - alpha-agonists may mask inflammatory signs)
Systemic (Absolute):
  • Monoamine oxidase inhibitors (MAOIs): Risk of hypertensive crisis (MAOIs prevent metabolism of amines; α2 agonists at supraphysiological doses can release norepinephrine)
  • Tricyclic antidepressants: Reduce efficacy of brimonidine
  • Children under 2 years: Risk of cardiorespiratory depression, apnea, bradycardia, hypotension, hypothermia. Brimonidine penetrates the CNS and causes respiratory depression in neonates/infants. Relatively contraindicated under age 5.
Systemic (Relative):
  • Cardiovascular disease, cerebrovascular disease
  • Severe renal or hepatic impairment
  • Raynaud phenomenon (α2 agonist-mediated vasoconstriction can worsen)
  • Dry mouth, sedation (central effects of brimonidine)
  • Rebound hypertension if suddenly discontinued (like clonidine)
Side Effects:
  • Allergic blepharoconjunctivitis (especially apraclonidine - ~40% incidence; reason it is now used only short-term)
  • Follicular conjunctivitis
  • Upper eyelid retraction (from Muller muscle stimulation by α agonism)
  • Dry mouth, headache, fatigue, drowsiness (brimonidine)
  • Tachyphylaxis (apraclonidine - limits long-term use to 3 months)

CLASS 4: CARBONIC ANHYDRASE INHIBITORS (CAIs)

Drugs - Systemic: Acetazolamide, Methazolamide Drugs - Topical: Dorzolamide (Trusopt), Brinzolamide (Azopt)

Mechanism of Action

Carbonic anhydrase (CA), particularly isoenzyme CA-II, is expressed abundantly in the non-pigmented ciliary body epithelium. It catalyzes:
CO2 + H2O ⇌ H2CO3 ⇌ H+ + HCO3-
This reaction is the rate-limiting step for aqueous humor production. The generated HCO3- is actively transported into the posterior chamber, drawing Na+ and water with it (by osmosis), forming aqueous humor.
CAIs block CA-II → reduced HCO3- production → reduced Na+ and water transport → decreased aqueous humor production by 15-25%.
Systemic CAIs also block CA-IV at the apical surface of the non-pigmented epithelium.
  • Acetazolamide (Diamox): Most potent, used for acute IOP crises (IV 500 mg), also given orally (125-250 mg)
  • Methazolamide: Better CNS penetration, less potent CA inhibition, fewer GI side effects
  • Dorzolamide: 2% topical, achieves adequate CA-II inhibition at the ciliary body despite systemic absorption being much lower
  • Brinzolamide: 1% topical suspension, less burning/stinging than dorzolamide (due to higher pH formulation)

Dosage

DrugFormDose
Acetazolamide (Diamox)125, 250 mg tabs; 500 mg ER125-250 mg q.i.d.; ER 500 mg b.i.d.; IV 500 mg stat
Methazolamide25, 50 mg tabs25-50 mg b.i.d. to t.i.d.
Dorzolamide (Trusopt) 2%Solution1 drop t.i.d. (b.i.d. as adjunct)
Brinzolamide (Azopt) 1%Suspension1 drop t.i.d. (b.i.d. as adjunct)

Onset and Peak Action

Topical:
  • Onset: Within 30 minutes
  • Peak: ~2 hours
  • Duration: ~8-12 hours
Oral acetazolamide:
  • Onset: 1-2 hours (oral); immediate IV
  • Peak: 4-8 hours (oral); 15 minutes (IV)
  • Duration: 6-8 hours (regular) / 12-18 hours (ER)

Washout Period

  • Dorzolamide: 1 week
  • Brinzolamide: 1 week
  • Acetazolamide ER: 1 week

Contraindications

Ocular:
  • Fuchs corneal dystrophy and post-keratoplasty: Topical CAIs may impair corneal endothelial pump function (endothelial cells require CA activity for ionic transport), potentially causing corneal decompensation and edema. Use with caution.
  • Corneal endothelial disease of any cause
Systemic (Absolute):
  • Sulfonamide hypersensitivity: CAIs are sulfonamide derivatives. Severe allergic reactions including Stevens-Johnson syndrome, toxic epidermal necrolysis, and aplastic anemia are possible (rare but life-threatening with systemic agents)
  • Severe renal failure (acetazolamide): Drug accumulates; also patients cannot compensate for metabolic acidosis
  • Adrenal insufficiency (Addison disease): Risk of severe hypokalemia and acidosis
  • Hypokalemia / hyponatremia (predisposed patients)
  • First trimester of pregnancy (acetazolamide is teratogenic in animals)
Systemic (Relative - Topical):
  • Sulfa allergy: Topical CAIs should be avoided but are not absolutely contraindicated (systemic exposure much lower; discuss risk-benefit)
  • Sickle cell disease: Risk of metabolic acidosis can precipitate crisis
Side Effects - Systemic CAIs:
  • Paresthesias of hands, feet, face (very common - due to CA inhibition in peripheral nerves)
  • GI upset, anorexia, weight loss
  • Metabolic acidosis, hypokalemia
  • Kidney stones (uric acid and calcium phosphate - urine becomes alkaline)
  • Fatigue, malaise, depression
  • Aplastic anemia (rare but life-threatening - bone marrow suppression)
  • Steven-Johnson syndrome (rare)
Side Effects - Topical CAIs:
  • Burning and stinging (dorzolamide > brinzolamide)
  • Bitter/metallic taste (drug drains into nasopharynx)
  • Superficial punctate keratopathy
  • Systemic effects extremely rare from topical use; no reported cases of aplastic anemia

CLASS 5: CHOLINERGIC AGENTS (MIOTICS)

Drugs: Pilocarpine (direct acting); Echothiophate iodide (indirect - anticholinesterase)
These are among the oldest antiglaucoma drugs, now used mainly as adjuncts or when other agents fail or are contraindicated.

Mechanism of Action

Pilocarpine (muscarinic agonist, direct acting):
  • Acts on M3 muscarinic receptors on the ciliary muscle and iris sphincter
  • Ciliary muscle contraction → pulls on trabecular meshwork scleral spur → opens trabecular meshwork pores → increases conventional (trabecular) outflow
  • Iris sphincter contraction → miosis (which pulls the peripheral iris away from the trabecular meshwork → relieves pupillary block in angle-closure glaucoma)
  • Also used to break acute angle-closure attack by pulling iris away from the lens and angle
Echothiophate iodide (irreversible anticholinesterase):
  • Irreversibly inhibits acetylcholinesterase → accumulation of endogenous acetylcholine → prolonged activation of all muscarinic receptors → sustained miosis and ciliary muscle contraction → sustained trabecular outflow enhancement
  • Also used in accommodative esotropia (reduces accommodative effort)

Dosage

DrugConcentrationDose
Pilocarpine (Isopto Carpine)1%, 2%, 4%1 drop q.i.d. (4 times daily); start low (1-2%), titrate up
Echothiophate iodide0.03%-0.25%1 drop once or twice daily

Onset and Peak Action

  • Onset: Pilocarpine acts within 10-30 minutes
  • Peak IOP reduction: 1-2 hours
  • Duration: 4-8 hours (hence q.i.d. dosing)
  • Echothiophate: longer duration due to irreversible mechanism

Washout Period

  • Pilocarpine: 3 days (very short - reversible)
  • Echothiophate: Several weeks (irreversible inhibitor; requires new AChE synthesis)

Contraindications

Ocular:
  • Retinal holes / lattice degeneration: Miosis causes forward shift of vitreous and increased vitreoretinal traction → risk of retinal detachment. Contraindicated in patients with known retinal tears or high risk (aphakes, high myopes - relative contraindication)
  • Acute iritis/uveitis: Ciliary muscle spasm worsens pain; miosis causes posterior synechiae formation
  • Malignant glaucoma / pupillary block glaucoma (pilocarpine can worsen pupillary block in certain configurations)
  • Narrow angle without block (relative): Miosis may paradoxically worsen angle in some configurations
Systemic (Relative):
  • Patients under 40 years: Ciliary muscle spasm → accommodative spasm → induced myopia, headache, browache; commonly not tolerated
  • Bradycardia, asthma (systemic absorption may cause cholinergic effects)
  • Parkinson disease (relative - cholinergic stimulation)
Side Effects:
  • Miosis → reduced vision in dim light, especially in eyes with posterior subcapsular cataracts
  • Induced myopia (spasm of accommodation - more pronounced in young patients)
  • Brow ache / headache
  • Iris cysts (especially with echothiophate)
  • Risk of cataract formation (especially with echothiophate long-term)
  • Retinal detachment risk
  • Corneal toxicity
  • Echothiophate specific: Before succinylcholine anesthesia, MUST stop echothiophate 4-6 weeks in advance - it inhibits plasma pseudocholinesterase, which metabolizes succinylcholine → prolonged apnea (a classic exam question)

CLASS 6: RHO-KINASE (ROCK) INHIBITORS

Drug: Netarsudil (Rhopressa)
A newer class approved in 2017.

Mechanism of Action

Rho-kinase (ROCK) is an enzyme that promotes actin-myosin cytoskeletal contraction and increased stiffness in trabecular meshwork cells. This increases resistance to conventional outflow.
Netarsudil inhibits ROCK-1 and ROCK-2 → cytoskeletal relaxation of trabecular meshwork cells → reduces trabecular meshwork resistance → increases conventional (trabecular/Schlemm's canal) outflow.
Additionally, netarsudil:
  • Inhibits norepinephrine transporter (NET) → reduces sympathetic tone in the eye → decreases aqueous humor production
  • Reduces episcleral venous pressure → another novel outflow mechanism
This is particularly valuable because it is one of the few drugs that targets the trabecular pathway specifically, which is the primary dysfunctional pathway in glaucoma.

Dosage

DrugConcentrationDose
Netarsudil (Rhopressa)0.02%1 drop once nightly

Onset and Peak Action

  • Onset: Within hours
  • Peak effect: ~8 hours
  • Used once nightly

Washout Period

Netarsudil: 4 weeks

Contraindications and Side Effects

Ocular side effects (most common):
  • Conjunctival hyperemia (most common, affects up to 50% of patients) - limiting factor
  • Conjunctival hemorrhage (petechial/subconjunctival)
  • Cornea verticillata (whorl-like corneal deposits) - clinically insignificant, fully reversible on stopping; does not affect vision significantly
  • Corneal staining/edema
Systemic: Generally well tolerated; limited systemic absorption.

CLASS 7: OSMOTIC AGENTS

Drugs: Mannitol (IV), Glycerol/Glycerine (oral), Isosorbide (oral), Hypertonic saline
Used for acute IOP crises (acute angle-closure attack, pre-operative IOP reduction). Not for chronic use.

Mechanism of Action

These agents create an osmotic gradient between the blood and vitreous humor. They raise plasma osmolarity, drawing water out of the vitreous humor (and to a lesser extent aqueous) into the circulation → reduces vitreous volume → decreases IOP acutely.
They do NOT affect aqueous humor production or outflow directly.

Dosage and Route

DrugDoseRoute
Mannitol 20% (Osmitrol)1.5-2 g/kg over 30 minIV infusion
Glycerine1-2 g/kgOral (with ice, lemon to improve palatability)
Isosorbide1.5 g/kgOral (better for diabetics than glycerine)

Onset and Peak Action

  • Mannitol IV: Onset 30-60 min, peak 1-2 hours, duration 4-6 hours
  • Oral glycerine: Onset 30-60 min, slower onset due to oral absorption

Contraindications

Absolute:
  • Anuria / severe renal failure: Mannitol will not be excreted → dangerous volume overload and hypernatremia
  • Decompensated heart failure / pulmonary edema: Acute volume expansion from osmotic shift → cardiac overload
  • Intracranial hemorrhage: Osmotic agents first cause initial expansion then shrinkage; may worsen hemorrhage
  • Severe dehydration / hyponatremia (predisposes to serious electrolyte disturbance)
Relative:
  • Diabetics: Glycerine metabolizes to glucose → hyperglycemia; use isosorbide instead in diabetics
  • Elderly patients with marginal cardiac function
Side Effects:
  • Headache, nausea, vomiting
  • Electrolyte disturbances (hyponatremia, hyperkalemia)
  • Pulmonary edema (if overloaded)
  • Backache (mannitol)

CLASS 8: SYSTEMIC CARBONIC ANHYDRASE INHIBITORS (RECAP)

See Class 4 above. Acetazolamide 500 mg IV is the first-line agent in acute angle-closure crisis combined with topical agents, per Tintinalli's Emergency Medicine.

COMPREHENSIVE WASHOUT PERIOD TABLE

Drug ClassDrugWashout Period
Prostaglandin analoguesLatanoprost, Travoprost, Bimatoprost, Tafluprost, Latanoprostene bunod4.5 weeks
Unoprostone4 weeks
Beta-blockersTimolol, Levobunolol, Betaxolol, Carteolol, Metipranolol4 weeks
Alpha-2 agonistsBrimonidine, Apraclonidine5 weeks
Topical CAIsDorzolamide, Brinzolamide, Acetazolamide ER1 week
MioticsPilocarpine3 days
Rho-kinase inhibitorsNetarsudil4 weeks
Osmotic agentsMannitol1 week

FIXED-DOSE COMBINATIONS (FDCs)

FDCs combine two drugs from different classes in a single bottle, reducing dosing burden, improving compliance, avoiding washout effect between sequential drops, and often providing additive or synergistic IOP reduction greater than either agent alone.

Why FDCs Work Better Than Sequential Drops

When two drops are instilled sequentially, the second drop can wash out part of the first drop, reducing bioavailability of the first agent. FDCs eliminate this problem by delivering both agents simultaneously in a single instillation. Additionally, preservative load is halved, reducing ocular surface toxicity.

Major Fixed-Dose Combinations

1. Cosopt / Cosopt PF - Timolol 0.5% + Dorzolamide 2%

  • Mechanism: Beta-blocker reduces aqueous production via cAMP-PKA inhibition; CAI reduces aqueous production via CA-II inhibition. Additive effect on reducing aqueous production through two independent enzymatic pathways
  • Dose: 1 drop twice daily
  • IOP reduction: ~25-30%
  • Washout: 4 weeks (dominated by the beta-blocker)
  • Contraindications: Sum of both components - asthma, COPD, heart block; Fuchs dystrophy; sulfa allergy (relative)
  • Side effects: Burning/stinging, metallic taste, respiratory effects

2. Combigan - Brimonidine 0.2% + Timolol 0.5%

  • Mechanism: Both reduce aqueous production by different receptors (α2 and β2 respectively). Brimonidine also enhances uveoscleral outflow. Complementary dual suppression of aqueous humor formation
  • Dose: 1 drop twice daily
  • IOP reduction: ~25-30%, greater than either alone
  • Washout: 5 weeks (dominated by brimonidine)
  • Contraindications: Asthma, COPD, heart block; MAOIs; children under 5 years
  • Side effects: Hyperemia, allergic conjunctivitis, follicular conjunctivitis, fatigue/drowsiness, respiratory depression in neonates

3. Simbrinza - Brimonidine 0.2% + Brinzolamide 1%

  • Mechanism: α2 agonist reduces aqueous and increases uveoscleral outflow; CAI reduces aqueous via CA-II inhibition. Importantly, Simbrinza contains NO beta-blocker, making it the preferred FDC for patients who cannot tolerate beta-blockers (asthma, COPD, bradycardia)
  • Dose: 1 drop 3 times daily
  • IOP reduction: ~24-hour IOP control demonstrated
  • Washout: 5 weeks
  • Contraindications: MAOIs; children under 5; sulfa allergy (relative); Fuchs dystrophy (relative); renal failure
  • Side effects: Allergic blepharoconjunctivitis, drowsiness, dry mouth, metallic taste

4. DuoTrav - Timolol 0.5% + Travoprost 0.004%

  • Mechanism: PGA increases uveoscleral outflow via FP receptor-MMP pathway; beta-blocker reduces aqueous production. Complementary mechanisms (one increases outflow, other decreases inflow) = maximal IOP lowering
  • Dose: 1 drop once daily (evening)
  • IOP reduction: ~30-35% (among highest of FDCs)
  • Washout: 4.5 weeks
  • Contraindications: Asthma, COPD, heart block; pregnancy; active uveitis; CME

5. Xalacom - Timolol 0.5% + Latanoprost 0.005%

  • Mechanism: Same as DuoTrav (PGA + beta-blocker) - complementary mechanisms targeting both outflow increase and aqueous production decrease
  • Dose: 1 drop once daily (evening)
  • IOP reduction: ~30-35%
  • Washout: 4.5 weeks
  • Contraindications: Same as DuoTrav above

6. Rocklatan - Netarsudil 0.02% + Latanoprost 0.005%

  • Mechanism: One of the most mechanistically comprehensive FDCs available. Netarsudil enhances conventional trabecular outflow (ROCK inhibition + reduces episcleral venous pressure + reduces aqueous production via NET inhibition); Latanoprost enhances uveoscleral outflow (FP receptor/MMP pathway). Together they target all three outflow pathways simultaneously
  • Dose: 1 drop once nightly
  • IOP reduction: ~30-36% (slightly superior to either component alone and comparable to or better than other FDCs in many studies)
  • Washout: 4.5 weeks
  • Beta-blocker free - important advantage
  • Contraindications: Pregnancy; active uveitis; CME (from latanoprost component)
  • Side effects: Conjunctival hyperemia (most common, from netarsudil), cornea verticillata, conjunctival hemorrhage, iris pigmentation

Summary of FDC Selection

Patient ProfilePreferred FDC
Needs maximum IOP reduction, tolerates beta-blockerDuoTrav, Xalacom, or Rocklatan
Cannot tolerate beta-blocker (asthma/COPD/bradycardia)Simbrinza or Rocklatan
Needs t.i.d. dosing for better 24-hr coverageSimbrinza
On PGA + CAI, want to simplifyCosopt + separate PGA or Simbrinza
Pilocarpine intolerant but needs strong IOP controlRocklatan

STEP-WISE APPROACH TO GLAUCOMA PHARMACOTHERAPY

  1. First-line: Prostaglandin analogue (once nightly; most potent, best systemic safety)
  2. Add-on or alternative first-line: Beta-blocker (if PGA contraindicated)
  3. Second add-on: Alpha-2 agonist (brimonidine) or topical CAI (dorzolamide/brinzolamide) - or FDC of two of these
  4. Third add-on: ROCK inhibitor (netarsudil)
  5. Adjunct for specific situations: Pilocarpine (angle-closure, plateau iris syndrome)
  6. Acute IOP crisis: IV acetazolamide + topical timolol + topical apraclonidine/brimonidine; if IOP persists → IV mannitol

QUICK REFERENCE SUMMARY TABLE

ClassDrugsMechanismDosePeak ActionWashoutKey Contraindication
Prostaglandin analoguesLatanoprost, Travoprost, Bimatoprost, Tafluprost↑ Uveoscleral outflow (FP receptor, MMP activation)Once nightly8-12 hrs4-4.5 wksPregnancy, uveitis, CME
Beta-blockersTimolol, Levobunolol, Betaxolol↓ Aqueous production (β2 blockade, ↓cAMP)Once-twice daily1-2 hrs4 wksAsthma, COPD, heart block
Alpha-2 agonistsBrimonidine, Apraclonidine↓ Aqueous production + ↑ uveoscleral outflow2-3x daily2 hrs5 wksMAOIs, infants
Topical CAIsDorzolamide, Brinzolamide↓ Aqueous production (CA-II inhibition, ↓HCO3-)2-3x daily2 hrs1 wkFuchs dystrophy, sulfa allergy (relative)
Systemic CAIsAcetazolamide, MethazolamideSame as topical, more potentVariesOral: 4-8 hrs; IV: 15 min1 wkRenal failure, sulfa allergy
MioticsPilocarpine, Echothiophate↑ Conventional outflow (ciliary muscle contraction on trabecular spur)q.i.d.1-2 hrs3 daysRetinal holes, age <40, uveitis
ROCK inhibitorsNetarsudil↑ Conventional outflow (cytoskeletal relaxation), ↓ episcleral venous pressure, ↓ aqueous productionOnce nightly~8 hrs4 wksOcular surface disease (relative)
Osmotic agentsMannitol, Glycerine↓ Vitreous volume (osmotic gradient)Acute/PRN30-60 min1 wkAnuria, CHF, severe dehydration

Sources:

Make a pdf now of the above

Reading File
Running Command

ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "workspace ready"

Running Command

mkdir -p /tmp/workspace/antiglaucoma-pdf

Writing File

~/antiglaucoma-pdf/build_pdf.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table,
                                 TableStyle, HRFlowable, PageBreak, KeepTogether)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus.flowables import HRFlowable

OUTPUT = "/tmp/workspace/antiglaucoma-pdf/Anti_Glaucoma_Medications.pdf"

doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    rightMargin=2*cm,
    leftMargin=2*cm,
    topMargin=2.5*cm,
    bottomMargin=2*cm,
    title="Anti-Glaucoma Medications: A Comprehensive Discussion",
    author="Orris Medical Reference",
)

W, H = A4

# ── Colour palette ──────────────────────────────────────────────────────────
DARK_BLUE   = colors.HexColor("#1a3a5c")
MID_BLUE    = colors.HexColor("#2c6fad")
LIGHT_BLUE  = colors.HexColor("#dce8f5")
ACCENT      = colors.HexColor("#e8731a")
LIGHT_GREY  = colors.HexColor("#f5f5f5")
MID_GREY    = colors.HexColor("#cccccc")
WHITE       = colors.white
TEXT_BLACK  = colors.HexColor("#1a1a1a")

# ── Styles ──────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()

title_style = ParagraphStyle("DocTitle",
    fontSize=20, fontName="Helvetica-Bold",
    textColor=WHITE, alignment=TA_CENTER,
    spaceAfter=4, spaceBefore=0, leading=26)

subtitle_style = ParagraphStyle("Subtitle",
    fontSize=11, fontName="Helvetica",
    textColor=colors.HexColor("#b0cce8"), alignment=TA_CENTER,
    spaceAfter=2, spaceBefore=0, leading=16)

h1_style = ParagraphStyle("H1",
    fontSize=14, fontName="Helvetica-Bold",
    textColor=WHITE, alignment=TA_LEFT,
    spaceBefore=14, spaceAfter=4, leading=18,
    leftIndent=0, backColor=DARK_BLUE,
    borderPad=6)

h2_style = ParagraphStyle("H2",
    fontSize=12, fontName="Helvetica-Bold",
    textColor=DARK_BLUE, alignment=TA_LEFT,
    spaceBefore=10, spaceAfter=3, leading=16)

h3_style = ParagraphStyle("H3",
    fontSize=10.5, fontName="Helvetica-Bold",
    textColor=MID_BLUE, alignment=TA_LEFT,
    spaceBefore=8, spaceAfter=2, leading=14)

body_style = ParagraphStyle("Body",
    fontSize=9.5, fontName="Helvetica",
    textColor=TEXT_BLACK, alignment=TA_JUSTIFY,
    spaceBefore=2, spaceAfter=2, leading=14, leftIndent=0)

bullet_style = ParagraphStyle("Bullet",
    fontSize=9.5, fontName="Helvetica",
    textColor=TEXT_BLACK, alignment=TA_LEFT,
    spaceBefore=1, spaceAfter=1, leading=13,
    leftIndent=12, bulletIndent=0)

note_style = ParagraphStyle("Note",
    fontSize=9, fontName="Helvetica-Oblique",
    textColor=colors.HexColor("#555555"), alignment=TA_LEFT,
    spaceBefore=2, spaceAfter=2, leading=13,
    leftIndent=8, borderPad=4)

bold_body = ParagraphStyle("BoldBody",
    fontSize=9.5, fontName="Helvetica-Bold",
    textColor=TEXT_BLACK, spaceAfter=2, spaceBefore=2, leading=14)

# ── Helper functions ─────────────────────────────────────────────────────────
def H1(text):
    return [Spacer(1, 4*mm),
            Table([[Paragraph(text, title_style)]],
                  colWidths=[W - 4*cm],
                  style=TableStyle([
                      ("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
                      ("ROUNDEDCORNERS", [4]),
                      ("LEFTPADDING", (0,0), (-1,-1), 10),
                      ("RIGHTPADDING", (0,0), (-1,-1), 10),
                      ("TOPPADDING", (0,0), (-1,-1), 7),
                      ("BOTTOMPADDING", (0,0), (-1,-1), 7),
                  ])),
            Spacer(1, 2*mm)]

def H2(text):
    return [Spacer(1, 3*mm),
            Paragraph(text, h2_style),
            HRFlowable(width="100%", thickness=1.5, color=MID_BLUE, spaceAfter=2)]

def H3(text):
    return [Paragraph(text, h3_style)]

def P(text):
    return [Paragraph(text, body_style)]

def B(items):
    """Bullet list from a list of strings."""
    out = []
    for item in items:
        out.append(Paragraph(f"• {item}", bullet_style))
    return out

def NOTE(text):
    return [Table([[Paragraph(f"<b>Note:</b> {text}", note_style)]],
                  colWidths=[W - 4*cm],
                  style=TableStyle([
                      ("BACKGROUND", (0,0), (-1,-1), LIGHT_BLUE),
                      ("LEFTPADDING", (0,0), (-1,-1), 8),
                      ("RIGHTPADDING", (0,0), (-1,-1), 8),
                      ("TOPPADDING", (0,0), (-1,-1), 5),
                      ("BOTTOMPADDING", (0,0), (-1,-1), 5),
                  ])),
            Spacer(1, 2*mm)]

def make_table(header, rows, col_widths=None):
    """Create a styled table."""
    data = [[Paragraph(str(c), ParagraphStyle("TH", fontSize=9, fontName="Helvetica-Bold",
                                               textColor=WHITE, leading=12))
             for c in header]]
    for row in rows:
        data.append([Paragraph(str(c), ParagraphStyle("TD", fontSize=8.5, fontName="Helvetica",
                                                        textColor=TEXT_BLACK, leading=11))
                     for c in row])
    available = W - 4*cm
    if col_widths is None:
        n = len(header)
        col_widths = [available / n] * n

    t = Table(data, colWidths=col_widths, repeatRows=1)
    t.setStyle(TableStyle([
        ("BACKGROUND",  (0,0), (-1,0),  DARK_BLUE),
        ("TEXTCOLOR",   (0,0), (-1,0),  WHITE),
        ("ALIGN",       (0,0), (-1,-1), "LEFT"),
        ("VALIGN",      (0,0), (-1,-1), "TOP"),
        ("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, LIGHT_GREY]),
        ("GRID",        (0,0), (-1,-1), 0.4, MID_GREY),
        ("LEFTPADDING", (0,0), (-1,-1), 5),
        ("RIGHTPADDING",(0,0), (-1,-1), 5),
        ("TOPPADDING",  (0,0), (-1,-1), 4),
        ("BOTTOMPADDING",(0,0),(-1,-1), 4),
    ]))
    return [t, Spacer(1, 3*mm)]

# ── Cover banner ─────────────────────────────────────────────────────────────
def cover_banner():
    banner_data = [[
        Paragraph("Anti-Glaucoma Medications", title_style),
        "",
    ],[
        Paragraph("A Comprehensive Discussion", subtitle_style),
        "",
    ],[
        Paragraph("Mechanisms · Dosage · Contraindications · Peak Action · Washout · Fixed-Dose Combinations",
                  subtitle_style),
        "",
    ]]
    t = Table(banner_data, colWidths=[W - 4*cm, 0])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
        ("SPAN",       (0,0), (-1,0)),
        ("SPAN",       (0,1), (-1,1)),
        ("SPAN",       (0,2), (-1,2)),
        ("LEFTPADDING",(0,0), (-1,-1), 16),
        ("RIGHTPADDING",(0,0),(-1,-1), 16),
        ("TOPPADDING", (0,0), (0,0), 20),
        ("BOTTOMPADDING",(0,2),(-1,2), 20),
        ("TOPPADDING", (0,1), (0,1), 4),
        ("TOPPADDING", (0,2), (0,2), 4),
    ]))
    return [t, Spacer(1, 6*mm)]

# ────────────────────────────────────────────────────────────────────────────
# BUILD CONTENT
# ────────────────────────────────────────────────────────────────────────────
story = []

# COVER
story += cover_banner()

# INTRODUCTION
story += H2("Introduction & Aqueous Humor Dynamics")
story += P("Glaucoma is characterised by progressive optic nerve damage with visual field loss, "
           "usually associated with elevated intraocular pressure (IOP). Normal IOP is 10-20 mmHg. "
           "All pharmacological treatment targets IOP reduction, either by <b>decreasing aqueous humor "
           "production</b> or <b>increasing aqueous humor outflow</b>.")
story += P("Aqueous humor is produced by the ciliary body epithelium via a beta-receptor mediated "
           "cAMP-PKA pathway (ultrafiltration and active secretion). It drains primarily through:")
story += B([
    "Trabecular meshwork → Schlemm's canal (conventional pathway, ~80%)",
    "Uveoscleral pathway (unconventional, ~20%)",
])
story += P("Drugs either suppress production or enhance one or both outflow pathways.")

story.append(Spacer(1, 4*mm))

# ═══════════════════════════════════════════════════════════════
# CLASS 1 – PROSTAGLANDIN ANALOGUES
# ═══════════════════════════════════════════════════════════════
story += H1("CLASS 1: PROSTAGLANDIN ANALOGUES (PGAs)")
story += P("<b>Drugs:</b> Latanoprost, Travoprost, Bimatoprost, Tafluprost, Latanoprostene bunod, Unoprostone")
story += P("These are now the <b>first-line agents</b> for most forms of open-angle glaucoma due to "
           "once-daily dosing, potent IOP lowering (25-35%), and favourable systemic safety profile.")

story += H2("Mechanism of Action")
story += P("PGF2α and its analogues are prodrugs (isopropyl ester form) hydrolysed by corneal esterases "
           "to the free acid form after topical instillation. The free acid binds to <b>FP receptors</b> "
           "(prostaglandin F receptors), G-protein coupled receptors linked to the "
           "<b>Gα11-PLC-IP3-Ca²⁺</b> signalling pathway active in ciliary muscle cells.")
story += P("IOP-lowering works primarily via <b>increased uveoscleral outflow</b>:")
story += B([
    "<b>Ciliary muscle remodelling:</b> FP receptor activation alters ciliary muscle tension, "
    "widening spaces in the ciliary muscle bundles to facilitate uveoscleral outflow.",
    "<b>MMP release:</b> FP receptor activation upregulates MMP-1, MMP-3, and MMP-9, which digest "
    "extracellular matrix (collagen, fibronectin) in the ciliary muscle and trabecular meshwork, "
    "reducing resistance to outflow.",
    "<b>Trabecular meshwork effects:</b> Some enhancement of conventional outflow.",
    "<b>Latanoprostene bunod (Vyzulta):</b> Has a nitric oxide (NO)-donating moiety. Released NO "
    "activates soluble guanylate cyclase → increased cGMP → relaxation of trabecular meshwork "
    "cytoskeleton → enhanced conventional trabecular outflow IN ADDITION to the latanoprost-mediated "
    "uveoscleral effect. This dual mechanism makes it slightly more potent than standard latanoprost.",
])

story += H2("Dosage")
story += make_table(
    ["Drug (Brand)", "Concentration", "Frequency"],
    [
        ["Latanoprost (Xalatan)", "0.005%", "1 drop once nightly (q.h.s.)"],
        ["Travoprost (Travatan Z)", "0.004%", "1 drop once nightly"],
        ["Bimatoprost (Lumigan)", "0.01% or 0.03%", "1 drop once nightly"],
        ["Tafluprost (Zioptan)", "0.0015%", "1 drop once nightly (preservative-free)"],
        ["Latanoprostene bunod (Vyzulta)", "0.024%", "1 drop once nightly"],
        ["Unoprostone (Rescula)", "0.15%", "1 drop twice daily"],
    ],
    col_widths=[7*cm, 4*cm, 6*cm]
)
story += NOTE("Nocturnal dosing is preferred because uveoscleral outflow is highest overnight and "
              "corneal penetration is better with reduced tearing.")

story += H2("Onset and Peak Action")
story += B([
    "<b>Onset:</b> IOP begins to fall within 3-4 hours of first dose",
    "<b>Peak IOP reduction:</b> 8-12 hours after instillation",
    "<b>Maximum therapeutic effect:</b> After 3-6 weeks of continuous use (may plateau at 6-8 weeks)",
])

story += H2("Washout Period")
story += B([
    "Latanoprost, Travoprost, Bimatoprost, Tafluprost, Latanoprostene bunod: <b>4.5 weeks</b>",
    "Unoprostone: <b>4 weeks</b>",
])

story += H2("Contraindications")
story += H3("Ocular Contraindications")
story += B([
    "Active uveitis or intraocular inflammation (PGs can exacerbate or trigger uveitis)",
    "Cystoid macular edema (CME) — especially in aphakic/pseudophakic eyes",
    "Herpes simplex keratitis (relative)",
])
story += H3("Systemic Contraindications")
story += B([
    "<b>Pregnancy</b> (absolutely contraindicated — PGF2α is used to induce labour/abortion; may cause "
    "uterine contractions and abortion)",
    "Women wishing to conceive",
])
story += H3("Side Effects")
story += B([
    "<b>Iris hyperpigmentation</b> (irreversible): Increased melanin synthesis in iris stromal melanocytes "
    "via FP receptor. Highest risk in hazel/green/mixed-colour eyes. Patients must be informed.",
    "Periorbital skin darkening (reversible on stopping)",
    "Hypertrichosis of eyelashes: Longer, thicker, darker lashes",
    "Conjunctival hyperemia",
    "Deepening of upper eyelid sulcus (prostaglandin-associated periorbitopathy, PAP)",
    "Drying of eyes, conjunctivitis",
])

story.append(PageBreak())

# ═══════════════════════════════════════════════════════════════
# CLASS 2 – BETA-BLOCKERS
# ═══════════════════════════════════════════════════════════════
story += H1("CLASS 2: BETA-ADRENERGIC RECEPTOR ANTAGONISTS (Beta-Blockers)")
story += P("<b>Non-selective:</b> Timolol, Levobunolol, Carteolol, Metipranolol &nbsp;&nbsp; "
           "<b>β1-selective:</b> Betaxolol")
story += P("Previously first-line; now second-line after PGAs. Still widely used as monotherapy "
           "or adjuncts.")

story += H2("Mechanism of Action")
story += P("Beta receptors in the <b>ciliary body epithelium</b> are predominantly <b>β2 subtype</b> "
           "(75-90% of total). Normally, β-receptor activation → adenylyl cyclase → increased cAMP → "
           "PKA activation → stimulates active secretion of aqueous humor.")
story += P("Beta-blockers blunt this pathway:")
story += B([
    "<b>Primary:</b> Block β2 receptors on ciliary body non-pigmented epithelium → reduced cAMP-PKA "
    "signalling → decreased active secretion of Na⁺, Cl⁻, HCO₃⁻ → decreased aqueous humor "
    "production by 20-30%.",
    "<b>Secondary hypothesis:</b> Beta-blockers decrease ocular blood flow → reduced ultrafiltration "
    "(passive component of aqueous formation).",
    "<b>Betaxolol</b> (β1-selective): Less efficacious (eye's receptors are mainly β2), but safer "
    "in asthma/COPD (avoids pulmonary β2 blockade).",
    "<b>Carteolol</b> has intrinsic sympathomimetic activity (ISA) — less likely to impair lipid profiles.",
    "Beta-blockers do NOT affect pupil size or accommodation.",
])

story += H2("Dosage")
story += make_table(
    ["Drug (Brand)", "Concentration", "Frequency"],
    [
        ["Timolol (Timoptic)", "0.25%, 0.5% solution; gel", "1 drop b.i.d.; gel once daily"],
        ["Levobunolol (Betagan)", "0.25%, 0.5%", "1 drop once or b.i.d."],
        ["Betaxolol (Betoptic S)", "0.25% suspension", "1 drop b.i.d."],
        ["Carteolol", "1%", "1 drop b.i.d."],
        ["Metipranolol", "0.3%", "1 drop b.i.d."],
    ],
    col_widths=[7*cm, 4*cm, 6*cm]
)

story += H2("Onset and Peak Action")
story += B([
    "<b>Onset:</b> IOP reduction begins within 30 minutes",
    "<b>Peak IOP reduction:</b> 1-2 hours after instillation",
    "<b>Duration:</b> 12-24 hours",
])

story += H2("Washout Period")
story += B(["All beta-blockers: <b>4 weeks</b> (reflects residual β-receptor down-regulation and "
            "persistent systemic effects)"])

story += H2("Contraindications")
story += H3("Systemic (Absolute)")
story += B([
    "<b>Asthma / reactive airway disease</b> — non-selective agents cause bronchospasm via β2 blockade",
    "<b>COPD</b> — significant risk; betaxolol may be used with caution",
    "<b>Second- or third-degree AV block, significant bradycardia, sick sinus syndrome</b>",
    "<b>Decompensated/unstable congestive heart failure</b>",
])
story += H3("Systemic (Relative)")
story += B([
    "Depression (CNS-penetrant agents)",
    "Myasthenia gravis",
    "Raynaud phenomenon",
    "Insulin-dependent diabetes (masks hypoglycaemia symptoms)",
    "Reduced exercise tolerance, sexual dysfunction, hypotension",
])
story += NOTE("Topical timolol is absorbed via nasal mucosa, bypassing hepatic first-pass metabolism, "
              "producing therapeutic systemic levels. Nasolacrimal occlusion after instillation "
              "significantly reduces systemic absorption.")

story.append(PageBreak())

# ═══════════════════════════════════════════════════════════════
# CLASS 3 – ALPHA-2 AGONISTS
# ═══════════════════════════════════════════════════════════════
story += H1("CLASS 3: ALPHA-2 ADRENERGIC AGONISTS")
story += P("<b>Drugs:</b> Brimonidine (Alphagan P), Apraclonidine (Iopidine)")

story += H2("Mechanism of Action")
story += P("Both drugs are <b>selective α2 adrenergic agonists</b> with a dual mechanism:")
story += B([
    "<b>Reduced aqueous humor production:</b> Presynaptic α2 receptor activation on ciliary body → "
    "decreased cAMP → reduced active secretion of aqueous humor.",
    "<b>Enhanced uveoscleral outflow:</b> α2 stimulation may enhance uveoscleral outflow, possibly via "
    "endogenous prostaglandin production; some conventional outflow enhancement also occurs.",
    "<b>Brimonidine:</b> Highly lipophilic (excellent corneal penetration), more selective for α2 vs α1, "
    "crosses the blood-brain barrier, may cause CNS depression especially in children.",
    "<b>Apraclonidine:</b> Highly ionised at physiological pH → does NOT cross BBB → fewer CNS effects, "
    "but high rate of tachyphylaxis (~40-48% by 3 months) and allergic conjunctivitis.",
    "<b>Neuroprotection:</b> Brimonidine's α2 receptor activation has been associated with protection of "
    "retinal ganglion cells from apoptosis — potential benefit beyond IOP lowering.",
])

story += H2("Dosage")
story += make_table(
    ["Drug (Brand)", "Concentration", "Frequency"],
    [
        ["Brimonidine (Alphagan P)", "0.1%, 0.15%, 0.2%", "1 drop b.i.d. to t.i.d."],
        ["Apraclonidine (Iopidine)", "0.5%, 1%", "1% perioperatively; 0.5% t.i.d. (short-term, max 3 months)"],
    ],
    col_widths=[6.5*cm, 4*cm, 6.5*cm]
)

story += H2("Onset and Peak Action")
story += B([
    "<b>Onset:</b> 30-60 minutes",
    "<b>Peak IOP reduction:</b> ~2 hours after instillation",
    "<b>Duration:</b> 8-12 hours (b.i.d. to t.i.d. dosing required)",
])

story += H2("Washout Period")
story += B(["Brimonidine and Apraclonidine: <b>5 weeks</b> (longest of all individual agents)"])

story += H2("Contraindications")
story += H3("Systemic (Absolute)")
story += B([
    "<b>MAOIs (monoamine oxidase inhibitors):</b> Risk of hypertensive crisis",
    "<b>Tricyclic antidepressants:</b> Reduce efficacy of brimonidine",
    "<b>Children under 2 years (absolute), under 5 years (relative):</b> Risk of apnoea, bradycardia, "
    "CNS and cardiorespiratory depression",
])
story += H3("Side Effects")
story += B([
    "Allergic blepharoconjunctivitis (~40% with apraclonidine — main reason it is limited to short-term use)",
    "Follicular conjunctivitis",
    "Upper eyelid retraction (Müller muscle stimulation by α agonism)",
    "Dry mouth, headache, fatigue, drowsiness (brimonidine CNS effects)",
    "Tachyphylaxis (apraclonidine — limits to 3 months use)",
    "Rebound hypertension on abrupt discontinuation",
])

story.append(PageBreak())

# ═══════════════════════════════════════════════════════════════
# CLASS 4 – CAIs
# ═══════════════════════════════════════════════════════════════
story += H1("CLASS 4: CARBONIC ANHYDRASE INHIBITORS (CAIs)")
story += P("<b>Systemic:</b> Acetazolamide, Methazolamide &nbsp;&nbsp; "
           "<b>Topical:</b> Dorzolamide (Trusopt), Brinzolamide (Azopt)")

story += H2("Mechanism of Action")
story += P("Carbonic anhydrase isoenzyme <b>CA-II</b> is expressed abundantly in the "
           "<b>non-pigmented ciliary body epithelium</b>. It catalyses:")
story += P("<b>CO₂ + H₂O ⇌ H₂CO₃ ⇌ H⁺ + HCO₃⁻</b>")
story += P("Generated HCO₃⁻ is actively transported into the posterior chamber, drawing Na⁺ and "
           "water with it to form aqueous humor. <b>CAIs block CA-II → reduced HCO₃⁻ production → "
           "decreased aqueous humor production by 15-25%.</b>")
story += B([
    "<b>Acetazolamide:</b> Most potent; used for acute IOP crises (IV 500 mg) or chronically oral",
    "<b>Methazolamide:</b> Better CNS penetration, less potent, fewer GI side effects",
    "<b>Dorzolamide 2%:</b> Topical; achieves adequate CA-II inhibition at ciliary body",
    "<b>Brinzolamide 1%:</b> Topical suspension; less burning/stinging than dorzolamide (higher pH formulation)",
])

story += H2("Dosage")
story += make_table(
    ["Drug", "Form", "Dose"],
    [
        ["Acetazolamide (Diamox)", "125, 250 mg tabs; 500 mg ER; IV", "125-250 mg q.i.d.; ER 500 mg b.i.d.; IV 500 mg stat"],
        ["Methazolamide", "25, 50 mg tabs", "25-50 mg b.i.d. to t.i.d."],
        ["Dorzolamide (Trusopt) 2%", "Solution", "1 drop t.i.d. (b.i.d. as adjunct)"],
        ["Brinzolamide (Azopt) 1%", "Suspension", "1 drop t.i.d. (b.i.d. as adjunct)"],
    ],
    col_widths=[6*cm, 4.5*cm, 6.5*cm]
)

story += H2("Onset and Peak Action")
story += H3("Topical")
story += B(["Onset: 30 min | Peak: ~2 hours | Duration: 8-12 hours"])
story += H3("Oral Acetazolamide")
story += B(["Onset: 1-2 hours oral, immediate IV | Peak: 4-8 hours oral, 15 min IV | Duration: 6-8 hours (regular), 12-18 hours (ER)"])

story += H2("Washout Period")
story += B([
    "Dorzolamide, Brinzolamide: <b>1 week</b>",
    "Acetazolamide ER: <b>1 week</b>",
])

story += H2("Contraindications")
story += H3("Ocular")
story += B([
    "<b>Fuchs corneal dystrophy</b> and post-keratoplasty: Topical CAIs may impair corneal endothelial "
    "pump function → risk of corneal decompensation and oedema",
    "Any corneal endothelial disease",
])
story += H3("Systemic (Absolute)")
story += B([
    "<b>Sulfonamide hypersensitivity:</b> CAIs are sulfonamide derivatives — risk of Stevens-Johnson syndrome, "
    "toxic epidermal necrolysis, aplastic anaemia",
    "<b>Severe renal failure</b> (drug accumulates; metabolic acidosis cannot be compensated)",
    "<b>Adrenal insufficiency (Addison disease):</b> Risk of severe hypokalaemia and acidosis",
    "<b>First trimester of pregnancy</b> (teratogenic in animals)",
])
story += H3("Side Effects — Systemic CAIs")
story += B([
    "Paresthesias of hands, feet, face (very common — CA inhibition in peripheral nerves)",
    "GI upset, anorexia, weight loss",
    "Metabolic acidosis, hypokalaemia",
    "Kidney stones (alkaline urine → uric acid and calcium phosphate stones)",
    "Aplastic anaemia (rare but life-threatening)",
    "Stevens-Johnson syndrome (rare)",
])
story += H3("Side Effects — Topical CAIs")
story += B([
    "Burning and stinging (dorzolamide > brinzolamide)",
    "Bitter/metallic taste (drug drains into nasopharynx)",
    "Superficial punctate keratopathy",
    "Systemic effects extremely rare; no reported cases of aplastic anaemia from topical use",
])

story.append(PageBreak())

# ═══════════════════════════════════════════════════════════════
# CLASS 5 – MIOTICS
# ═══════════════════════════════════════════════════════════════
story += H1("CLASS 5: CHOLINERGIC AGENTS (MIOTICS)")
story += P("<b>Direct acting:</b> Pilocarpine &nbsp;&nbsp; <b>Indirect (anticholinesterase):</b> Echothiophate iodide")
story += P("Among the oldest antiglaucoma drugs; now used mainly as adjuncts, in angle-closure glaucoma, "
           "or when other agents are contraindicated.")

story += H2("Mechanism of Action")
story += H3("Pilocarpine (muscarinic agonist, direct acting)")
story += B([
    "Acts on <b>M3 muscarinic receptors</b> on the ciliary muscle and iris sphincter",
    "Ciliary muscle contraction → pulls on trabecular meshwork scleral spur → opens trabecular meshwork "
    "pores → <b>increases conventional (trabecular) outflow</b>",
    "Iris sphincter contraction → <b>miosis</b> — pulls peripheral iris away from the angle → relieves "
    "pupillary block in angle-closure glaucoma",
])
story += H3("Echothiophate iodide (irreversible anticholinesterase)")
story += B([
    "Irreversibly inhibits acetylcholinesterase → accumulation of endogenous ACh → prolonged activation "
    "of muscarinic receptors → sustained miosis and ciliary muscle contraction → sustained trabecular "
    "outflow enhancement",
    "<b>CRITICAL:</b> Must stop echothiophate 4-6 weeks before succinylcholine anaesthesia — it inhibits "
    "plasma pseudocholinesterase → prolonged apnoea (classic exam question!)",
])

story += H2("Dosage")
story += make_table(
    ["Drug", "Concentration", "Frequency"],
    [
        ["Pilocarpine (Isopto Carpine)", "1%, 2%, 4%", "1 drop q.i.d. (start 1-2%, titrate up)"],
        ["Echothiophate iodide", "0.03%-0.25%", "1 drop once or twice daily"],
    ],
    col_widths=[6*cm, 4.5*cm, 6.5*cm]
)

story += H2("Onset and Peak Action")
story += B([
    "<b>Onset:</b> 10-30 minutes",
    "<b>Peak IOP reduction:</b> 1-2 hours",
    "<b>Duration:</b> 4-8 hours (hence q.i.d. dosing for pilocarpine)",
    "Echothiophate: longer duration due to irreversible mechanism",
])

story += H2("Washout Period")
story += B([
    "Pilocarpine: <b>3 days</b> (shortest of all agents — reversible mechanism)",
    "Echothiophate: Several weeks (irreversible inhibitor — requires new AChE synthesis)",
])

story += H2("Contraindications")
story += H3("Ocular")
story += B([
    "<b>Retinal holes / lattice degeneration:</b> Miosis causes increased vitreoretinal traction → "
    "risk of retinal detachment (contraindicated in known retinal tears; relative in high myopes, aphakes)",
    "<b>Acute iritis/uveitis:</b> Ciliary muscle spasm worsens pain; miosis promotes posterior synechiae",
    "Malignant glaucoma / certain pupillary block configurations (can worsen pupillary block)",
])
story += H3("Systemic")
story += B([
    "Patients under 40 years: Accommodative spasm → induced myopia, browache, headache",
    "Bradycardia, asthma (systemic cholinergic effects from nasal absorption)",
    "Parkinson disease (relative)",
])

story.append(PageBreak())

# ═══════════════════════════════════════════════════════════════
# CLASS 6 – ROCK INHIBITORS
# ═══════════════════════════════════════════════════════════════
story += H1("CLASS 6: RHO-KINASE (ROCK) INHIBITORS")
story += P("<b>Drug:</b> Netarsudil (Rhopressa) — approved 2017")

story += H2("Mechanism of Action")
story += P("Rho-kinase (ROCK) promotes <b>actin-myosin cytoskeletal contraction and increased stiffness</b> "
           "in trabecular meshwork cells, increasing resistance to conventional outflow.")
story += P("Netarsudil inhibits ROCK-1 and ROCK-2:")
story += B([
    "<b>Cytoskeletal relaxation of trabecular meshwork cells</b> → reduces trabecular meshwork resistance "
    "→ increases conventional (trabecular/Schlemm's canal) outflow — targets the PRIMARY dysfunctional "
    "pathway in glaucoma",
    "<b>Inhibits norepinephrine transporter (NET)</b> → reduces sympathetic tone in the eye → decreases "
    "aqueous humor production",
    "<b>Reduces episcleral venous pressure</b> → novel additional outflow-enhancing mechanism",
])

story += H2("Dosage")
story += make_table(
    ["Drug (Brand)", "Concentration", "Frequency"],
    [["Netarsudil (Rhopressa)", "0.02%", "1 drop once nightly"]],
    col_widths=[7*cm, 4*cm, 6*cm]
)

story += H2("Onset and Peak Action")
story += B([
    "<b>Onset:</b> Within hours of instillation",
    "<b>Peak effect:</b> ~8 hours",
    "<b>Washout period:</b> 4 weeks",
])

story += H2("Side Effects")
story += B([
    "<b>Conjunctival hyperemia</b> (most common — up to 50%; main limiting side effect)",
    "Conjunctival haemorrhage (petechial/subconjunctival)",
    "<b>Cornea verticillata</b> (whorl-like corneal deposits) — clinically insignificant, fully reversible on stopping",
    "Corneal staining/oedema",
])

# ═══════════════════════════════════════════════════════════════
# CLASS 7 – OSMOTIC AGENTS
# ═══════════════════════════════════════════════════════════════
story += H1("CLASS 7: OSMOTIC AGENTS")
story += P("<b>Drugs:</b> Mannitol (IV), Glycerine/Glycerol (oral), Isosorbide (oral), Hypertonic saline")
story += P("Used for <b>acute IOP crises</b> (acute angle-closure attack, pre-operative IOP reduction). "
           "NOT for chronic use.")

story += H2("Mechanism of Action")
story += P("These agents create an <b>osmotic gradient between blood and vitreous humor</b>. They raise "
           "plasma osmolarity, drawing water out of the vitreous (and aqueous) into the circulation → "
           "<b>reduces vitreous volume → decreases IOP acutely</b>. They do NOT affect aqueous "
           "production or outflow pathways directly.")

story += H2("Dosage")
story += make_table(
    ["Drug", "Dose", "Route", "Notes"],
    [
        ["Mannitol 20%", "1.5-2 g/kg over 30 min", "IV infusion", "Onset 30-60 min"],
        ["Glycerine", "1-2 g/kg", "Oral", "Give with ice/lemon; metabolises to glucose"],
        ["Isosorbide", "1.5 g/kg", "Oral", "Preferred over glycerine in diabetics"],
    ],
    col_widths=[4.5*cm, 4.5*cm, 3.5*cm, 4.5*cm]
)

story += H2("Washout Period")
story += B(["Mannitol: <b>1 week</b>"])

story += H2("Contraindications")
story += B([
    "<b>Anuria / severe renal failure:</b> Mannitol cannot be excreted → dangerous volume overload",
    "<b>Decompensated heart failure / pulmonary oedema:</b> Acute volume expansion from osmotic shift",
    "<b>Intracranial haemorrhage</b>",
    "<b>Severe dehydration / hyponatraemia</b>",
    "Diabetics: Avoid glycerine (metabolises to glucose) — use isosorbide instead",
])

story.append(PageBreak())

# ═══════════════════════════════════════════════════════════════
# WASHOUT REFERENCE TABLE
# ═══════════════════════════════════════════════════════════════
story += H1("COMPREHENSIVE WASHOUT PERIOD REFERENCE TABLE")

story += make_table(
    ["Drug Class", "Drug / Brand", "Washout Period"],
    [
        ["Prostaglandin analogues", "Latanoprost (Xalatan), Travoprost (Travatan Z), Bimatoprost (Lumigan), Tafluprost (Zioptan), Latanoprostene bunod (Vyzulta)", "4.5 weeks"],
        ["Prostaglandin analogues", "Unoprostone (Rescula)", "4 weeks"],
        ["Beta-blockers", "Timolol (Timoptic), Levobunolol (Betagan), Betaxolol (Betoptic S), Carteolol, Metipranolol (Optipranolol)", "4 weeks"],
        ["Alpha-2 agonists", "Brimonidine (Alphagan P)", "5 weeks"],
        ["Alpha-2 agonists", "Apraclonidine (Iopidine)", "5 weeks"],
        ["Topical CAIs", "Dorzolamide (Trusopt), Brinzolamide (Azopt), Acetazolamide ER (Diamox)", "1 week"],
        ["Miotics", "Pilocarpine (Isopto Carpine)", "3 days"],
        ["ROCK inhibitors", "Netarsudil (Rhopressa)", "4 weeks"],
        ["Osmotic agents", "Mannitol (Osmitrol)", "1 week"],
        ["Fixed combinations", "Cosopt, Cosopt PF (Timolol + Dorzolamide)", "4 weeks"],
        ["Fixed combinations", "DuoTrav (Timolol + Travoprost), Xalacom (Timolol + Latanoprost), Rocklatan (Netarsudil + Latanoprost)", "4.5 weeks"],
        ["Fixed combinations", "Combigan (Timolol + Brimonidine), Simbrinza (Brimonidine + Brinzolamide)", "5 weeks"],
    ],
    col_widths=[5*cm, 8.5*cm, 3.5*cm]
)

# ═══════════════════════════════════════════════════════════════
# FIXED-DOSE COMBINATIONS
# ═══════════════════════════════════════════════════════════════
story += H1("FIXED-DOSE COMBINATIONS (FDCs)")
story += P("FDCs combine two drugs from different classes in a single bottle, reducing dosing burden, "
           "improving compliance, avoiding the washout effect between sequential drops, and often "
           "providing <b>additive or synergistic IOP reduction</b> greater than either agent alone.")

story += H2("Why FDCs Work Better Than Sequential Drops")
story += B([
    "When two drops are instilled sequentially, the second drop can wash out part of the first, "
    "reducing bioavailability. FDCs deliver both agents simultaneously in a single instillation — "
    "eliminating this washout effect.",
    "Preservative load is halved, reducing ocular surface toxicity.",
    "Improved patient compliance through reduced drop frequency.",
])

story += H2("1. Cosopt / Cosopt PF — Timolol 0.5% + Dorzolamide 2%")
story += B([
    "<b>Mechanism:</b> Beta-blocker reduces aqueous production via cAMP-PKA inhibition; CAI reduces "
    "aqueous production via CA-II inhibition. Additive dual suppression of aqueous formation through "
    "two independent pathways.",
    "<b>Dose:</b> 1 drop twice daily",
    "<b>IOP reduction:</b> ~25-30%",
    "<b>Washout:</b> 4 weeks",
    "<b>Contraindications:</b> Asthma, COPD, heart block; Fuchs dystrophy; sulfa allergy (relative)",
])

story += H2("2. Combigan — Brimonidine 0.2% + Timolol 0.5%")
story += B([
    "<b>Mechanism:</b> Complementary dual suppression of aqueous formation (α2 and β2 receptor pathways). "
    "Brimonidine also enhances uveoscleral outflow for additional benefit.",
    "<b>Dose:</b> 1 drop twice daily",
    "<b>IOP reduction:</b> ~25-30%, greater than either component alone",
    "<b>Washout:</b> 5 weeks",
    "<b>Contraindications:</b> Asthma, COPD, heart block; MAOIs; children under 5 years",
])

story += H2("3. Simbrinza — Brimonidine 0.2% + Brinzolamide 1%")
story += B([
    "<b>Mechanism:</b> α2 agonist reduces aqueous and increases uveoscleral outflow; CAI reduces aqueous "
    "via CA-II inhibition. <b>Contains NO beta-blocker</b> — preferred FDC for asthma, COPD, bradycardia.",
    "<b>Dose:</b> 1 drop 3 times daily",
    "<b>IOP reduction:</b> Good 24-hour IOP control",
    "<b>Washout:</b> 5 weeks",
    "<b>Contraindications:</b> MAOIs; children under 5; sulfa allergy (relative); Fuchs dystrophy; renal failure",
])

story += H2("4. DuoTrav — Timolol 0.5% + Travoprost 0.004%")
story += B([
    "<b>Mechanism:</b> PGA increases uveoscleral outflow via FP receptor-MMP pathway; beta-blocker reduces "
    "aqueous production. Complementary mechanisms (one increases outflow, other decreases inflow) = "
    "maximal IOP lowering.",
    "<b>Dose:</b> 1 drop once daily (evening)",
    "<b>IOP reduction:</b> ~30-35% (among highest of FDCs)",
    "<b>Washout:</b> 4.5 weeks",
    "<b>Contraindications:</b> Asthma, COPD, heart block; pregnancy; active uveitis; CME",
])

story += H2("5. Xalacom — Timolol 0.5% + Latanoprost 0.005%")
story += B([
    "<b>Mechanism:</b> Identical rationale to DuoTrav — PGA + beta-blocker, complementary inflow/outflow targeting.",
    "<b>Dose:</b> 1 drop once daily (evening)",
    "<b>IOP reduction:</b> ~30-35%",
    "<b>Washout:</b> 4.5 weeks",
])

story += H2("6. Rocklatan — Netarsudil 0.02% + Latanoprost 0.005%")
story += B([
    "<b>Mechanism:</b> Most mechanistically comprehensive FDC available. Netarsudil enhances conventional "
    "trabecular outflow (ROCK inhibition + reduces episcleral venous pressure + reduces aqueous production "
    "via NET inhibition); Latanoprost enhances uveoscleral outflow. Together they target ALL THREE outflow "
    "pathways simultaneously.",
    "<b>Dose:</b> 1 drop once nightly",
    "<b>IOP reduction:</b> ~30-36% — slightly superior to either component alone",
    "<b>Beta-blocker FREE</b> — important advantage for patients with contraindications",
    "<b>Washout:</b> 4.5 weeks",
    "<b>Side effects:</b> Conjunctival hyperemia (most common), cornea verticillata, conjunctival haemorrhage, iris pigmentation",
])

story.append(PageBreak())

# FDC SELECTION GUIDE
story += H2("FDC Selection Guide")
story += make_table(
    ["Patient Profile", "Preferred FDC"],
    [
        ["Needs maximum IOP reduction; tolerates beta-blocker", "DuoTrav, Xalacom, or Rocklatan"],
        ["Cannot tolerate beta-blocker (asthma / COPD / bradycardia)", "Simbrinza or Rocklatan"],
        ["Needs t.i.d. dosing for better 24-hour coverage", "Simbrinza"],
        ["Needs dual aqueous suppression (no PGA)", "Cosopt or Combigan"],
        ["Maximum outflow enhancement + no beta-blocker", "Rocklatan"],
    ],
    col_widths=[10*cm, 7*cm]
)

# ═══════════════════════════════════════════════════════════════
# MASTER REFERENCE TABLE
# ═══════════════════════════════════════════════════════════════
story += H1("MASTER QUICK-REFERENCE TABLE")
story += make_table(
    ["Class", "Drugs", "Mechanism", "Dose", "Peak", "Washout", "Key Contraindication"],
    [
        ["PG Analogues", "Latanoprost, Travoprost, Bimatoprost, Tafluprost", "↑ Uveoscleral outflow\n(FP receptor, MMP)", "Once nightly", "8-12 hrs", "4-4.5 wks", "Pregnancy, uveitis, CME"],
        ["Beta-blockers", "Timolol, Levobunolol, Betaxolol", "↓ Aqueous production\n(β2 blockade, ↓cAMP)", "Once-b.i.d.", "1-2 hrs", "4 wks", "Asthma, COPD, heart block"],
        ["α2 Agonists", "Brimonidine, Apraclonidine", "↓ Aqueous production\n+ ↑ uveoscleral outflow", "b.i.d.-t.i.d.", "2 hrs", "5 wks", "MAOIs, infants"],
        ["Topical CAIs", "Dorzolamide, Brinzolamide", "↓ Aqueous production\n(CA-II, ↓HCO₃⁻)", "b.i.d.-t.i.d.", "2 hrs", "1 wk", "Fuchs dystrophy; sulfa allergy (rel.)"],
        ["Systemic CAIs", "Acetazolamide, Methazolamide", "↓ Aqueous production\n(more potent)", "Varies", "IV: 15 min\nOral: 4-8 hrs", "1 wk", "Renal failure, sulfa allergy"],
        ["Miotics", "Pilocarpine, Echothiophate", "↑ Conventional outflow\n(ciliary muscle → spur)", "q.i.d.", "1-2 hrs", "3 days", "Retinal holes, uveitis, age <40"],
        ["ROCK inhibitors", "Netarsudil", "↑ Trabecular outflow\n↓ Episcleral venous P\n↓ Aqueous production", "Once nightly", "~8 hrs", "4 wks", "Ocular surface disease (rel.)"],
        ["Osmotic agents", "Mannitol, Glycerine", "↓ Vitreous volume\n(osmotic gradient)", "Acute/PRN", "30-60 min", "1 wk", "Anuria, CHF, dehydration"],
    ],
    col_widths=[2.5*cm, 3.5*cm, 3.5*cm, 2.5*cm, 2*cm, 2*cm, 4*cm]
)

# ═══════════════════════════════════════════════════════════════
# STEPWISE APPROACH
# ═══════════════════════════════════════════════════════════════
story += H1("STEP-WISE APPROACH TO GLAUCOMA PHARMACOTHERAPY")
story += B([
    "<b>Step 1 (First-line):</b> Prostaglandin analogue (once nightly; most potent, best systemic safety)",
    "<b>Step 2 (Add-on or alternative first-line):</b> Beta-blocker (if PGA contraindicated)",
    "<b>Step 3 (Second add-on):</b> Alpha-2 agonist (brimonidine) or topical CAI — or FDC of two agents",
    "<b>Step 4 (Third add-on):</b> ROCK inhibitor (netarsudil) or Rocklatan (FDC)",
    "<b>Step 5 (Specific situations):</b> Pilocarpine (angle-closure, plateau iris syndrome)",
    "<b>Acute angle-closure crisis:</b> IV acetazolamide 500 mg + topical timolol 0.5% + topical "
    "apraclonidine/brimonidine → if IOP persists after 1 hour: IV mannitol 1.5-2 g/kg over 30 min → "
    "laser peripheral iridotomy (definitive treatment)",
])

story.append(Spacer(1, 6*mm))

# SOURCES
story += H2("Key References")
story += B([
    "Goodman & Gilman's The Pharmacological Basis of Therapeutics, 14e — Chapter 74 (Ophthalmic Pharmacology)",
    "Katzung's Basic and Clinical Pharmacology, 16e",
    "The Wills Eye Manual, 8e",
    "Tintinalli's Emergency Medicine, 9e — Acute Angle-Closure Glaucoma",
    "Lippincott Illustrated Reviews: Pharmacology",
    "Eyes on Eyecare — Washout Period Reference (eyesoneyecare.com)",
    "EyeWiki — Review of Topical Glaucoma Medications (eyewiki.org)",
])

story.append(Spacer(1, 8*mm))

# Footer note
story.append(Paragraph(
    "This document is intended as a clinical reference. Always consult current product information "
    "and clinical guidelines for individual patient management decisions.",
    ParagraphStyle("Footer", fontSize=8, fontName="Helvetica-Oblique",
                   textColor=colors.grey, alignment=TA_CENTER)))

# ── BUILD ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUTPUT}")
Running Command

cd /tmp/workspace/antiglaucoma-pdf && python build_pdf.py 2>&1

Running Command

ls -lh /tmp/workspace/antiglaucoma-pdf/Anti_Glaucoma_Medications.pdf

The PDF has been generated successfully (38 KB). Here it is:

Anti Glaucoma Medications

PDF Document · PDF

The PDF includes all sections from the discussion, neatly formatted with:
  • Color-coded class headers (dark blue banners for each drug class)
  • Formatted tables for dosage, washout periods, and FDC selection guide
  • Bullet-point lists for mechanisms, contraindications, and side effects
  • Highlighted notes (e.g., systemic absorption warning for beta-blockers, echothiophate-succinylcholine interaction)
  • Master quick-reference table covering all 8 classes at a glance
  • Step-wise pharmacotherapy guide including acute angle-closure management
  • Key references at the end
This is a shared conversation. Sign in to Orris to start your own chat.