Teach me like neonatologist/paeditrcian in depth topic -Tuner syndrome

Reading File
Finding Sources
Finding Sources
Searching PubMed

"Turner syndrome" management

Reading File
Reading File
Reading File
Reading File
Loading Image
Reading File
Reading File
Reading File
Reading File
Loading Image
I now have comprehensive content to deliver an in-depth neonatologist/pediatrician-level teaching on Turner syndrome. Let me compile the full answer.

Turner Syndrome - In-Depth Teaching for the Neonatologist/Paediatrician


1. DEFINITION AND HISTORICAL BACKGROUND

Turner syndrome (TS) is a chromosomal disorder resulting from complete or partial monosomy of the X chromosome, characterized by hypogonadism in phenotypic females. It is the most common sex chromosome abnormality in females.
  • First described by Henry Turner in 1938: the triad of sexual infantilism, webbed neck, and cubitus valgus.
  • The chromosomal basis (45,X) was identified by Ford in 1959.
  • Interestingly, Ullrich described these features in 1930, hence the European term "Ullrich-Turner syndrome."

2. EPIDEMIOLOGY

ParameterData
Incidence in live-born females~1 in 2,000-3,000
Spontaneous abortions45,X is the most common cytogenetic abnormality in miscarried fetuses - accounts for ~18% of all chromosomally caused abortions
Survival of 45,X conceptusesOnly ~1% of monosomy X embryos survive to term
Paternal origin of errorIn ~75-80% of cases, it is the paternal sex chromosome that is missing
The fact that only ~1% survive highlights how lethal the complete 45,X karyotype is in utero. Most die before 28 weeks.
  • The Developing Human, 9th ed.
  • Robbins & Cotran Pathologic Basis of Disease

3. GENETICS AND KARYOTYPES

3a. Classic Karyotype

45,X (monosomy X) - present in ~57% of cases. A single maternal X chromosome, with the paternal sex chromosome missing.

3b. Structural Abnormalities of the X (~14%)

In order of frequency:
KaryotypeDescription
46,X,i(X)(q10) - isochromosome XqMost common structural variant. Duplication of long arm (Xq), loss of short arm (Xp). Associated with higher rates of autoimmune thyroid disease.
46,X,r(X) - ring chromosomeDeletions of both short and long arms form a ring. Variable phenotype; sometimes associated with more severe features.
46,X,del(Xp) or del(Xq)Partial deletions of short or long arms

3c. Mosaicism (~29%)

Two or more chromosomally distinct cell lines:
Mosaic KaryotypeClinical significance
45,X/46,XXMost common mosaic (10-15%). May be nearly normal in appearance; may present only with primary amenorrhea. Some can conceive.
45,X/46,XY2-5%. Critical - risk of gonadoblastoma 12-20%.
45,X/47,XXXTriple X mosaicism
45,X/46,X,i(X)(q10)Combined structural + mosaic
Clinician note: With conventional cytogenetics, mosaicism is detected in ~30% of TS patients. With more sensitive molecular techniques (FISH, PCR), this rises to 75%. The proportion of 45,X cells determines phenotypic severity.

3d. Y Chromosome Material

  • Found in 5-10% of TS patients (complete Y or translocated Y fragments)
  • This is the most clinically critical karyotypic finding for the neonatologist/paediatrician
  • Risk for gonadoblastoma: 12-20% (which may progress to dysgerminoma or other malignant germ cell tumors in 18-35% of gonadoblastoma cases)
  • Gonadoblastoma has been reported as early as 5 months of age - hence early detection and prophylactic gonadectomy is essential
  • Campbell-Walsh-Wein Urology

4. PATHOGENESIS - MOLECULAR MECHANISMS

SHOX Gene Haploinsufficiency

  • SHOX (Short Stature HOmeobox gene) located at Xp22.33 in the pseudoautosomal region (PAR1)
  • Escapes X-inactivation - normally two copies present in both males and females
  • In 45,X Turner syndrome: only one copy → haploinsufficiency → short stature, Madelung deformity, skeletal abnormalities
  • SHOX is expressed in growth plates of radius, ulna, tibia, fibula
  • Confirms: SHOX deletions are found in 2-5% of otherwise normal short children
  • In Klinefelter syndrome (extra X = extra SHOX copies) → tall stature - elegant mirror image

Ovarian Failure Mechanism

  • Normal fetal ovaries develop normally through the first 18 weeks of gestation
  • After that, absence of the second X chromosome → accelerated apoptosis of oocytes
  • Normally 7 million oocytes at peak in utero; by menarche reduced to 400,000; at menopause <10,000
  • In TS: oocyte attrition is so rapid that by age 2 years, virtually no oocytes remain
  • Classic description: "Menopause occurs before menarche"
  • Result: streak ovaries (white fibrous strands 2-3 cm long, 0.5 cm wide, in the broad ligament, histologically devoid of oocytes/follicles)
  • Elevated FSH and LH (hypergonadotropic hypogonadism)

Why Other Features?

  • Somatic features (neck webbing, cardiac defects) are primarily determined by genes on the short arm (Xp)
  • Fertility and menstruation affected by genes on the long arm (Xq)
  • Lymphatic system genes on Xp explain the cystic hygroma/lymphedema
  • Robbins & Cotran Pathologic Basis of Disease

5. CLINICAL FEATURES - SYSTEM BY SYSTEM

Clinical Features Diagram (Robbins Pathology)

Turner Syndrome clinical features diagram showing short stature, low posterior hairline, webbing of neck, broad chest with widely spaced nipples, coarctation of aorta, cubitus valgus, streak ovaries, peripheral lymphedema at birth, and pigmented nevi
Figure: Clinical features and karyotypes of Turner syndrome (Robbins & Kumar Basic Pathology)

5a. NEONATAL PRESENTATION - What the neonatologist sees first

FeatureDetail
Lymphedema of dorsum of hands and feetMost common neonatal finding. Due to lymph stasis from distended lymphatic channels.
Cystic hygroma / nuchal edemaDistended lymphatics at the nape of neck → in survivors → resolves to webbing of neck + loose neck skin
Webbing of neck (pterygium colli)Persistent skin fold from residual lymphedema
Low posterior hairline
Broad / shield chest
Widely spaced nipples
Cubitus valgusIncreased carrying angle at elbow
Short 4th metacarpalBrachymetacarpia
Hypoplastic nails
Multiple pigmented nevi
High-arched palate
Ptosis, hypertelorism, retrognathia, ear malformationsFacial features
Peripheral edema at birthMay be first presenting sign

5b. CARDIOVASCULAR - Most important cause of mortality

  • Affects 25-50% of patients
  • Predominantly left-sided abnormalities:
LesionPrevalence
Bicuspid aortic valve (BAV)Most common structural CHD in TS
Coarctation of the aortaClassic association; ~5% of girls presenting with coarctation have Turner syndrome
Aortic root dilationPresent in 30%
Aortic dissection risk100-fold higher than the general population
Partial anomalous pulmonary venous drainageLess common
Cardiovascular abnormalities are the most common cause of death in childhood and the most important cause of increased mortality overall in Turner syndrome.
  • Aortic dissection can occur in young women, particularly with BAV or coarctation
  • Requires lifelong cardiac surveillance

5c. RENAL - Very commonly missed

  • 33-60% of TS patients have structural/positional renal abnormalities (most common in classic 45,X)
Renal AnomalyFrequency
Horseshoe kidney~10%
Duplication of collecting system or renal agenesis~20%
Malrotation~15%
Multiple renal arteries~90% (noted on cardiovascular evaluation)

5d. REPRODUCTIVE / ENDOCRINE

  • Streak ovaries: Fibrous strands devoid of oocytes
  • Primary amenorrhea in most (90% fail to develop normal secondary sex characteristics)
  • Sexual infantilism: Infantile genitalia, minimal breast development, sparse pubic/axillary hair
  • Elevated FSH/LH (hypergonadotropic hypogonadism)
  • Spontaneous puberty can occur in up to 30% of patients (especially mosaic forms)
  • A very small number (~2-5% of 45,X/46,XX mosaics) can conceive spontaneously

5e. THYROID

  • Autoimmune thyroiditis (Hashimoto's) is significantly more common in TS
  • Especially in women with isochromosome Xp (i(Xq))
  • Up to 50% develop clinical hypothyroidism over time
  • Mechanism: autoantibodies against the thyroid gland
  • Must screen TSH at diagnosis and periodically

5f. METABOLIC / HEPATIC

  • Glucose intolerance, insulin resistance, obesity
  • Non-alcoholic fatty liver disease (NAFLD)
  • Some develop full metabolic syndrome
  • Insulin resistance is worsened by growth hormone therapy - important clinical point

5g. NEURODEVELOPMENT / COGNITIVE

  • General intellect usually within normal limits
  • Subtle but important deficits in visual-spatial information processing (e.g., non-verbal learning disability)
  • Non-verbal learning disability: difficulty with math, spatial tasks, social perception
  • Higher rates of ADHD, anxiety
  • Normal verbal IQ; affected performance IQ
  • Not associated with intellectual disability in the classic sense

5h. AUDITORY / ENT

  • Sensorineural hearing loss (progressive) - common in older patients
  • Otitis media (due to Eustachian tube dysfunction) in children
  • Scott-Brown's and Cummings ENT texts both discuss hearing surveillance

5i. MUSCULOSKELETAL / ORTHOPEDIC

  • Cubitus valgus (increased carrying angle)
  • Short 4th metacarpal (positive metacarpal sign)
  • Scoliosis (seen in up to 10%)
  • Osteoporosis in adulthood (estrogen deficiency)
  • Short stature: Adult height averages 143-144 cm without treatment in most populations

6. PRENATAL DIAGNOSIS

Ultrasonographic features raising suspicion:
  • Increased nuchal translucency (most common)
  • Cystic hygroma
  • Lymphedema
  • Coarctation of the aorta
  • Renal anomalies
Karyotyping options: Amniocentesis or CVS.
Important counseling point (ascertainment bias): If a 45,X/46,XX or 45,X/46,XY karyotype is incidentally found prenatally, approximately 90% of fetuses will have a NORMAL phenotype at birth (due to selection bias - most severely affected 45,X fetuses abort). This has profound implications for prenatal counseling. However, a purely 45,X fetus found prenatally has a prognosis similar to postnatal diagnosis.
  • Campbell-Walsh-Wein Urology

7. DIAGNOSIS - POSTNATAL

When to suspect Turner syndrome:

  • Neonate: Lymphedema of hands/feet, cystic hygroma, CHD (especially coarctation), unexplained hydrops fetalis
  • Child: Short stature (below 3rd percentile), unexplained growth failure
  • Adolescent: Primary amenorrhea + short stature (the classic adult presentation)
  • Any age: The combination of short stature + primary amenorrhea should always prompt karyotyping

Investigations at Diagnosis:

InvestigationWhy
Karyotype (minimum 30 cells)Confirm diagnosis, detect mosaicism
FISH for Y-chromosome material or PCRDetect occult Y material (in all TS patients)
EchocardiogramBicuspid aortic valve, coarctation, aortic root
Renal ultrasoundStructural renal anomalies
TSH, thyroid antibodiesAutoimmune thyroiditis
FSH, LH, EstradiolConfirm hypergonadotropic hypogonadism
Blood pressure (both arms)Coarctation surveillance
AudiogramSensorineural hearing loss
Bone ageGrowth assessment
Fasting glucose, lipidsMetabolic screening
Liver function testsNAFLD

8. MANAGEMENT - NEONATOLOGIST / PAEDIATRICIAN APPROACH

Neonatal Period

  1. Confirm karyotype (at least 30 cells)
  2. FISH or PCR for Y chromosome material in ALL cases
  3. If Y material confirmed → prophylactic gonadectomy (laparoscopic) - timely, given gonadoblastoma risk from as early as 5 months
  4. Echocardiogram - screen for bicuspid aortic valve, coarctation
  5. Renal ultrasound - screen for structural anomalies
  6. Manage lymphedema - usually resolves, but monitor for neck webbing persistence
  7. Feeding support - some neonates have feeding difficulties

Growth Hormone Therapy (in Children)

  • Recombinant human GH (rhGH): FDA-approved for Turner syndrome since 1996
  • Typically started around age 4-6 years (or earlier if growth falls significantly below norms)
  • Dose: 0.045-0.050 mg/kg/day (higher than typical GH deficiency doses)
  • Goal: achieve height within normal range (adult height gain of ~5-8 cm above predicted height without treatment)
  • Must monitor for worsening insulin resistance - a significant concern
  • Continue until bone age reaches ~14-15 years or growth velocity becomes insufficient

Estrogen Replacement Therapy

  • Initiated at age 12-15 years to induce puberty (if spontaneous puberty has not occurred)
  • Start with low-dose estradiol, gradually increase over 2-3 years
  • At an appropriate time, add progesterone to induce withdrawal bleeds
  • Goal: normal pubertal development, breast development, uterine growth, bone mineralization
  • Long-term HRT continued until normal age of menopause (~50 years)

Fertility

  • The majority are infertile due to streak ovaries
  • Options: egg donation with IVF (requires prepared uterus with estrogen)
  • For the small minority with spontaneous menses (mosaic TS): oocyte cryopreservation is currently considered experimental but evolving
  • Cardiac clearance (aortic root assessment) is mandatory before any pregnancy attempt due to 100-fold increased aortic dissection risk

Gonadoblastoma Prophylaxis

  • If Y-chromosome material is detected → laparoscopic prophylactic gonadectomy
  • Does not need to remove streak gonads confirmed to be in 45,X patients (no Y material = no risk)
  • Earlier the better, given reports of gonadoblastoma at 5 months of age

Other Surveillance (ongoing)

SystemSurveillance
CardiacEchocardiogram/MRI every 3-5 years; more frequent if BAV/aortic dilation
Blood pressureAnnually
ThyroidTSH annually
HearingAudiogram every 3-5 years
Glucose/lipidsEvery 2-3 years
Liver functionAnnually
Bone densityDEXA in adulthood
OphthalmologyStrabismus, amblyopia screening
PsychosocialLearning support, neurodevelopmental assessment

9. COMPLICATIONS SUMMARY TABLE

SystemComplicationKey Point
CardiovascularCoarctation, BAV, aortic dissection#1 cause of death
GonadalStreak ovaries, primary amenorrheaHypergonadotropic hypogonadism
OncologicGonadoblastomaOnly if Y material present
ThyroidAutoimmune hypothyroidismUp to 50% lifetime risk
MetabolicInsulin resistance, metabolic syndromeGH therapy worsens IR
RenalHorseshoe kidney, duplication33-60% affected
NeurocognitiveVisuospatial deficits, non-verbal LDNormal verbal IQ
AuditorySNHL, recurrent otitis mediaProgressive with age
SkeletalShort stature, osteoporosis, scoliosisSHOX haploinsufficiency

10. KEY EXAM/CLINICAL PEARLS

  1. Most 45,X conceptions abort (>99%) - Turner syndrome in live births is the "milder end" of a severe spectrum
  2. The missing X is usually paternal (~75-80%) - abnormality in paternal gametogenesis
  3. Cystic hygroma in a female fetus on antenatal scan → think Turner syndrome until proven otherwise
  4. ~5% of girls presenting with coarctation of aorta have Turner syndrome → always karyotype
  5. "Menopause before menarche" - ovarian failure complete by age 2 years
  6. Y material detection is mandatory in all TS patients - gonadoblastoma can occur at 5 months
  7. GH therapy worsens insulin resistance - monitor glucose carefully
  8. Thyroid autoantibodies are most common with isochromosome Xq (i(Xq) karyotype)
  9. Prenatal ascertainment bias: incidentally detected 45,X/46,XX or 45,X/46,XY mosaicism prenatally → 90% will be phenotypically normal at birth
  10. Aortic dissection risk is 100-fold elevated - cardiac clearance before any pregnancy is mandatory
  11. Normal intellect with specific visuospatial processing deficits (not global intellectual disability)
  12. Spontaneous puberty in up to 30% - especially mosaic TS (45,X/46,XX)

11. RECENT EVIDENCE (2024-2026)

Three recent systematic reviews are worth noting:
  • Autoimmune disease prevalence (PMID: 41243107): A 2025 systematic review and meta-analysis confirms the significantly elevated global prevalence of autoimmune diseases in Turner syndrome, reinforcing the need for autoimmune surveillance.
  • Karyotype-phenotype correlation in structural X rearrangements (PMID: 39743222): A 2025 systematic review examining structural non-mosaic X chromosome rearrangements and their specific phenotypic associations - helps refine counseling based on specific karyotype.
  • Congenital heart disease and karyotype (PMID: 40557696): A 2025 meta-analysis confirming that the karyotype significantly impacts the type and severity of congenital heart disease in Turner syndrome - supporting karyotype-guided cardiac surveillance protocols.

Sources

  • Robbins & Kumar Basic Pathology (Robbins Pathology), Figure 4.20
  • Robbins, Cotran & Kumar Pathologic Basis of Disease, pp. 168-169
  • Campbell-Walsh-Wein Urology (3-Volume Set), Chapter 48 - Syndromes of Gonadal Dysgenesis
  • The Developing Human: Clinically Oriented Embryology, 9th ed., p. 1239
  • PubMed systematic reviews: PMID 41243107, 39743222, 40557696 (2025)

Above all contents word by word in pdf

Reading File
Running Command

mkdir -p /tmp/workspace/turner-syndrome && ls /tmp/workspace/turner-syndrome/

Writing File

~/turner-syndrome/generate_pdf.py

#!/usr/bin/env python3
"""Generate Turner Syndrome comprehensive PDF using ReportLab."""

import urllib.request
import os
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.lib.colors import HexColor, black, white
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, KeepTogether, Image, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus.flowables import Flowable

# ── Output path ──────────────────────────────────────────────────────────────
OUT = "/tmp/workspace/turner-syndrome/Turner_Syndrome_Neonatologist_Guide.pdf"

# ── Colour palette ────────────────────────────────────────────────────────────
NAVY      = HexColor("#1A3A5C")
TEAL      = HexColor("#1A7A8A")
LIGHT_BLUE= HexColor("#D6EAF8")
PALE_TEAL = HexColor("#E8F6F3")
PALE_ORANGE = HexColor("#FEF9E7")
HEADER_BG = HexColor("#1A3A5C")
ROW_ALT   = HexColor("#EBF5FB")
TABLE_HDR = HexColor("#1A7A8A")
ORANGE    = HexColor("#E67E22")
RED       = HexColor("#C0392B")
GREEN     = HexColor("#1E8449")
GRAY_LIGHT= HexColor("#F2F3F4")
GRAY_MID  = HexColor("#AAB7B8")

# ── Download the Turner syndrome diagram image ────────────────────────────────
IMG_URL = "https://cdn.orris.care/cdss_images/edcafa4b45a5638f8ec22d2efd3573f71180bd82ce6de8fe6d0e9b572edc1876.png"
IMG_PATH = "/tmp/workspace/turner-syndrome/turner_diagram.png"
if not os.path.exists(IMG_PATH):
    urllib.request.urlretrieve(IMG_URL, IMG_PATH)

# ── Document setup ─────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
    OUT,
    pagesize=A4,
    leftMargin=1.8*cm, rightMargin=1.8*cm,
    topMargin=2.2*cm, bottomMargin=2.2*cm,
    title="Turner Syndrome – In-Depth Guide for Neonatologists & Paediatricians",
    author="Orris Medical Education",
    subject="Turner Syndrome Comprehensive Reference"
)

W, H = A4
CONTENT_W = W - 3.6*cm

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

def style(name, parent="Normal", **kwargs):
    s = ParagraphStyle(name, parent=styles[parent], **kwargs)
    return s

# Register styles
S = {
    "cover_title": style("cover_title", fontSize=28, textColor=white,
                         alignment=TA_CENTER, leading=34, fontName="Helvetica-Bold"),
    "cover_sub":   style("cover_sub",   fontSize=15, textColor=HexColor("#AED6F1"),
                         alignment=TA_CENTER, leading=20, fontName="Helvetica"),
    "cover_tag":   style("cover_tag",   fontSize=11, textColor=HexColor("#AED6F1"),
                         alignment=TA_CENTER, leading=15, fontName="Helvetica-Oblique"),

    "h1":  style("h1",  fontSize=14, textColor=white,
                 fontName="Helvetica-Bold", alignment=TA_LEFT, leading=18,
                 leftIndent=0, spaceBefore=14, spaceAfter=4),
    "h2":  style("h2",  fontSize=11.5, textColor=NAVY,
                 fontName="Helvetica-Bold", leading=15, spaceBefore=10, spaceAfter=3),
    "h3":  style("h3",  fontSize=10.5, textColor=TEAL,
                 fontName="Helvetica-Bold", leading=14, spaceBefore=7, spaceAfter=2),

    "body": style("body", fontSize=9.5, textColor=HexColor("#2C3E50"),
                  leading=14, spaceAfter=4, alignment=TA_JUSTIFY,
                  fontName="Helvetica"),
    "body_bold": style("body_bold", fontSize=9.5, textColor=HexColor("#2C3E50"),
                       leading=14, fontName="Helvetica-Bold"),
    "bullet": style("bullet", fontSize=9.5, textColor=HexColor("#2C3E50"),
                    leading=14, leftIndent=14, firstLineIndent=-10,
                    spaceAfter=3, fontName="Helvetica"),
    "bullet2": style("bullet2", fontSize=9.2, textColor=HexColor("#2C3E50"),
                     leading=13, leftIndent=28, firstLineIndent=-10,
                     spaceAfter=2, fontName="Helvetica"),

    "th":  style("th",  fontSize=9, textColor=white,
                 fontName="Helvetica-Bold", alignment=TA_CENTER, leading=12),
    "td":  style("td",  fontSize=8.8, textColor=HexColor("#2C3E50"),
                 fontName="Helvetica", alignment=TA_LEFT, leading=12),
    "td_c":style("td_c",fontSize=8.8, textColor=HexColor("#2C3E50"),
                 fontName="Helvetica", alignment=TA_CENTER, leading=12),
    "td_b":style("td_b",fontSize=8.8, textColor=HexColor("#2C3E50"),
                 fontName="Helvetica-Bold", alignment=TA_LEFT, leading=12),

    "pearl": style("pearl", fontSize=9.3, textColor=HexColor("#7D6608"),
                   fontName="Helvetica-Bold", leading=13, leftIndent=10),
    "note":  style("note",  fontSize=8.8, textColor=HexColor("#154360"),
                   fontName="Helvetica-Oblique", leading=12, leftIndent=10),
    "warning": style("warning", fontSize=9.3, textColor=HexColor("#78281F"),
                     fontName="Helvetica-Bold", leading=13, leftIndent=10),
    "caption": style("caption", fontSize=8, textColor=HexColor("#5D6D7E"),
                     fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=11),
    "source": style("source", fontSize=7.5, textColor=GRAY_MID,
                    fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=10),
    "footer": style("footer", fontSize=7.5, textColor=GRAY_MID,
                    fontName="Helvetica", alignment=TA_CENTER, leading=10),
}

# ── Helper flowables ──────────────────────────────────────────────────────────

class ColorBox(Flowable):
    """Solid colour rectangle as a background banner."""
    def __init__(self, width, height, color, radius=4):
        super().__init__()
        self.width = width
        self.height = height
        self.color = color
        self.radius = radius

    def draw(self):
        self.canv.setFillColor(self.color)
        self.canv.roundRect(0, 0, self.width, self.height, self.radius, fill=1, stroke=0)


def section_header(number, title, color=NAVY):
    """Returns a section header as a coloured banner with white text."""
    data = [[Paragraph(f"  {number}  {title}", S["h1"])]]
    t = Table(data, colWidths=[CONTENT_W])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0, 0), (-1, -1), color),
        ("ROWBACKGROUNDS", (0, 0), (-1, -1), [color]),
        ("TOPPADDING",    (0, 0), (-1, -1), 7),
        ("BOTTOMPADDING", (0, 0), (-1, -1), 7),
        ("LEFTPADDING",   (0, 0), (-1, -1), 8),
        ("RIGHTPADDING",  (0, 0), (-1, -1), 8),
        ("ROUNDEDCORNERS", [4]),
    ]))
    return t


def two_col_table(headers, rows, col_widths=None, alt=True):
    """Styled table with teal header row."""
    if col_widths is None:
        col_widths = [CONTENT_W * 0.35, CONTENT_W * 0.65]
    data = [[Paragraph(h, S["th"]) for h in headers]]
    for i, row in enumerate(rows):
        data.append([Paragraph(str(c), S["td_b"] if i % 2 == 0 and alt else S["td"]) for c in row])
    t = Table(data, colWidths=col_widths, repeatRows=1)
    tbl_style = [
        ("BACKGROUND",    (0, 0), (-1, 0),  TABLE_HDR),
        ("TEXTCOLOR",     (0, 0), (-1, 0),  white),
        ("GRID",          (0, 0), (-1, -1), 0.4, HexColor("#BFC9CA")),
        ("TOPPADDING",    (0, 0), (-1, -1), 5),
        ("BOTTOMPADDING", (0, 0), (-1, -1), 5),
        ("LEFTPADDING",   (0, 0), (-1, -1), 6),
        ("RIGHTPADDING",  (0, 0), (-1, -1), 6),
        ("VALIGN",        (0, 0), (-1, -1), "MIDDLE"),
        ("FONTNAME",      (0, 1), (-1, -1), "Helvetica"),
        ("FONTSIZE",      (0, 1), (-1, -1), 8.8),
    ]
    if alt:
        for i in range(1, len(data)):
            if i % 2 == 0:
                tbl_style.append(("BACKGROUND", (0, i), (-1, i), ROW_ALT))
    t.setStyle(TableStyle(tbl_style))
    return t


def highlight_box(text, bg=PALE_TEAL, border_color=TEAL, style_key="note"):
    """Coloured callout box."""
    data = [[Paragraph(text, S[style_key])]]
    t = Table(data, colWidths=[CONTENT_W])
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0, 0), (-1, -1), bg),
        ("LINEAFTER",     (0, 0), (0, -1),  2, border_color),
        ("LINEBEFORE",    (0, 0), (0, -1),  4, border_color),
        ("TOPPADDING",    (0, 0), (-1, -1), 7),
        ("BOTTOMPADDING", (0, 0), (-1, -1), 7),
        ("LEFTPADDING",   (0, 0), (-1, -1), 12),
        ("RIGHTPADDING",  (0, 0), (-1, -1), 10),
        ("ROUNDEDCORNERS", [3]),
    ]))
    return t


def pearl_box(text):
    return highlight_box(f"🔑  {text}", bg=PALE_ORANGE,
                         border_color=ORANGE, style_key="pearl")


def warning_box(text):
    return highlight_box(f"⚠  {text}", bg=HexColor("#FADBD8"),
                         border_color=RED, style_key="warning")


def p(text, sty="body"):
    return Paragraph(text, S[sty])

def b(text):
    return Paragraph(f"• {text}", S["bullet"])

def b2(text):
    return Paragraph(f"◦ {text}", S["bullet2"])

def sp(n=6):
    return Spacer(1, n)

def hr():
    return HRFlowable(width="100%", thickness=0.5, color=GRAY_MID, spaceAfter=4, spaceBefore=4)

# ── Page template with header/footer ─────────────────────────────────────────
def on_page(canvas, doc):
    canvas.saveState()
    # Top rule
    canvas.setStrokeColor(TEAL)
    canvas.setLineWidth(1.5)
    canvas.line(1.8*cm, H - 1.6*cm, W - 1.8*cm, H - 1.6*cm)
    # Header text
    canvas.setFont("Helvetica-Bold", 7.5)
    canvas.setFillColor(NAVY)
    canvas.drawString(1.8*cm, H - 1.4*cm, "TURNER SYNDROME")
    canvas.setFont("Helvetica", 7.5)
    canvas.setFillColor(GRAY_MID)
    canvas.drawRightString(W - 1.8*cm, H - 1.4*cm, "Neonatologist / Paediatrician Reference")
    # Bottom rule
    canvas.setStrokeColor(TEAL)
    canvas.line(1.8*cm, 1.5*cm, W - 1.8*cm, 1.5*cm)
    # Page number
    canvas.setFont("Helvetica", 7.5)
    canvas.setFillColor(GRAY_MID)
    canvas.drawCentredString(W / 2, 1.0*cm, f"Page {doc.page}")
    canvas.restoreState()

def on_first_page(canvas, doc):
    pass  # cover page – no header/footer

# ── Build story ───────────────────────────────────────────────────────────────
story = []

# ══════════════════════════════════════════════════════════════════════════════
# COVER PAGE
# ══════════════════════════════════════════════════════════════════════════════
# Full-page navy background
class FullPageCover(Flowable):
    def __init__(self, w, h):
        super().__init__()
        self.width  = w
        self.height = h
    def draw(self):
        c = self.canv
        c.setFillColor(NAVY)
        c.rect(0, 0, self.width, self.height, fill=1, stroke=0)
        c.setFillColor(TEAL)
        c.rect(0, self.height * 0.30, self.width, 6, fill=1, stroke=0)
        c.rect(0, self.height * 0.70, self.width, 6, fill=1, stroke=0)

story.append(FullPageCover(W, H))
story.append(Spacer(1, 5.5*cm))
story.append(p("TURNER SYNDROME", "cover_title"))
story.append(sp(12))
story.append(p("In-Depth Clinical Reference for Neonatologists & Paediatricians", "cover_sub"))
story.append(sp(20))
story.append(p("Genetics · Pathogenesis · Clinical Features · Neonatal Presentation", "cover_tag"))
story.append(sp(6))
story.append(p("Diagnosis · Management · Surveillance · Pearls", "cover_tag"))
story.append(sp(60))
story.append(p("Sources: Robbins Pathology · Campbell-Walsh Urology · The Developing Human", "cover_tag"))
story.append(sp(4))
story.append(p("PubMed Systematic Reviews 2025  |  Orris Medical Education  |  July 2026", "cover_tag"))
story.append(PageBreak())

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 1 – DEFINITION & HISTORY
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("1.", "Definition and Historical Background", NAVY))
story.append(sp(6))
story.append(p(
    "Turner syndrome (TS) is a chromosomal disorder resulting from <b>complete or partial "
    "monosomy of the X chromosome</b>, characterised by <b>hypogonadism in phenotypic females</b>. "
    "It is the most common sex chromosome abnormality in females."
))
story.append(sp(4))
story.append(b("<b>1938</b> – Henry Turner first described the triad of sexual infantilism, webbed neck, and cubitus valgus as a distinct clinical entity."))
story.append(b("<b>1930</b> – Otto Ullrich had described similar features; hence the European term 'Ullrich–Turner syndrome'."))
story.append(b("<b>1959</b> – Ford et al. identified the chromosomal basis: the 45,X karyotype."))
story.append(b("Gonadal dysgenesis was subsequently recognised as a core component of the syndrome."))
story.append(sp(8))

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 2 – EPIDEMIOLOGY
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("2.", "Epidemiology", NAVY))
story.append(sp(6))

epi_rows = [
    ["Incidence in live-born females", "~1 in 2,000–3,000"],
    ["Survival of 45,X conceptuses", "Only ~1% of monosomy X embryos survive to term"],
    ["In utero lethality", "45,X is the most common cytogenetic abnormality in miscarried fetuses"],
    ["% of chromosomal abortions", "~18% of all chromosomally caused spontaneous abortions"],
    ["Origin of the error", "~75–80% cases: missing chromosome is PATERNAL (sperm defect)"],
]
story.append(two_col_table(["Parameter", "Data"], epi_rows))
story.append(sp(5))
story.append(highlight_box(
    "The fact that only ~1% of 45,X conceptions survive to term highlights how lethal complete "
    "monosomy X is in utero. The live-born infant with Turner syndrome represents the 'milder end' "
    "of a profoundly severe prenatal spectrum.",
    bg=LIGHT_BLUE, border_color=NAVY, style_key="note"
))
story.append(sp(8))

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 3 – GENETICS
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("3.", "Genetics and Karyotypes", TEAL))
story.append(sp(6))

story.append(p("3a. Classic Karyotype", "h2"))
story.append(p(
    "<b>45,X (monosomy X)</b> – present in approximately <b>57%</b> of cases. "
    "A single maternal X chromosome, with the paternal sex chromosome absent."
))
story.append(sp(5))

story.append(p("3b. Structural Abnormalities of the X (~14%)", "h2"))
story.append(p("In order of frequency:"))
story.append(sp(3))
struct_rows = [
    ["46,X,i(X)(q10)\nIsochromosome Xq",
     "Most common structural variant. Duplication of long arm (Xq), loss of short arm (Xp). "
     "Highest association with autoimmune thyroid disease."],
    ["46,X,r(X)\nRing chromosome",
     "Deletions of both Xp and Xq arms form a ring. Variable — sometimes more severe phenotype."],
    ["46,X,del(Xp) or del(Xq)\nPartial deletions",
     "Partial loss of short or long arm. Phenotype depends on region deleted."],
]
story.append(two_col_table(["Karyotype", "Description"], struct_rows, col_widths=[CONTENT_W*0.28, CONTENT_W*0.72]))
story.append(sp(7))

story.append(p("3c. Mosaicism (~29%)", "h2"))
story.append(p("Two or more chromosomally distinct cell lines co-existing:"))
story.append(sp(3))
mos_rows = [
    ["45,X / 46,XX", "Most common mosaic (10–15%). May appear nearly normal; some can conceive."],
    ["45,X / 46,XY", "2–5%. CRITICAL — 12–20% risk of gonadoblastoma. Prophylactic gonadectomy required."],
    ["45,X / 47,XXX", "Triple X mosaicism"],
    ["45,X / 46,X,i(X)(q10)", "Combined structural + mosaic"],
]
story.append(two_col_table(["Mosaic Karyotype", "Clinical Significance"], mos_rows))
story.append(sp(5))
story.append(highlight_box(
    "Clinician note: Conventional cytogenetics detects mosaicism in ~30% of TS patients. "
    "With FISH and PCR, this rises to 75%. The proportion of 45,X cells determines phenotypic severity — "
    "higher 45,X proportion = more severe features.",
    bg=LIGHT_BLUE, border_color=TEAL, style_key="note"
))
story.append(sp(7))

story.append(p("3d. Y Chromosome Material — Most Critical Finding", "h2"))
story.append(b("Present in <b>5–10%</b> of Turner syndrome patients (complete Y or translocated Y fragments)."))
story.append(b("Risk of <b>gonadoblastoma: 12–20%</b>."))
story.append(b("Gonadoblastoma progresses to dysgerminoma or other malignant GCT in <b>18–35%</b> of cases."))
story.append(b("Reported as early as <b>5 months of age</b> — early detection and prophylactic gonadectomy is essential."))
story.append(b("Detection: use <b>FISH or PCR</b> in ALL TS patients — conventional karyotype may miss occult Y material."))
story.append(sp(5))
story.append(warning_box(
    "Detection of Y-chromosome material mandates prompt prophylactic laparoscopic gonadectomy — "
    "regardless of patient age — due to gonadoblastoma risk as early as 5 months."
))
story.append(sp(8))

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 4 – PATHOGENESIS
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("4.", "Pathogenesis — Molecular Mechanisms", NAVY))
story.append(sp(6))

story.append(p("4a. SHOX Gene Haploinsufficiency", "h2"))
shox_rows = [
    ["Gene location", "SHOX at Xp22.33 — pseudoautosomal region 1 (PAR1)"],
    ["X-inactivation status", "Escapes X-inactivation → normally 2 copies in both males and females"],
    ["Effect in Turner syndrome", "Only 1 copy (haploinsufficiency) → short stature, Madelung deformity, skeletal anomalies"],
    ["Expression sites", "Growth plates of radius, ulna, tibia, fibula during fetal life"],
    ["Mirror image", "Klinefelter syndrome (extra X/SHOX) → tall stature — elegant confirmation of SHOX role"],
    ["In normal population", "SHOX deletions found in 2–5% of otherwise normal short children"],
]
story.append(two_col_table(["Feature", "Detail"], shox_rows))
story.append(sp(7))

story.append(p("4b. Ovarian Failure Mechanism", "h2"))
story.append(p(
    "Normal fetal ovaries contain up to <b>7 million oocytes</b> at peak. This reduces to ~400,000 at menarche "
    "and fewer than 10,000 at menopause. In Turner syndrome:"
))
story.append(b("Fetal ovaries develop <b>normally</b> through the first <b>18 weeks of gestation</b>."))
story.append(b("Absence of the second X chromosome → <b>accelerated apoptosis of oocytes</b>."))
story.append(b("By <b>age 2 years</b>, virtually no oocytes remain → streak ovaries."))
story.append(b("Both X chromosomes are active during oogenesis and are essential for ovarian maintenance."))
story.append(b("Follicular cells that normally protect oocytes are inadequate, accelerating oocyte loss."))
story.append(sp(5))
story.append(pearl_box(
    '"Menopause occurs before menarche" — the defining pathophysiological statement of Turner syndrome ovarian failure.'
))
story.append(sp(5))

story.append(p("4c. Streak Ovaries — Pathology", "h2"))
story.append(p(
    "Streak ovaries are white, fibrous structures <b>2–3 cm long × 0.5 cm wide</b>, located in the broad ligament. "
    "Histologically: interlacing waves of dense fibrous stroma, devoid of oocytes and follicles — "
    "otherwise indistinguishable from normal ovarian stroma. "
    "Result: <b>low estrogen, low androgen, elevated FSH and LH</b> (hypergonadotropic hypogonadism)."
))
story.append(sp(5))

story.append(p("4d. Genotype–Phenotype Correlation", "h2"))
story.append(b("Somatic features (neck webbing, cardiac, lymphatic) → determined primarily by genes on the <b>short arm (Xp)</b>."))
story.append(b("Fertility and menstruation → affected by genes on the <b>long arm (Xq)</b>."))
story.append(b("SHOX haploinsufficiency explains short stature but not cardiac or metabolic features — multiple Xp genes are involved."))
story.append(b("In ~80% of cases the retained X chromosome is <b>maternal in origin</b> → error in paternal gametogenesis."))
story.append(sp(8))

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 5 – CLINICAL FEATURES
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("5.", "Clinical Features — System by System", TEAL))
story.append(sp(6))

# Diagram
if os.path.exists(IMG_PATH):
    img = Image(IMG_PATH, width=9*cm, height=11*cm)
    img.hAlign = "CENTER"
    story.append(img)
    story.append(sp(3))
    story.append(p(
        "Fig. 1 — Clinical features and karyotypes of Turner syndrome.\n"
        "(Source: Robbins & Kumar Basic Pathology, Fig. 4.20 / Robbins, Cotran & Kumar Pathologic Basis of Disease, Fig. 5.26)",
        "caption"
    ))
    story.append(sp(8))

story.append(p("5a. Neonatal Presentation — What the Neonatologist Sees First", "h2"))
neo_rows = [
    ["Lymphedema of hands/feet", "Most common neonatal finding. Dorsal pitting oedema from lymph stasis."],
    ["Cystic hygroma / nuchal oedema", "Markedly distended lymphatics at nape of neck in utero → resolves → webbing."],
    ["Webbing of neck (pterygium colli)", "Persistent skin fold; bilateral; low posterior hairline."],
    ["Broad / shield chest", "Widely spaced nipples on a broad thorax."],
    ["Cubitus valgus", "Increased carrying angle at elbow."],
    ["Short 4th metacarpal", "Brachymetacarpia — positive metacarpal sign."],
    ["Hypoplastic nails", "Dysplastic nails at birth."],
    ["Multiple pigmented nevi", "May increase with age."],
    ["High-arched palate", "Common orofacial feature."],
    ["Ptosis, hypertelorism, retrognathia", "Characteristic facial features."],
    ["Ear malformations", "Associated with hearing problems."],
    ["Peripheral lymphedema at birth", "Feet and hands; key clue to diagnosis in the delivery room."],
]
story.append(two_col_table(["Neonatal Feature", "Details"], neo_rows, col_widths=[CONTENT_W*0.35, CONTENT_W*0.65]))
story.append(sp(5))
story.append(pearl_box(
    "The neonate with bilateral dorsal foot oedema and/or cystic hygroma in a female infant "
    "must be karyotyped for Turner syndrome — this is the delivery room trigger."
))
story.append(sp(8))

story.append(p("5b. Cardiovascular — Most Common Cause of Mortality", "h2"))
story.append(p(
    "Congenital heart disease affects <b>25–50%</b> of patients with Turner syndrome. "
    "Predominantly <b>left-sided cardiovascular abnormalities</b>."
))
story.append(sp(3))
cardio_rows = [
    ["Bicuspid aortic valve (BAV)", "Most common structural CHD in TS; may be missed on routine echo."],
    ["Coarctation of the aorta", "Classic association. ~5% of girls with coarctation have Turner syndrome."],
    ["Aortic root dilation", "Present in ~30% of TS patients."],
    ["Aortic dissection", "100-fold higher risk than general population — can occur in young women."],
    ["Partial anomalous pulmonary venous drainage", "Less common but seen."],
    ["Hypertension", "Common; multifactorial — renal and cardiovascular."],
]
story.append(two_col_table(["Lesion", "Significance"], cardio_rows))
story.append(sp(5))
story.append(warning_box(
    "Cardiovascular abnormalities are the most common cause of death in childhood and the most "
    "important cause of increased overall mortality in Turner syndrome. Aortic dissection risk is "
    "100-fold elevated — all women with TS require cardiac clearance before attempting pregnancy."
))
story.append(sp(8))

story.append(p("5c. Renal — Frequently Missed", "h2"))
story.append(p(
    "<b>33–60%</b> of patients with Turner syndrome have structural or positional renal abnormalities "
    "(most common in classic 45,X karyotype)."
))
story.append(sp(3))
renal_rows = [
    ["Horseshoe kidney", "~10%"],
    ["Duplication of collecting system or renal agenesis", "~20%"],
    ["Malrotation", "~15%"],
    ["Multiple renal arteries", "~90% (noted during cardiovascular evaluation)"],
]
story.append(two_col_table(["Renal Anomaly", "Frequency"], renal_rows, col_widths=[CONTENT_W*0.6, CONTENT_W*0.4]))
story.append(sp(8))

story.append(p("5d. Reproductive / Endocrine", "h2"))
story.append(b("Streak ovaries: fibrous strands devoid of oocytes."))
story.append(b("<b>Primary amenorrhea</b> in ~90% — genitalia remain infantile, minimal breast development, sparse pubic/axillary hair."))
story.append(b("Elevated FSH/LH: <b>hypergonadotropic hypogonadism</b>."))
story.append(b("Spontaneous puberty in up to <b>30%</b> (especially mosaic TS, particularly 45,X/46,XX)."))
story.append(b("Spontaneous conception in a very small number of 45,X/46,XX mosaics (~2–5%)."))
story.append(sp(7))

story.append(p("5e. Thyroid", "h2"))
story.append(b("Autoimmune thyroiditis (Hashimoto's) is significantly more common in TS."))
story.append(b("Most common in women with <b>isochromosome Xq</b> [i(Xq) karyotype]."))
story.append(b("Up to <b>50%</b> develop clinical <b>hypothyroidism</b> over their lifetime."))
story.append(b("Mechanism: autoantibodies against thyroid gland."))
story.append(b("Screen TSH at diagnosis and annually thereafter."))
story.append(sp(7))

story.append(p("5f. Metabolic / Hepatic", "h2"))
story.append(b("Glucose intolerance and <b>insulin resistance</b>."))
story.append(b("<b>Obesity</b> — higher prevalence than age-matched controls."))
story.append(b("<b>Non-alcoholic fatty liver disease (NAFLD)</b>."))
story.append(b("Some develop full <b>metabolic syndrome</b>."))
story.append(b("<b>Important: Growth hormone therapy worsens insulin resistance</b> — monitor glucose carefully during rhGH treatment."))
story.append(sp(7))

story.append(p("5g. Neurodevelopment / Cognitive", "h2"))
story.append(b("General intellect: usually within normal limits — <b>NOT associated with intellectual disability</b> in the classic sense."))
story.append(b("Specific deficit: <b>visual-spatial information processing</b> (non-verbal learning disability)."))
story.append(b("Difficulty with maths, spatial tasks, social perception, executive function."))
story.append(b("Normal verbal IQ; affected performance IQ."))
story.append(b("Higher rates of ADHD, anxiety, social difficulties."))
story.append(sp(7))

story.append(p("5h. Auditory / ENT", "h2"))
story.append(b("Sensorineural hearing loss (SNHL) — progressive, more prominent in adults."))
story.append(b("Recurrent otitis media in children (Eustachian tube dysfunction)."))
story.append(b("Routine audiological surveillance from childhood is recommended."))
story.append(sp(7))

story.append(p("5i. Musculoskeletal / Orthopaedic", "h2"))
story.append(b("<b>Cubitus valgus</b> — increased carrying angle."))
story.append(b("<b>Short 4th metacarpal</b> — positive metacarpal sign (Archibald sign)."))
story.append(b("<b>Scoliosis</b> in up to 10%."))
story.append(b("Osteoporosis in adulthood from estrogen deficiency."))
story.append(b("Short stature: average adult height <b>143–144 cm</b> without treatment (most populations)."))
story.append(b("<b>Madelung deformity</b> of the wrist (from SHOX haploinsufficiency)."))
story.append(sp(8))

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 6 – PRENATAL DIAGNOSIS
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("6.", "Prenatal Diagnosis", NAVY))
story.append(sp(6))

story.append(p("Ultrasonographic features raising suspicion for Turner syndrome:"))
story.append(b("<b>Increased nuchal translucency</b> (most common and earliest finding)"))
story.append(b("Cystic hygroma / nuchal oedema"))
story.append(b("Lymphoedema"))
story.append(b("Coarctation of the aorta on fetal echo"))
story.append(b("Renal anomalies"))
story.append(b("Hydrops fetalis"))
story.append(sp(5))
story.append(p(
    "Karyotyping options: <b>Chorionic villus sampling (CVS)</b> or <b>amniocentesis</b>. "
    "Cell-free fetal DNA (cfDNA) screening can detect monosomy X but requires confirmatory karyotyping."
))
story.append(sp(5))
story.append(warning_box(
    "CRITICAL COUNSELLING POINT — Ascertainment Bias: If 45,X/46,XX or 45,X/46,XY mosaicism is "
    "INCIDENTALLY discovered prenatally (e.g., on NIPT), approximately 90% of these fetuses will have "
    "a NORMAL phenotype at birth. This has profound implications — do not counsel as typical TS. "
    "However, a purely 45,X karyotype found prenatally carries a prognosis similar to postnatal TS diagnosis."
))
story.append(sp(8))

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 7 – DIAGNOSIS POST-NATAL
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("7.", "Postnatal Diagnosis", TEAL))
story.append(sp(6))

story.append(p("When to Suspect Turner Syndrome:", "h2"))
suspect_rows = [
    ["Neonate", "Lymphoedema of hands/feet, cystic hygroma, coarctation, hydrops fetalis in a female infant"],
    ["Child", "Short stature (below 3rd percentile), unexplained growth failure"],
    ["Adolescent", "Primary amenorrhea + short stature — the classic presentation"],
    ["Any age", "Short stature + primary amenorrhea → always karyotype"],
    ["Incidental", "~5% of girls presenting with coarctation of aorta have Turner syndrome"],
]
story.append(two_col_table(["Age / Setting", "Clinical Trigger"], suspect_rows))
story.append(sp(6))

story.append(p("Investigations at Diagnosis:", "h2"))
invest_rows = [
    ["Karyotype (≥30 cells)", "Confirm diagnosis; detect mosaicism. Minimum 30 cells to reduce false negative."],
    ["FISH or PCR for Y material", "ALL Turner syndrome patients — detect occult Y chromosome sequences."],
    ["Echocardiogram", "BAV, coarctation, aortic root diameter — baseline and periodic."],
    ["Renal ultrasound", "Structural renal anomalies (33–60% prevalence)."],
    ["TSH + thyroid antibodies", "Autoimmune thyroiditis screening."],
    ["FSH, LH, Oestradiol", "Confirm hypergonadotropic hypogonadism."],
    ["Blood pressure (both arms)", "Coarctation surveillance — compare bilateral BP."],
    ["Audiogram", "Sensorineural hearing loss baseline."],
    ["Bone age (X-ray left hand)", "Growth assessment and treatment planning."],
    ["Fasting glucose, insulin, lipids", "Metabolic syndrome screening."],
    ["Liver function tests", "NAFLD surveillance."],
    ["IGF-1", "Before growth hormone therapy."],
]
story.append(two_col_table(["Investigation", "Rationale"], invest_rows))
story.append(sp(8))

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 8 – MANAGEMENT
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("8.", "Management — Neonatologist / Paediatrician Approach", NAVY))
story.append(sp(6))

story.append(p("8a. Neonatal Period — Immediate Steps", "h2"))
neo_mgmt_rows = [
    ["1", "Confirm karyotype (≥30 cells)", "Diagnostic certainty; detect mosaicism"],
    ["2", "FISH or PCR for Y chromosome in ALL cases", "Gonadoblastoma risk stratification — non-negotiable"],
    ["3", "If Y material confirmed → prophylactic laparoscopic gonadectomy", "Risk 12–20%; reported from 5 months of age"],
    ["4", "Echocardiogram", "BAV, coarctation — may require surgical intervention"],
    ["5", "Renal ultrasound", "Structural anomalies affect renal tract management"],
    ["6", "Monitor and manage lymphoedema", "Usually resolves; gentle compression if needed"],
    ["7", "Feeding support if needed", "Some neonates have poor suck/feeding difficulties"],
    ["8", "Refer to paediatric endocrinology", "Long-term GH and hormone planning"],
    ["9", "Genetic counselling for family", "Recurrence risk (sporadic in most cases) and implications"],
]
story.append(Table(
    [[Paragraph(h, S["th"]) for h in ["Step", "Action", "Rationale"]]] +
    [[Paragraph(str(r[i]), S["td_b"] if i == 1 else S["td"]) for i in range(3)] for r in neo_mgmt_rows],
    colWidths=[CONTENT_W*0.08, CONTENT_W*0.42, CONTENT_W*0.50],
    repeatRows=1,
    style=TableStyle([
        ("BACKGROUND",    (0, 0), (-1, 0),  TABLE_HDR),
        ("TEXTCOLOR",     (0, 0), (-1, 0),  white),
        ("GRID",          (0, 0), (-1, -1), 0.4, HexColor("#BFC9CA")),
        ("TOPPADDING",    (0, 0), (-1, -1), 5),
        ("BOTTOMPADDING", (0, 0), (-1, -1), 5),
        ("LEFTPADDING",   (0, 0), (-1, -1), 5),
        ("RIGHTPADDING",  (0, 0), (-1, -1), 5),
        ("VALIGN",        (0, 0), (-1, -1), "MIDDLE"),
        ("FONTSIZE",      (0, 1), (-1, -1), 8.5),
        ("BACKGROUND",    (0, 2), (-1, 2),  ROW_ALT),
        ("BACKGROUND",    (0, 4), (-1, 4),  ROW_ALT),
        ("BACKGROUND",    (0, 6), (-1, 6),  ROW_ALT),
        ("BACKGROUND",    (0, 8), (-1, 8),  ROW_ALT),
    ])
))
story.append(sp(7))

story.append(p("8b. Growth Hormone Therapy (Children)", "h2"))
story.append(b("Recombinant human growth hormone (rhGH): <b>FDA-approved specifically for Turner syndrome</b> since 1996."))
story.append(b("Start age: typically <b>4–6 years</b> (or earlier if growth falls significantly below TS norms)."))
story.append(b("Dose: <b>0.045–0.050 mg/kg/day</b> — higher than for GH deficiency."))
story.append(b("Expected adult height gain: <b>5–8 cm above predicted untreated height</b>."))
story.append(b("Continue until bone age ~14–15 years or growth velocity becomes insufficient."))
story.append(b("<b>Monitor:</b> IGF-1, fasting glucose/insulin (GH worsens IR), thyroid function, scoliosis."))
story.append(b("Oxandrolone (low-dose anabolic steroid) may be added after age 9 years to augment height gain."))
story.append(sp(7))

story.append(p("8c. Estrogen Replacement Therapy (Puberty Induction)", "h2"))
story.append(b("Initiated at <b>age 12–15 years</b> if spontaneous puberty has not occurred."))
story.append(b("Start with <b>low-dose transdermal 17β-oestradiol</b> — the most physiological route."))
story.append(b("Gradually increase dose over <b>2–3 years</b> to mimic natural puberty."))
story.append(b("Add <b>progestogen</b> after 2 years or first breakthrough bleed → cyclic withdrawal bleeds."))
story.append(b("Goals: breast development, uterine growth, bone mineralisation, cardiovascular protection."))
story.append(b("Long-term HRT continued until natural age of menopause (~50 years)."))
story.append(sp(7))

story.append(p("8d. Fertility Considerations", "h2"))
story.append(b("Majority: infertile due to streak ovaries."))
story.append(b("<b>Donor egg IVF</b> is the main fertility option — uterus must be prepared with oestrogen."))
story.append(b("For mosaic TS with spontaneous menses: <b>oocyte cryopreservation</b> is evolving but still experimental."))
story.append(b("<b>Mandatory cardiac assessment</b> (aortic root MRI) before any pregnancy attempt."))
story.append(b("Pregnancy carries elevated risk of aortic dissection — multidisciplinary planning required."))
story.append(sp(7))

story.append(p("8e. Gonadoblastoma Prophylaxis", "h2"))
story.append(b("If Y-chromosome material detected → <b>laparoscopic prophylactic gonadectomy</b> — timely."))
story.append(b("Streak gonads confirmed in pure <b>45,X</b> patients (no Y material) → do NOT need removal."))
story.append(b("Age of occurrence is variable → do not delay once Y material is confirmed."))
story.append(sp(8))

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 9 – SURVEILLANCE TABLE
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("9.", "Long-Term Surveillance Schedule", TEAL))
story.append(sp(6))

surv_rows = [
    ["Cardiac (echo or MRI)", "Every 3–5 years; more frequent if BAV or aortic dilation"],
    ["Blood pressure", "Annually"],
    ["Thyroid (TSH)", "Annually"],
    ["Hearing (audiogram)", "Every 3–5 years; earlier if symptoms"],
    ["Fasting glucose / lipids", "Every 2–3 years"],
    ["Liver function tests (LFT)", "Annually"],
    ["Bone density (DEXA)", "At transition to adulthood and periodically"],
    ["Ophthalmology", "Strabismus, amblyopia — childhood screening"],
    ["Renal function and BP", "If structural renal anomalies present"],
    ["Psychosocial / neurodevelopmental", "Learning support, ADHD/anxiety assessment"],
    ["Bladder/urethral cancer", "Awareness — increased risk in adult TS (British cohort data)"],
]
story.append(two_col_table(["System / Investigation", "Frequency / Notes"], surv_rows))
story.append(sp(8))

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 10 – COMPLICATIONS SUMMARY
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("10.", "Complications Summary", NAVY))
story.append(sp(6))

comp_rows = [
    ["Cardiovascular", "Coarctation, BAV, aortic dissection", "#1 cause of death — 100× dissection risk"],
    ["Gonadal", "Streak ovaries, primary amenorrhea", "Hypergonadotropic hypogonadism"],
    ["Oncologic", "Gonadoblastoma", "ONLY if Y material present; from 5 months"],
    ["Thyroid", "Autoimmune hypothyroidism", "Up to 50% lifetime risk"],
    ["Metabolic", "Insulin resistance, metabolic syndrome", "GH therapy worsens IR"],
    ["Renal", "Horseshoe kidney, duplication", "33–60% affected"],
    ["Neurocognitive", "Visuospatial deficits, non-verbal LD", "Normal verbal IQ preserved"],
    ["Auditory", "SNHL, otitis media", "Progressive with age"],
    ["Skeletal", "Short stature, osteoporosis, scoliosis", "SHOX haploinsufficiency"],
    ["Hepatic", "NAFLD", "Screen LFTs; avoid alcohol counselling"],
]
story.append(Table(
    [[Paragraph(h, S["th"]) for h in ["System", "Complication", "Key Point"]]] +
    [[Paragraph(str(r[i]), S["td_b"] if i==1 else S["td"]) for i in range(3)] for r in comp_rows],
    colWidths=[CONTENT_W*0.22, CONTENT_W*0.38, CONTENT_W*0.40],
    repeatRows=1,
    style=TableStyle([
        ("BACKGROUND",    (0, 0), (-1, 0),  NAVY),
        ("TEXTCOLOR",     (0, 0), (-1, 0),  white),
        ("GRID",          (0, 0), (-1, -1), 0.4, HexColor("#BFC9CA")),
        ("TOPPADDING",    (0, 0), (-1, -1), 5),
        ("BOTTOMPADDING", (0, 0), (-1, -1), 5),
        ("LEFTPADDING",   (0, 0), (-1, -1), 5),
        ("RIGHTPADDING",  (0, 0), (-1, -1), 5),
        ("VALIGN",        (0, 0), (-1, -1), "MIDDLE"),
        ("FONTSIZE",      (0, 1), (-1, -1), 8.5),
        ("BACKGROUND",    (0, 2), (-1, 2),  ROW_ALT),
        ("BACKGROUND",    (0, 4), (-1, 4),  ROW_ALT),
        ("BACKGROUND",    (0, 6), (-1, 6),  ROW_ALT),
        ("BACKGROUND",    (0, 8), (-1, 8),  ROW_ALT),
        ("BACKGROUND",    (0, 10),(-1, 10), ROW_ALT),
    ])
))
story.append(sp(8))

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 11 – CLINICAL PEARLS
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("11.", "Key Clinical Pearls for Exams and Practice", TEAL))
story.append(sp(6))

pearls = [
    "Most 45,X conceptions abort (>99%) — Turner syndrome in live births is the 'milder end' of a profoundly severe prenatal spectrum.",
    "The missing X chromosome is usually PATERNAL (~75–80%) — the error is in paternal gametogenesis (sperm).",
    "Cystic hygroma in a female fetus on antenatal ultrasound → Turner syndrome until proven otherwise — karyotype.",
    "~5% of girls presenting with coarctation of the aorta have Turner syndrome — always karyotype.",
    "'Menopause before menarche' — ovarian failure is complete by age 2 years, yet puberty does not fail until adolescence.",
    "Y material detection (FISH/PCR) is mandatory in ALL Turner syndrome patients — gonadoblastoma can occur at 5 months.",
    "GH therapy worsens insulin resistance — monitor fasting glucose and insulin before and during treatment.",
    "Thyroid autoantibodies are most common with isochromosome Xq [i(Xq)] — screen this subgroup most aggressively.",
    "Prenatal ascertainment bias: incidentally detected mosaic TS (45,X/46,XX or 45,X/46,XY) prenatally → ~90% will be NORMAL phenotype at birth — counsel accordingly.",
    "Aortic dissection risk is 100-fold elevated — ALL women with Turner syndrome require formal cardiac MRI clearance before any pregnancy attempt.",
    "Normal intellect is the rule — but specific visuospatial processing deficits (non-verbal learning disability) require educational support.",
    "Spontaneous puberty occurs in up to 30% of Turner syndrome patients — do not assume total pubertal failure without follow-up.",
    "Short 4th metacarpal (positive Archibald/metacarpal sign) is a simple bedside clue in children.",
    "The combination of SHORT STATURE + PRIMARY AMENORRHEA in any adolescent female must prompt karyotyping — this is Turner syndrome until proven otherwise.",
]
for i, pearl in enumerate(pearls, 1):
    story.append(pearl_box(f"{i}. {pearl}"))
    story.append(sp(4))
story.append(sp(6))

# ══════════════════════════════════════════════════════════════════════════════
# SECTION 12 – RECENT EVIDENCE
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("12.", "Recent Evidence — Systematic Reviews 2024–2026", NAVY))
story.append(sp(6))

evid_rows = [
    ["PMID 41243107\n(2025, Ann Med)",
     "Global prevalence of autoimmune diseases in Turner syndrome: systematic review and meta-analysis",
     "Confirms significantly elevated global prevalence of autoimmune diseases in TS. Reinforces need for lifelong autoimmune surveillance, especially thyroid."],
    ["PMID 39743222\n(2025, Congenit Anom Kyoto)",
     "Karyotype and phenotype association in Turner syndrome with non-mosaic X chromosome structural rearrangements: systematic review",
     "Refines karyotype-specific phenotype counselling for structural X rearrangements — helps predict clinical severity by karyotype subtype."],
    ["PMID 40557696\n(2025, Am J Med Genet C)",
     "The impact of karyotype on congenital heart diseases in Turner syndrome: systematic review and meta-analysis",
     "Karyotype significantly impacts type and severity of CHD in TS. Supports karyotype-guided cardiac surveillance — 45,X has highest cardiac burden."],
]
story.append(Table(
    [[Paragraph(h, S["th"]) for h in ["Reference", "Title", "Key Finding"]]] +
    [[Paragraph(str(r[i]), S["td_b"] if i==0 else S["td"]) for i in range(3)] for r in evid_rows],
    colWidths=[CONTENT_W*0.20, CONTENT_W*0.42, CONTENT_W*0.38],
    repeatRows=1,
    style=TableStyle([
        ("BACKGROUND",    (0, 0), (-1, 0),  NAVY),
        ("TEXTCOLOR",     (0, 0), (-1, 0),  white),
        ("GRID",          (0, 0), (-1, -1), 0.4, HexColor("#BFC9CA")),
        ("TOPPADDING",    (0, 0), (-1, -1), 6),
        ("BOTTOMPADDING", (0, 0), (-1, -1), 6),
        ("LEFTPADDING",   (0, 0), (-1, -1), 5),
        ("RIGHTPADDING",  (0, 0), (-1, -1), 5),
        ("VALIGN",        (0, 0), (-1, -1), "TOP"),
        ("FONTSIZE",      (0, 1), (-1, -1), 8.5),
        ("BACKGROUND",    (0, 2), (-1, 2),  ROW_ALT),
    ])
))
story.append(sp(8))

# ══════════════════════════════════════════════════════════════════════════════
# SOURCES
# ══════════════════════════════════════════════════════════════════════════════
story.append(hr())
story.append(sp(4))
story.append(p("Sources", "h2"))
sources = [
    "Robbins & Kumar Basic Pathology (Robbins Pathology) — Chapter 4, Fig. 4.20",
    "Robbins, Cotran & Kumar Pathologic Basis of Disease — Chapter 5, pp. 168–169",
    "Campbell-Walsh-Wein Urology (3-Volume Set) — Chapter 48: Syndromes of Gonadal Dysgenesis",
    "The Developing Human: Clinically Oriented Embryology, 9th ed. — p. 1239",
    "Thompson & Thompson Genetics and Genomics in Medicine, 9th ed.",
    "PubMed PMID 41243107 — Hwang et al. (2025). Autoimmune diseases in Turner syndrome. Ann Med.",
    "PubMed PMID 39743222 — Tanoshima et al. (2025). Karyotype-phenotype in Turner syndrome. Congenit Anom Kyoto.",
    "PubMed PMID 40557696 — Álvarez-Nava et al. (2025). CHD karyotype in Turner syndrome. Am J Med Genet C.",
]
for src in sources:
    story.append(b(src))
story.append(sp(10))
story.append(p("Orris Medical Education  |  Turner Syndrome Neonatologist/Paediatrician Reference  |  July 2026", "source"))

# ── Build PDF ─────────────────────────────────────────────────────────────────
doc.build(
    story,
    onFirstPage=on_first_page,
    onLaterPages=on_page
)
print(f"PDF written to: {OUT}")
Running Command

cd /tmp/workspace/turner-syndrome && python generate_pdf.py 2>&1

Editing File

~/turner-syndrome/generate_pdf.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/turner-syndrome/generate_pdf.py'
Writing File

~/turner-syndrome/generate_pdf.py

#!/usr/bin/env python3
"""Generate Turner Syndrome comprehensive PDF using ReportLab."""

import urllib.request, os
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib.colors import HexColor, black, white
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, Image, PageBreak, BaseDocTemplate, PageTemplate, Frame
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus.flowables import Flowable

OUT = "/tmp/workspace/turner-syndrome/Turner_Syndrome_Neonatologist_Guide.pdf"

NAVY       = HexColor("#1A3A5C")
TEAL       = HexColor("#1A7A8A")
LIGHT_BLUE = HexColor("#D6EAF8")
PALE_TEAL  = HexColor("#E8F6F3")
PALE_ORANGE= HexColor("#FEF9E7")
TABLE_HDR  = HexColor("#1A7A8A")
ROW_ALT    = HexColor("#EBF5FB")
ORANGE     = HexColor("#E67E22")
RED        = HexColor("#C0392B")
GRAY_MID   = HexColor("#AAB7B8")
GRAY_LIGHT = HexColor("#F2F3F4")

# Download diagram
IMG_URL  = "https://cdn.orris.care/cdss_images/edcafa4b45a5638f8ec22d2efd3573f71180bd82ce6de8fe6d0e9b572edc1876.png"
IMG_PATH = "/tmp/workspace/turner-syndrome/turner_diagram.png"
if not os.path.exists(IMG_PATH):
    urllib.request.urlretrieve(IMG_URL, IMG_PATH)

W, H = A4
LM = RM = 1.8*cm
TM = BM = 2.2*cm
CONTENT_W = W - LM - RM

styles = getSampleStyleSheet()

def style(name, parent="Normal", **kwargs):
    return ParagraphStyle(name, parent=styles[parent], **kwargs)

S = {
    "cover_title": style("cover_title", fontSize=26, textColor=white,
                         alignment=TA_CENTER, leading=32, fontName="Helvetica-Bold"),
    "cover_sub":   style("cover_sub",   fontSize=13, textColor=HexColor("#AED6F1"),
                         alignment=TA_CENTER, leading=18, fontName="Helvetica"),
    "cover_tag":   style("cover_tag",   fontSize=10, textColor=HexColor("#AED6F1"),
                         alignment=TA_CENTER, leading=14, fontName="Helvetica-Oblique"),
    "h1": style("h1", fontSize=13, textColor=white, fontName="Helvetica-Bold",
                alignment=TA_LEFT, leading=17, spaceBefore=12, spaceAfter=4),
    "h2": style("h2", fontSize=11, textColor=NAVY, fontName="Helvetica-Bold",
                leading=14, spaceBefore=9, spaceAfter=3),
    "h3": style("h3", fontSize=10, textColor=TEAL, fontName="Helvetica-Bold",
                leading=13, spaceBefore=6, spaceAfter=2),
    "body": style("body", fontSize=9.5, textColor=HexColor("#2C3E50"),
                  leading=14, spaceAfter=4, alignment=TA_JUSTIFY),
    "bullet": style("bullet", fontSize=9.5, textColor=HexColor("#2C3E50"),
                    leading=14, leftIndent=14, firstLineIndent=-10, spaceAfter=3),
    "bullet2": style("bullet2", fontSize=9.2, textColor=HexColor("#2C3E50"),
                     leading=13, leftIndent=28, firstLineIndent=-10, spaceAfter=2),
    "th":   style("th",   fontSize=9,   textColor=white, fontName="Helvetica-Bold",
                  alignment=TA_CENTER, leading=12),
    "td":   style("td",   fontSize=8.8, textColor=HexColor("#2C3E50"),
                  fontName="Helvetica", alignment=TA_LEFT, leading=12),
    "td_b": style("td_b", fontSize=8.8, textColor=HexColor("#2C3E50"),
                  fontName="Helvetica-Bold", alignment=TA_LEFT, leading=12),
    "td_c": style("td_c", fontSize=8.8, textColor=HexColor("#2C3E50"),
                  fontName="Helvetica", alignment=TA_CENTER, leading=12),
    "pearl":   style("pearl",   fontSize=9.2, textColor=HexColor("#7D6608"),
                     fontName="Helvetica-Bold", leading=13, leftIndent=6),
    "note":    style("note",    fontSize=8.8, textColor=HexColor("#154360"),
                     fontName="Helvetica-Oblique", leading=12, leftIndent=6),
    "warning": style("warning", fontSize=9.2, textColor=HexColor("#78281F"),
                     fontName="Helvetica-Bold", leading=13, leftIndent=6),
    "caption": style("caption", fontSize=7.8, textColor=HexColor("#5D6D7E"),
                     fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=11),
    "source":  style("source",  fontSize=7.5, textColor=GRAY_MID,
                     fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=10),
}

# ── Helpers ───────────────────────────────────────────────────────────────────
def section_header(number, title, color=NAVY):
    data = [[Paragraph(f"  {number}  {title}", S["h1"])]]
    t = Table(data, colWidths=[CONTENT_W])
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,-1), color),
        ("TOPPADDING",    (0,0), (-1,-1), 7),
        ("BOTTOMPADDING", (0,0), (-1,-1), 7),
        ("LEFTPADDING",   (0,0), (-1,-1), 8),
        ("RIGHTPADDING",  (0,0), (-1,-1), 8),
    ]))
    return t

def make_table(headers, rows, col_widths=None):
    if col_widths is None:
        n = len(headers)
        col_widths = [CONTENT_W / n] * n
    data = [[Paragraph(h, S["th"]) for h in headers]]
    for i, row in enumerate(rows):
        data.append([Paragraph(str(c), S["td"]) for c in row])
    ts = [
        ("BACKGROUND",    (0,0), (-1,0),  TABLE_HDR),
        ("TEXTCOLOR",     (0,0), (-1,0),  white),
        ("GRID",          (0,0), (-1,-1), 0.4, HexColor("#BFC9CA")),
        ("TOPPADDING",    (0,0), (-1,-1), 5),
        ("BOTTOMPADDING", (0,0), (-1,-1), 5),
        ("LEFTPADDING",   (0,0), (-1,-1), 6),
        ("RIGHTPADDING",  (0,0), (-1,-1), 6),
        ("VALIGN",        (0,0), (-1,-1), "TOP"),
        ("FONTNAME",      (0,1), (-1,-1), "Helvetica"),
        ("FONTSIZE",      (0,1), (-1,-1), 8.8),
    ]
    for i in range(1, len(data)):
        if i % 2 == 0:
            ts.append(("BACKGROUND", (0,i), (-1,i), ROW_ALT))
    t = Table(data, colWidths=col_widths, repeatRows=1)
    t.setStyle(TableStyle(ts))
    return t

def callout(text, bg, border, sty):
    data = [[Paragraph(text, S[sty])]]
    t = Table(data, colWidths=[CONTENT_W])
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,-1), bg),
        ("LINEBEFORE",    (0,0), (0,-1),  4, border),
        ("TOPPADDING",    (0,0), (-1,-1), 7),
        ("BOTTOMPADDING", (0,0), (-1,-1), 7),
        ("LEFTPADDING",   (0,0), (-1,-1), 12),
        ("RIGHTPADDING",  (0,0), (-1,-1), 10),
    ]))
    return t

def note_box(text):  return callout(text, LIGHT_BLUE, TEAL, "note")
def pearl_box(text): return callout(f"KEY  {text}", PALE_ORANGE, ORANGE, "pearl")
def warn_box(text):  return callout(f"WARNING  {text}", HexColor("#FADBD8"), RED, "warning")

def p(text, sty="body"): return Paragraph(text, S[sty])
def b(text):  return Paragraph(f"• {text}", S["bullet"])
def b2(text): return Paragraph(f"◦ {text}", S["bullet2"])
def sp(n=6):  return Spacer(1, n)
def hr():     return HRFlowable(width="100%", thickness=0.5, color=GRAY_MID, spaceAfter=4, spaceBefore=4)

# ── Page callbacks ─────────────────────────────────────────────────────────────
def cover_page(canvas, doc):
    canvas.saveState()
    canvas.setFillColor(NAVY)
    canvas.rect(0, 0, W, H, fill=1, stroke=0)
    canvas.setFillColor(TEAL)
    canvas.rect(0, H*0.28, W, 5, fill=1, stroke=0)
    canvas.rect(0, H*0.72, W, 5, fill=1, stroke=0)
    canvas.restoreState()

def later_page(canvas, doc):
    canvas.saveState()
    canvas.setStrokeColor(TEAL)
    canvas.setLineWidth(1.2)
    canvas.line(LM, H - 1.55*cm, W - RM, H - 1.55*cm)
    canvas.setFont("Helvetica-Bold", 7.5)
    canvas.setFillColor(NAVY)
    canvas.drawString(LM, H - 1.35*cm, "TURNER SYNDROME")
    canvas.setFont("Helvetica", 7.5)
    canvas.setFillColor(GRAY_MID)
    canvas.drawRightString(W - RM, H - 1.35*cm, "Neonatologist / Paediatrician Reference")
    canvas.setStrokeColor(TEAL)
    canvas.line(LM, 1.5*cm, W - RM, 1.5*cm)
    canvas.setFont("Helvetica", 7.5)
    canvas.setFillColor(GRAY_MID)
    canvas.drawCentredString(W/2, 1.0*cm, f"Page {doc.page}")
    canvas.restoreState()

# ── Document with two templates ────────────────────────────────────────────────
doc = BaseDocTemplate(
    OUT, pagesize=A4,
    leftMargin=LM, rightMargin=RM, topMargin=TM, bottomMargin=BM,
    title="Turner Syndrome – Neonatologist/Paediatrician Reference",
    author="Orris Medical Education"
)

cover_frame = Frame(0, 0, W, H, leftPadding=LM, rightPadding=RM,
                    topPadding=2*cm, bottomPadding=2*cm, id="cover")
normal_frame = Frame(LM, BM + 0.5*cm, CONTENT_W, H - TM - BM - 1.2*cm, id="normal")

doc.addPageTemplates([
    PageTemplate(id="Cover",  frames=[cover_frame],  onPage=cover_page),
    PageTemplate(id="Normal", frames=[normal_frame], onPage=later_page),
])

from reportlab.platypus import NextPageTemplate

# ── Story ─────────────────────────────────────────────────────────────────────
story = []

# COVER
story.append(NextPageTemplate("Cover"))
story.append(sp(90))
story.append(p("TURNER SYNDROME", "cover_title"))
story.append(sp(14))
story.append(p("In-Depth Clinical Reference for Neonatologists & Paediatricians", "cover_sub"))
story.append(sp(22))
story.append(p("Genetics  ·  Pathogenesis  ·  Clinical Features  ·  Neonatal Presentation", "cover_tag"))
story.append(sp(6))
story.append(p("Diagnosis  ·  Management  ·  Surveillance  ·  Clinical Pearls", "cover_tag"))
story.append(sp(80))
story.append(p("Sources: Robbins Pathology  ·  Campbell-Walsh Urology  ·  The Developing Human", "cover_tag"))
story.append(sp(4))
story.append(p("PubMed Systematic Reviews 2025  |  Orris Medical Education  |  July 2026", "cover_tag"))

story.append(NextPageTemplate("Normal"))
story.append(PageBreak())

# ═══════════════════════════════════════════════════
# 1. DEFINITION & HISTORY
# ═══════════════════════════════════════════════════
story.append(section_header("1.", "Definition and Historical Background", NAVY))
story.append(sp())
story.append(p(
    "Turner syndrome (TS) is a chromosomal disorder resulting from <b>complete or partial monosomy "
    "of the X chromosome</b>, characterised by <b>hypogonadism in phenotypic females</b>. "
    "It is the most common sex chromosome abnormality in females."
))
story.append(sp(4))
story.append(b("<b>1938</b> — Henry Turner described the triad of sexual infantilism, webbed neck, and cubitus valgus as a distinct entity."))
story.append(b("<b>1930</b> — Otto Ullrich had described similar features earlier; hence the European term 'Ullrich–Turner syndrome'."))
story.append(b("<b>1959</b> — Ford et al. identified the chromosomal basis: the 45,X karyotype."))
story.append(b("Gonadal dysgenesis was subsequently recognised as a core component."))
story.append(sp(8))

# ═══════════════════════════════════════════════════
# 2. EPIDEMIOLOGY
# ═══════════════════════════════════════════════════
story.append(section_header("2.", "Epidemiology", NAVY))
story.append(sp())
story.append(make_table(
    ["Parameter", "Data"],
    [
        ["Incidence in live-born females", "~1 in 2,000–3,000"],
        ["Survival of 45,X conceptuses", "Only ~1% of monosomy X embryos survive to term"],
        ["Role in spontaneous abortions", "45,X = most common cytogenetic finding in miscarried fetuses; ~18% of all chromosomal abortions"],
        ["Origin of the missing chromosome", "~75–80% cases: PATERNAL origin (sperm defect — error in paternal gametogenesis)"],
    ],
    col_widths=[CONTENT_W*0.38, CONTENT_W*0.62]
))
story.append(sp(5))
story.append(note_box(
    "The fact that only ~1% of 45,X conceptions survive to term highlights how lethal complete monosomy X is in utero. "
    "The live-born infant with Turner syndrome represents the 'milder end' of a profoundly severe prenatal spectrum."
))
story.append(sp(8))

# ═══════════════════════════════════════════════════
# 3. GENETICS
# ═══════════════════════════════════════════════════
story.append(section_header("3.", "Genetics and Karyotypes", TEAL))
story.append(sp())

story.append(p("3a. Classic Karyotype", "h2"))
story.append(p(
    "<b>45,X (monosomy X)</b> — present in approximately <b>57%</b> of cases. "
    "A single maternal X chromosome, with the paternal sex chromosome absent."
))
story.append(sp(5))

story.append(p("3b. Structural Abnormalities of the X (~14%)", "h2"))
story.append(p("In order of frequency:"))
story.append(sp(3))
story.append(make_table(
    ["Karyotype", "Description"],
    [
        ["46,X,i(X)(q10) — Isochromosome Xq",
         "Most common structural variant. Duplication of long arm (Xq), loss of short arm (Xp). "
         "Highest association with autoimmune thyroid disease."],
        ["46,X,r(X) — Ring chromosome",
         "Deletions of both Xp and Xq arms form a ring. May produce more severe/variable phenotype."],
        ["46,X,del(Xp) or del(Xq) — Partial deletions",
         "Phenotype depends on the specific region deleted."],
    ],
    col_widths=[CONTENT_W*0.32, CONTENT_W*0.68]
))
story.append(sp(6))

story.append(p("3c. Mosaicism (~29%)", "h2"))
story.append(p("Two or more chromosomally distinct cell lines co-existing in the same individual:"))
story.append(sp(3))
story.append(make_table(
    ["Mosaic Karyotype", "Clinical Significance"],
    [
        ["45,X / 46,XX",
         "Most common mosaic (10–15%). May appear nearly normal; some can conceive spontaneously."],
        ["45,X / 46,XY",
         "2–5%. CRITICAL — 12–20% risk of gonadoblastoma. Prophylactic gonadectomy required."],
        ["45,X / 47,XXX", "Triple X mosaicism — variable phenotype."],
        ["45,X / 46,X,i(X)(q10)", "Combined structural + mosaic karyotype."],
    ],
    col_widths=[CONTENT_W*0.34, CONTENT_W*0.66]
))
story.append(sp(5))
story.append(note_box(
    "Conventional cytogenetics detects mosaicism in ~30% of TS patients. With FISH and PCR, detection rises to ~75%. "
    "Higher proportion of 45,X cells = more severe phenotype. A very small number of 45,X/46,XX mosaics can conceive."
))
story.append(sp(6))

story.append(p("3d. Y Chromosome Material — Most Clinically Critical Finding", "h2"))
story.append(b("Present in <b>5–10%</b> of Turner syndrome patients (complete Y or translocated Y fragments)."))
story.append(b("Risk of <b>gonadoblastoma: 12–20%</b>."))
story.append(b("Gonadoblastoma progresses to dysgerminoma or other malignant GCT in <b>18–35%</b> of cases — sometimes with virilisation."))
story.append(b("Gonadoblastoma reported as early as <b>5 months of age</b>."))
story.append(b("Detection by <b>FISH or PCR</b> in ALL TS patients — conventional karyotype may miss occult Y material."))
story.append(sp(5))
story.append(warn_box(
    "Detection of Y-chromosome material mandates prompt prophylactic laparoscopic gonadectomy — "
    "regardless of age — due to gonadoblastoma risk from as early as 5 months of age."
))
story.append(sp(8))

# ═══════════════════════════════════════════════════
# 4. PATHOGENESIS
# ═══════════════════════════════════════════════════
story.append(section_header("4.", "Pathogenesis — Molecular Mechanisms", NAVY))
story.append(sp())

story.append(p("4a. SHOX Gene Haploinsufficiency", "h2"))
story.append(make_table(
    ["Feature", "Detail"],
    [
        ["Gene location", "SHOX at Xp22.33 — pseudoautosomal region 1 (PAR1)"],
        ["X-inactivation", "Escapes X-inactivation — normally 2 copies in both males and females"],
        ["Effect in Turner syndrome", "Haploinsufficiency (1 copy) → short stature, Madelung deformity, skeletal anomalies"],
        ["Expression sites", "Growth plates of radius, ulna, tibia, fibula during fetal life"],
        ["Confirmation", "SHOX deletions found in 2–5% of otherwise normal short children"],
        ["Mirror image", "Klinefelter syndrome (extra X = extra SHOX) → tall stature — elegant confirmation"],
    ],
    col_widths=[CONTENT_W*0.36, CONTENT_W*0.64]
))
story.append(sp(6))

story.append(p("4b. Ovarian Failure Mechanism", "h2"))
story.append(p(
    "Normal fetal ovaries contain up to <b>7 million oocytes</b> at peak. This reduces to ~400,000 at menarche. "
    "In Turner syndrome:"
))
story.append(b("Fetal ovaries develop <b>normally</b> through the first <b>18 weeks of gestation</b>."))
story.append(b("Absence of the second X chromosome → <b>accelerated apoptosis of oocytes</b>."))
story.append(b("By <b>age 2 years</b>, virtually no oocytes remain → streak ovaries."))
story.append(b("Follicular cells that normally protect oocytes are inadequate, accelerating oocyte attrition."))
story.append(b("Both X chromosomes must be active during oogenesis for normal ovarian maintenance."))
story.append(sp(5))
story.append(pearl_box(
    '"Menopause occurs before menarche" — the defining pathophysiological statement of Turner syndrome ovarian failure.'
))
story.append(sp(5))

story.append(p("4c. Streak Ovaries — Gross and Microscopic Pathology", "h2"))
story.append(p(
    "Streak ovaries: white, fibrous structures <b>2–3 cm long × 0.5 cm wide</b>, located in the broad ligament. "
    "Histology: interlacing waves of dense fibrous stroma, devoid of oocytes and follicles — otherwise "
    "indistinguishable from normal ovarian stroma. "
    "Hormonal consequence: <b>low oestrogen, low androgen, elevated FSH and LH</b> = hypergonadotropic hypogonadism."
))
story.append(sp(5))

story.append(p("4d. Genotype–Phenotype Correlation", "h2"))
story.append(b("Somatic features (neck webbing, cardiac, lymphatic) → determined by genes on the <b>short arm (Xp)</b>."))
story.append(b("Fertility and menstruation → affected by genes on the <b>long arm (Xq)</b>."))
story.append(b("SHOX explains short stature — but not cardiac or metabolic features (multiple Xp genes involved)."))
story.append(b("In ~80% of TS cases, the retained X chromosome is <b>maternal in origin</b> → error in paternal gametogenesis."))
story.append(sp(8))

# ═══════════════════════════════════════════════════
# 5. CLINICAL FEATURES
# ═══════════════════════════════════════════════════
story.append(section_header("5.", "Clinical Features — System by System", TEAL))
story.append(sp())

# Diagram
if os.path.exists(IMG_PATH):
    img = Image(IMG_PATH, width=8.5*cm, height=10.5*cm)
    img.hAlign = "CENTER"
    story.append(img)
    story.append(sp(3))
    story.append(p(
        "Fig. 1 — Clinical features and karyotypes of Turner syndrome.  "
        "(Source: Robbins & Kumar Basic Pathology, Fig. 4.20 / Robbins, Cotran & Kumar, Fig. 5.26)",
        "caption"
    ))
    story.append(sp(8))

story.append(p("5a. Neonatal Presentation — Delivery Room and Newborn Nursery", "h2"))
story.append(make_table(
    ["Neonatal Feature", "Details"],
    [
        ["Lymphoedema of dorsum of hands/feet",
         "Most common neonatal finding. Pitting oedema from lymph stasis. Key delivery room clue."],
        ["Cystic hygroma / nuchal oedema",
         "Markedly distended lymphatics at nape of neck in utero → resolves → webbing."],
        ["Webbing of neck (pterygium colli)",
         "Persistent bilateral skin fold; low posterior hairline."],
        ["Broad / shield chest", "Widely spaced nipples on a broad thorax."],
        ["Cubitus valgus", "Increased carrying angle at elbow."],
        ["Short 4th metacarpal", "Brachymetacarpia — positive Archibald/metacarpal sign."],
        ["Hypoplastic nails", "Dysplastic nails at birth."],
        ["Multiple pigmented nevi", "May increase with age."],
        ["High-arched palate", "Common orofacial feature."],
        ["Ptosis, hypertelorism, retrognathia", "Characteristic facial features."],
        ["Ear malformations", "Associated with Eustachian tube dysfunction and hearing problems."],
    ],
    col_widths=[CONTENT_W*0.38, CONTENT_W*0.62]
))
story.append(sp(5))
story.append(pearl_box(
    "The neonate with bilateral dorsal foot/hand oedema and/or cystic hygroma in a female infant "
    "must be karyotyped for Turner syndrome — this is the delivery room diagnostic trigger."
))
story.append(sp(8))

story.append(p("5b. Cardiovascular — Most Common Cause of Mortality", "h2"))
story.append(p(
    "Congenital heart disease affects <b>25–50%</b> of patients. Predominantly "
    "<b>left-sided cardiovascular abnormalities</b>."
))
story.append(sp(3))
story.append(make_table(
    ["Lesion", "Significance"],
    [
        ["Bicuspid aortic valve (BAV)",
         "Most common structural CHD in TS; may be missed on routine echo — dedicated surveillance needed."],
        ["Coarctation of the aorta",
         "Classic association. ~5% of girls presenting with coarctation have Turner syndrome."],
        ["Aortic root dilation", "Present in ~30% of TS patients — watch for progressive enlargement."],
        ["Aortic dissection",
         "100-fold higher risk than general population — can occur in young women, including during pregnancy."],
        ["Partial anomalous pulmonary venous drainage (PAPVD)", "Less common but seen in TS."],
        ["Hypertension", "Common; multifactorial — renal and cardiovascular contributors."],
    ],
    col_widths=[CONTENT_W*0.42, CONTENT_W*0.58]
))
story.append(sp(5))
story.append(warn_box(
    "Cardiovascular abnormalities are the most common cause of death in childhood and the most "
    "important cause of increased mortality overall. Aortic dissection risk is 100-fold elevated — "
    "all women with TS require cardiac MRI clearance before attempting pregnancy."
))
story.append(sp(8))

story.append(p("5c. Renal Anomalies — Frequently Overlooked", "h2"))
story.append(p("<b>33–60%</b> of TS patients have structural/positional renal anomalies (most common in classic 45,X):"))
story.append(sp(3))
story.append(make_table(
    ["Renal Anomaly", "Frequency"],
    [
        ["Horseshoe kidney", "~10%"],
        ["Duplication of collecting system or renal agenesis", "~20%"],
        ["Malrotation", "~15%"],
        ["Multiple renal arteries", "~90% (detected on cardiovascular evaluation)"],
    ],
    col_widths=[CONTENT_W*0.6, CONTENT_W*0.4]
))
story.append(sp(8))

story.append(p("5d. Reproductive / Endocrine", "h2"))
story.append(b("Streak ovaries: fibrous strands devoid of oocytes — the gonadal end result."))
story.append(b("<b>Primary amenorrhoea</b> in ~90% — genitalia remain infantile, minimal breast development, sparse pubic/axillary hair."))
story.append(b("<b>Hypergonadotropic hypogonadism</b>: elevated FSH and LH, low oestradiol."))
story.append(b("Spontaneous puberty in up to <b>30%</b> (especially mosaic 45,X/46,XX)."))
story.append(b("Spontaneous conception possible in a very small number of 45,X/46,XX mosaics."))
story.append(sp(7))

story.append(p("5e. Thyroid", "h2"))
story.append(b("Autoimmune thyroiditis (Hashimoto's thyroiditis) is significantly more common in TS."))
story.append(b("Most common in women with <b>isochromosome Xq</b> [i(Xq) karyotype]."))
story.append(b("Up to <b>50%</b> develop clinical <b>hypothyroidism</b> over their lifetime."))
story.append(b("Screen TSH at diagnosis and <b>annually</b> thereafter."))
story.append(sp(7))

story.append(p("5f. Metabolic / Hepatic", "h2"))
story.append(b("Glucose intolerance and <b>insulin resistance</b>."))
story.append(b("<b>Obesity</b> — higher prevalence than age-matched controls."))
story.append(b("<b>Non-alcoholic fatty liver disease (NAFLD)</b>."))
story.append(b("Some develop full <b>metabolic syndrome</b>."))
story.append(b("<b>Important:</b> Growth hormone therapy worsens insulin resistance — monitor glucose carefully during rhGH treatment."))
story.append(sp(7))

story.append(p("5g. Neurodevelopment / Cognitive", "h2"))
story.append(b("General intellect: usually within normal limits — <b>NOT associated with intellectual disability</b>."))
story.append(b("Specific deficit: <b>visual-spatial information processing</b> (non-verbal learning disability)."))
story.append(b("Difficulty with maths, spatial tasks, social perception, and executive function."))
story.append(b("Normal verbal IQ; affected performance IQ."))
story.append(b("Higher rates of ADHD, anxiety, and social difficulties."))
story.append(sp(7))

story.append(p("5h. Auditory / ENT", "h2"))
story.append(b("Sensorineural hearing loss (SNHL) — progressive; more prominent with age."))
story.append(b("Recurrent otitis media in children (Eustachian tube dysfunction)."))
story.append(b("Routine audiological surveillance from childhood is recommended."))
story.append(sp(7))

story.append(p("5i. Musculoskeletal / Orthopaedic", "h2"))
story.append(b("<b>Cubitus valgus</b> — increased carrying angle at elbow."))
story.append(b("<b>Short 4th metacarpal</b> — positive Archibald/metacarpal sign (bedside clue)."))
story.append(b("<b>Scoliosis</b> in up to 10%."))
story.append(b("<b>Madelung deformity</b> of the wrist (from SHOX haploinsufficiency)."))
story.append(b("Osteoporosis in adulthood from prolonged oestrogen deficiency."))
story.append(b("Short stature: average adult height <b>143–144 cm</b> without treatment (most populations)."))
story.append(sp(8))

# ═══════════════════════════════════════════════════
# 6. PRENATAL DIAGNOSIS
# ═══════════════════════════════════════════════════
story.append(section_header("6.", "Prenatal Diagnosis", NAVY))
story.append(sp())
story.append(p("Ultrasonographic features raising suspicion for Turner syndrome:"))
story.append(b("<b>Increased nuchal translucency</b> — most common and earliest prenatal finding"))
story.append(b("Cystic hygroma / nuchal oedema"))
story.append(b("Generalised lymphoedema or hydrops fetalis"))
story.append(b("Coarctation of the aorta on fetal echocardiography"))
story.append(b("Renal anomalies"))
story.append(sp(4))
story.append(p(
    "Confirmatory karyotyping: <b>Chorionic villus sampling (CVS)</b> or <b>amniocentesis</b>. "
    "Cell-free fetal DNA (cfDNA/NIPT) can flag monosomy X but requires confirmatory invasive karyotyping before counselling."
))
story.append(sp(5))
story.append(warn_box(
    "CRITICAL COUNSELLING POINT — Ascertainment Bias: If 45,X/46,XX or 45,X/46,XY mosaicism is "
    "INCIDENTALLY found on NIPT or amniocentesis, ~90% of these fetuses will have a NORMAL phenotype at birth. "
    "Counsel accordingly — do NOT apply full Turner syndrome prognosis to incidentally detected mosaics. "
    "However, a purely 45,X karyotype found prenatally carries prognosis similar to postnatal TS diagnosis."
))
story.append(sp(8))

# ═══════════════════════════════════════════════════
# 7. POSTNATAL DIAGNOSIS
# ═══════════════════════════════════════════════════
story.append(section_header("7.", "Postnatal Diagnosis", TEAL))
story.append(sp())

story.append(p("When to Suspect Turner Syndrome:", "h2"))
story.append(make_table(
    ["Age / Clinical Setting", "Trigger to Karyotype"],
    [
        ["Neonate", "Lymphoedema of hands/feet, cystic hygroma, coarctation, hydrops fetalis in female"],
        ["Child", "Short stature (<3rd centile), unexplained growth failure"],
        ["Adolescent", "Primary amenorrhoea + short stature — classic presentation"],
        ["Any age", "Short stature + primary amenorrhoea — always karyotype"],
        ["Incidental", "~5% of girls presenting with coarctation of aorta have Turner syndrome — always karyotype"],
    ],
    col_widths=[CONTENT_W*0.30, CONTENT_W*0.70]
))
story.append(sp(6))

story.append(p("Investigations at Diagnosis:", "h2"))
story.append(make_table(
    ["Investigation", "Rationale"],
    [
        ["Karyotype (minimum 30 cells)", "Confirm diagnosis; detect mosaicism. 30 cells minimises false negatives."],
        ["FISH or PCR for Y-chromosome material", "Mandatory in ALL TS patients — detect occult Y sequences."],
        ["Echocardiogram", "Baseline for BAV, coarctation, aortic root diameter."],
        ["Renal ultrasound", "Structural renal anomalies (33–60% prevalence)."],
        ["TSH + thyroid antibodies", "Autoimmune thyroiditis screening."],
        ["FSH, LH, Oestradiol", "Confirm hypergonadotropic hypogonadism."],
        ["Blood pressure (both arms)", "Coarctation surveillance — bilateral BP comparison."],
        ["Audiogram", "Sensorineural hearing loss — baseline assessment."],
        ["Bone age (left hand X-ray)", "Growth assessment and treatment planning."],
        ["Fasting glucose, insulin, lipids", "Metabolic syndrome and IR screening."],
        ["Liver function tests (LFTs)", "NAFLD surveillance."],
        ["IGF-1", "Required baseline before growth hormone therapy."],
    ],
    col_widths=[CONTENT_W*0.40, CONTENT_W*0.60]
))
story.append(sp(8))

# ═══════════════════════════════════════════════════
# 8. MANAGEMENT
# ═══════════════════════════════════════════════════
story.append(section_header("8.", "Management — Neonatologist / Paediatrician Approach", NAVY))
story.append(sp())

story.append(p("8a. Neonatal Period — Immediate Steps", "h2"))
story.append(make_table(
    ["Step", "Action", "Rationale"],
    [
        ["1", "Confirm karyotype (≥30 cells)", "Diagnostic certainty; detect mosaicism"],
        ["2", "FISH or PCR for Y chromosome — ALL cases", "Gonadoblastoma risk stratification — non-negotiable"],
        ["3", "If Y material confirmed → prophylactic laparoscopic gonadectomy",
         "Risk 12–20%; gonadoblastoma reported from 5 months of age"],
        ["4", "Echocardiogram", "BAV, coarctation — may require surgical repair"],
        ["5", "Renal ultrasound", "Structural anomalies — inform renal tract management"],
        ["6", "Monitor and manage lymphoedema", "Usually resolves; gentle compression if needed"],
        ["7", "Feeding support if needed", "Some neonates have poor suck/swallowing"],
        ["8", "Refer to paediatric endocrinology", "Long-term GH and hormone replacement planning"],
        ["9", "Genetic counselling for family", "Mostly sporadic — recurrence risk counselling"],
    ],
    col_widths=[CONTENT_W*0.07, CONTENT_W*0.46, CONTENT_W*0.47]
))
story.append(sp(7))

story.append(p("8b. Growth Hormone Therapy (Children)", "h2"))
story.append(b("Recombinant human GH (rhGH): <b>FDA-approved specifically for Turner syndrome</b> since 1996."))
story.append(b("Start age: typically <b>4–6 years</b> (or earlier if growth significantly below TS growth norms)."))
story.append(b("Dose: <b>0.045–0.050 mg/kg/day</b> subcutaneously — higher than for GH deficiency."))
story.append(b("Expected benefit: <b>5–8 cm additional adult height</b> above predicted untreated height."))
story.append(b("Continue until bone age ~14–15 years or growth velocity becomes insufficient."))
story.append(b("<b>Oxandrolone</b> (low-dose anabolic steroid) may be added after age 9 years to augment height gain."))
story.append(b("<b>Monitor:</b> IGF-1, fasting glucose and insulin (GH worsens IR), thyroid function, scoliosis."))
story.append(sp(7))

story.append(p("8c. Oestrogen Replacement Therapy — Puberty Induction", "h2"))
story.append(b("Initiated at <b>age 12–15 years</b> if spontaneous puberty has not occurred."))
story.append(b("Start with <b>low-dose transdermal 17β-oestradiol</b> — the most physiological route."))
story.append(b("Gradually increase dose over <b>2–3 years</b> to mimic natural pubertal progression."))
story.append(b("Add <b>cyclic progestogen</b> after 2 years or at first breakthrough bleed."))
story.append(b("Goals: breast development, uterine growth, bone mineralisation, cardiovascular protection."))
story.append(b("Long-term HRT continued until the natural age of menopause (~50 years)."))
story.append(sp(7))

story.append(p("8d. Fertility Considerations", "h2"))
story.append(b("Majority: infertile due to streak ovaries."))
story.append(b("<b>Donor egg IVF</b> is the primary fertility option — uterus must be primed with oestrogen."))
story.append(b("For mosaic TS with spontaneous menses: <b>oocyte cryopreservation</b> — still evolving, currently experimental."))
story.append(b("<b>Mandatory cardiac assessment</b> (aortic root MRI) before any pregnancy attempt."))
story.append(b("Pregnancy in TS carries elevated risk of aortic dissection — multidisciplinary planning essential."))
story.append(sp(7))

story.append(p("8e. Gonadoblastoma Prophylaxis", "h2"))
story.append(b("Y-chromosome material detected → <b>laparoscopic prophylactic gonadectomy promptly</b>."))
story.append(b("Streak gonads confirmed in pure <b>45,X</b> patients (no Y material) → <b>do NOT need removal</b>."))
story.append(b("Do not delay once Y material is confirmed — age of onset is unpredictable."))
story.append(sp(8))

# ═══════════════════════════════════════════════════
# 9. SURVEILLANCE SCHEDULE
# ═══════════════════════════════════════════════════
story.append(section_header("9.", "Long-Term Surveillance Schedule", TEAL))
story.append(sp())
story.append(make_table(
    ["System / Investigation", "Frequency / Notes"],
    [
        ["Cardiac (echocardiogram or MRI)", "Every 3–5 years; more frequent if BAV or aortic dilation"],
        ["Blood pressure", "Annually — both arms if coarctation suspected"],
        ["Thyroid (TSH + antibodies)", "Annually"],
        ["Hearing (audiogram)", "Every 3–5 years; earlier if symptomatic"],
        ["Fasting glucose, insulin, lipids", "Every 2–3 years"],
        ["Liver function tests (LFTs)", "Annually"],
        ["Bone density (DEXA)", "At transition to adulthood; periodically thereafter"],
        ["Ophthalmology", "Strabismus, amblyopia screening in childhood"],
        ["Renal function and BP", "More frequent if structural renal anomalies present"],
        ["Psychosocial / neurodevelopmental assessment", "Learning support, ADHD/anxiety assessment"],
        ["Bladder and urethral cancer surveillance", "Awareness in adulthood — increased risk per British national cohort data"],
    ],
    col_widths=[CONTENT_W*0.44, CONTENT_W*0.56]
))
story.append(sp(8))

# ═══════════════════════════════════════════════════
# 10. COMPLICATIONS SUMMARY
# ═══════════════════════════════════════════════════
story.append(section_header("10.", "Complications Summary", NAVY))
story.append(sp())
story.append(make_table(
    ["System", "Complication", "Key Point"],
    [
        ["Cardiovascular", "Coarctation, BAV, aortic dissection", "#1 cause of death; 100× dissection risk"],
        ["Gonadal", "Streak ovaries, primary amenorrhoea", "Hypergonadotropic hypogonadism"],
        ["Oncologic", "Gonadoblastoma", "ONLY if Y material present; from 5 months"],
        ["Thyroid", "Autoimmune hypothyroidism", "Up to 50% lifetime risk"],
        ["Metabolic", "Insulin resistance, metabolic syndrome", "GH therapy worsens insulin resistance"],
        ["Renal", "Horseshoe kidney, duplication", "33–60% affected"],
        ["Neurocognitive", "Visuospatial deficits, non-verbal LD", "Normal verbal IQ preserved"],
        ["Auditory", "SNHL, otitis media", "Progressive sensorineural loss with age"],
        ["Skeletal", "Short stature, osteoporosis, scoliosis", "SHOX haploinsufficiency"],
        ["Hepatic", "NAFLD", "Screen LFTs annually"],
    ],
    col_widths=[CONTENT_W*0.20, CONTENT_W*0.38, CONTENT_W*0.42]
))
story.append(sp(8))

# ═══════════════════════════════════════════════════
# 11. CLINICAL PEARLS
# ═══════════════════════════════════════════════════
story.append(section_header("11.", "Key Clinical Pearls for Exams and Practice", TEAL))
story.append(sp())
pearls = [
    "Most 45,X conceptions abort (>99%) — Turner syndrome in live births is the 'milder end' of a profoundly severe prenatal spectrum.",
    "The missing X chromosome is usually PATERNAL (~75–80%) — the error is in paternal gametogenesis (sperm).",
    "Cystic hygroma in a female fetus on antenatal ultrasound → think Turner syndrome until proven otherwise — karyotype.",
    "~5% of girls presenting with coarctation of the aorta have Turner syndrome — always karyotype.",
    "'Menopause before menarche' — ovarian failure is complete by age 2 years.",
    "Y-material detection (FISH/PCR) is mandatory in ALL Turner syndrome patients — gonadoblastoma can occur at 5 months.",
    "GH therapy worsens insulin resistance — monitor fasting glucose and insulin before and during treatment.",
    "Thyroid autoantibodies are most common with isochromosome Xq [i(Xq)] — screen this subgroup most aggressively.",
    "Prenatal ascertainment bias: incidentally detected mosaic TS (45,X/46,XX or 45,X/46,XY) on NIPT/amnio → ~90% will have NORMAL phenotype at birth.",
    "Aortic dissection risk is 100-fold elevated — ALL women with Turner syndrome require cardiac MRI clearance before any pregnancy attempt.",
    "Normal intellect is the rule — but specific visuospatial processing deficits require educational support.",
    "Spontaneous puberty occurs in up to 30% of Turner syndrome patients — do not assume total pubertal failure without follow-up.",
    "Short 4th metacarpal (positive Archibald/metacarpal sign) is a simple bedside clue in older children.",
    "Short stature + primary amenorrhoea in any adolescent female MUST prompt karyotyping — Turner syndrome until proven otherwise.",
]
for i, pearl in enumerate(pearls, 1):
    story.append(pearl_box(f"{i}.  {pearl}"))
    story.append(sp(4))
story.append(sp(6))

# ═══════════════════════════════════════════════════
# 12. RECENT EVIDENCE
# ═══════════════════════════════════════════════════
story.append(section_header("12.", "Recent Evidence — Systematic Reviews 2024–2026", NAVY))
story.append(sp())
story.append(make_table(
    ["Reference", "Title", "Key Finding"],
    [
        ["PMID 41243107\n(2025, Ann Med)",
         "Global prevalence of autoimmune diseases in Turner syndrome: systematic review and meta-analysis",
         "Confirms significantly elevated global prevalence of autoimmune diseases. Reinforces need for lifelong autoimmune surveillance, especially thyroid."],
        ["PMID 39743222\n(2025, Congenit Anom Kyoto)",
         "Karyotype and phenotype association in Turner syndrome with non-mosaic X chromosome structural rearrangements: systematic review",
         "Refines karyotype-specific phenotype counselling for structural X rearrangements."],
        ["PMID 40557696\n(2025, Am J Med Genet C)",
         "The impact of karyotype on congenital heart diseases in Turner syndrome: systematic review and meta-analysis",
         "Karyotype significantly impacts CHD type and severity. Supports karyotype-guided cardiac surveillance."],
    ],
    col_widths=[CONTENT_W*0.20, CONTENT_W*0.42, CONTENT_W*0.38]
))
story.append(sp(8))

# ═══════════════════════════════════════════════════
# SOURCES
# ═══════════════════════════════════════════════════
story.append(hr())
story.append(sp(4))
story.append(p("Sources and References", "h2"))
for src in [
    "Robbins & Kumar Basic Pathology (Robbins Pathology) — Chapter 4, Fig. 4.20",
    "Robbins, Cotran & Kumar Pathologic Basis of Disease — Chapter 5, pp. 168–169",
    "Campbell-Walsh-Wein Urology (3-Volume Set) — Chapter 48: Syndromes of Gonadal Dysgenesis",
    "The Developing Human: Clinically Oriented Embryology, 9th ed. — p. 1239",
    "Thompson & Thompson Genetics and Genomics in Medicine, 9th ed.",
    "PubMed PMID 41243107 — Hwang et al. (2025). Autoimmune diseases in Turner syndrome. Ann Med.",
    "PubMed PMID 39743222 — Tanoshima et al. (2025). Karyotype-phenotype in Turner syndrome. Congenit Anom Kyoto.",
    "PubMed PMID 40557696 — Álvarez-Nava et al. (2025). CHD and karyotype in Turner syndrome. Am J Med Genet C.",
]:
    story.append(b(src))

story.append(sp(10))
story.append(p("Orris Medical Education  |  Turner Syndrome — Neonatologist/Paediatrician Reference  |  July 2026", "source"))

# ── Build ──────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF written to: {OUT}")
Running Command

rm /tmp/workspace/turner-syndrome/generate_pdf.py

This is a shared conversation. Sign in to Orris to start your own chat.