Richmond crown dentistry

Searching the Web

Richmond crown dentistry

Asking for Preferences

Richmond crown

Reading File
Searching the Web

Richmond crown dental procedure post core crown technique

Finding Sources
Reading Web Page

https://pmc.ncbi.nlm.nih.gov/articles/PMC10485437

Richmond Crown

The Richmond crown is one of the oldest post-retained crown restorations in dentistry, first introduced in 1878. It is a single-unit casting in which the post (dowel), core, and crown are all fabricated together as one piece, with a porcelain facing for aesthetics.

Definition

A Richmond crown is a customized, castable post-and-crown system - unlike a conventional post-and-core + separate crown approach, the post and crown are cast as a single integrated unit. It is not a post-and-core system per se; rather, it is a post + crown in one piece.

Indications

  • Grossly carious or severely fractured teeth where more than two-thirds of the crown structure is destroyed
  • Endodontically treated (non-vital) teeth with minimal remaining coronal tooth structure
  • Situations where there is steep incisal guidance and minimal overjet - conditions where a conventional post-and-core + crown cannot be placed due to lack of incisal clearance
  • Cases of repeatedly dislodged crowns due to inadequate tooth structure remaining
  • Anterior teeth (especially maxillary) with severely compromised structural integrity

Key Design Features

  • Single path of insertion and withdrawal - the preparation must have a common draw for both the post (internal) and the crown (external)
  • Ferrule collar - incorporated at the cervical margin for anti-rotational effect and improved mechanical resistance
  • Customized to the root canal configuration
  • Low or no stress at the cervical margin
  • Porcelain facing for anterior aesthetics
  • Excellent strength due to the single-casting design

Advantages

FeatureBenefit
Single-unit constructionNo separate components to dislodge independently
Custom cast to rootFits root canal anatomy precisely
Ferrule effectImproved retention and fracture resistance
Porcelain facingNatural appearance for anterior teeth
Low cervical stressBetter long-term tissue health

Disadvantages / Challenges

  • Technical difficulty - requires precise preparation to ensure a single common path of draw for both post and crown simultaneously
  • Skill-intensive fabrication (noted as a drawback even in Tylman's 1970 textbook)
  • Largely replaced in modern practice by separate post-and-core + crown combinations and, more recently, by endo crowns (which use CAD/CAM technology)
  • Irreversible - if the post fails, the entire restoration must be remade

Historical Context

The Richmond crown was first described in 1878 as a one-piece cast dowel-and-crown with a porcelain facing. While it fell out of widespread use due to the technical demands of fabrication, it remains a valid option in challenging cases with minimal remaining tooth structure. Recent literature (Patel et al., 2023) and a 2025 laser-assisted approach combining it with diode laser crown lengthening confirm it still has a role in specific clinical scenarios.

Richmond Crown vs. Conventional Post-and-Core

FeatureRichmond CrownPost + Core + Crown
Number of unitsSingle casting2-3 separate pieces
FabricationComplex, single drawMore flexible
RetentionExcellent (integrated)Good (separate steps)
Current useSpecial casesStandard approach
In summary, the Richmond crown is a time-tested restoration for severely compromised endodontically treated teeth, especially anteriors, where conventional methods are not feasible.

More

Searching the Web

Richmond crown preparation steps clinical technique components contraindications

Searching the Web

Richmond crown vs post core crown endocrown comparison dentistry

Reading Web Page

https://www.organscigroup.us/Dental-Problems-Solutions/JDPS-…

Searching PubMed

"Richmond crown" endodontically treated teeth

Here is a deeper dive into the Richmond crown:

Richmond Crown - In Depth


History & Evolution

  • 1878: Originally introduced as a threaded tube system - a metal tube was screwed into the root canal, and a crown was screw-retained over it
  • Later modification: The threaded tube was eliminated; redesigned as a one-piece cast dowel-and-crown with porcelain fired over a metal coping
  • Described in detail in Tylman's 1970 prosthodontics textbook as a meticulous but technically demanding restoration
  • Gradually fell out of favor as separate post-and-core systems improved, but never became obsolete

Anatomy of the Richmond Crown (Components)

[ Porcelain Facing ]
[ Metal Crown Coping ]  ← cast as one unit with the post below
[ Ferrule Collar     ]  ← encircles the cervical tooth structure
[ Post / Dowel       ]  ← extends into the prepared root canal
All four elements are cast as a single unit (metal), with ceramic/porcelain then fired onto the labial/facial surface for aesthetics.

Tooth Preparation - Steps

  1. Endodontic therapy - root canal treatment must be completed first; the tooth must be non-vital
  2. Post space preparation - gutta-percha is removed to the required depth, leaving ~4-5 mm apically to maintain the apical seal
  3. Single path of insertion - the root canal preparation (internal) and the coronal preparation (external) must share one common axis of draw - this is the most technically demanding step
  4. Ferrule preparation - a 1.5-2 mm shoulder is prepared circumferentially around the cervical tooth structure to accommodate the ferrule collar
  5. Impression - an impression of both the post space and the coronal preparation is taken; can be done directly (pattern formed intraorally in wax/resin) or indirectly
  6. Laboratory fabrication - the casting is made; ceramic is applied to the labial surface
  7. Try-in and cementation - the crown is cemented into the root canal using zinc phosphate or resin cement

Indications (Detailed)

Clinical SituationWhy Richmond Crown
Grossly decayed tooth with <1/3 crown remainingNo other option to retain a crown
Endodontically treated tooth with steep incisal guidance (deep bite, minimal overjet)Conventional post+core+separate crown would create occlusal interference
Repeated crown dislodgement due to inadequate tooth structureSingle unit = no separate cemental interface to fail
Severely fractured anterior tooth (Ellis Class III with subgingival extension)Integrated post provides retention where nothing else can

Contraindications

  • Teeth with adequate remaining coronal structure - a conventional crown is simpler and less destructive
  • Very short or thin roots - insufficient root length for post placement; risk of root fracture
  • Curved or calcified root canals - cannot achieve a straight post path
  • Active periapical pathology - root canal treatment must be successful and healed first
  • Poor periodontal support - mobile or periodontally compromised teeth
  • Young patients with wide open apices - inadequate apical seal

Technical Drawback - The "Dual Axis Problem"

The most cited challenge: to prepare a Richmond crown, the clinician must make two different axes parallel:
  • The internal axis (root canal for the post)
  • The external axis (crown preparation)
Excessive tooth cutting to achieve this parallelism weakens the tooth and increases stress concentration at the post apex, raising the risk of root fracture - the most feared complication.

Fracture Resistance - What the Research Shows

Recent comparative studies are informative:
  • Richmond crown vs. cast metal post-and-core: One in vitro study found the Richmond crown group resisted fracture at 1180.6 ± 168.87 N vs. cast metal post-and-core at 972.4 ± 217.51 N - the Richmond crown showed higher fracture resistance on average
  • Richmond crown vs. endocrown: Research published in IJOPRD found Richmond crowns have superior fracture toughness but are prone to catastrophic (non-repairable) failures, whereas endocrowns fail in a more favorable (repairable) mode
  • Fracture resistance depends heavily on ferrule height - a minimum of 1.5-2 mm ferrule is essential

Richmond Crown vs. Modern Alternatives

FeatureRichmond CrownPost-Core + Crown (3-piece)Endocrown
Year introduced1878Mid 20th century~1990s
Number of units12-31
Post requiredYes (integral)Yes (separate)No
IndicationMinimal crown, deep biteModerate-severe crown lossPosterior, adequate pulp chamber
Failure modeCatastrophicDislodgement + root fractureMostly repairable
CAD/CAM compatibleNoLimitedYes (modern endocrowns)
Technique sensitivityVery highModerateModerate

Modern Relevance

Despite being over 140 years old, the Richmond crown retains a niche role:
  • Cases with steep incisal guidance where no other technique works
  • Patients where multiple appointments for post+core then crown separately are impractical
  • A 2025 paper (Swetha et al.) describes a laser-assisted approach combining diode laser crown lengthening with Richmond crown placement, producing durable and aesthetic results in complex anterior cases
The key principle it established - integrating retention into the restoration itself - lives on in the modern endocrown concept, though the mechanisms differ significantly.

Key Points to Remember (Exam Focus)

  • First described: 1878
  • Type: Single-unit post-retained crown with porcelain facing
  • Not a post-and-core - it is a post + crown as one casting
  • Key feature: Ferrule collar for anti-rotation and retention
  • Main challenge: Single common path of insertion for post and crown
  • Main risk: Root fracture due to stress at post apex
  • Best for: Anterior teeth, minimal remaining structure, deep bite, low overjet

Find clinical images showing Richmond crown preparations and completed cases

Searching the Web

Richmond crown preparation clinical images photos dentistry

Searching the Web

Richmond crown case report clinical photographs before after

Loading Image
Loading Image
Loading Image
Loading Image
Loading Image
Loading Image
Here are the clinical images retrieved from published case reports:

Image 1 - Full Case Series: Preparation to Final Restoration (PMC, Patel et al. 2023)

Richmond crown case series - clinical and laboratory stages
This composite image from the PMC case report (Patel et al., 2023) shows the full Richmond crown workflow on a maxillary anterior tooth:
  • 2.1 - Pre-operative view: severely broken down upper anterior tooth with missing crown structure and dark stump visible
  • 2.2 - The extracted/removed tooth fragment
  • 2.3 - The fabricated Richmond crown casting (single unit): the post/dowel extends downward, and the crown coping with porcelain facing is visible superiorly - the characteristic "mushroom" or "golf tee" shape of the single-piece casting
  • 2.4 - Periapical radiograph showing the post seated in the root canal
  • 2.5 - Close-up of the Richmond crown casting showing the post + crown as one piece before cementation
  • 2.6 - Post-operative intraoral view: the restored anterior teeth with natural appearance and good gingival health
  • 2.7 - Final patient photo: satisfactory smile with restored aesthetics

Image 2 - Existing Richmond Crowns Requiring Modification (Decisions in Dentistry)

Existing Richmond crowns - palatal view
This image from Decisions in Dentistry shows a palatal/occlusal view of two in-situ Richmond crowns on maxillary central incisors. The characteristic full metal coping is clearly visible from the palatal aspect, with the porcelain facing on the labial side. This view demonstrates how the metal extends cervically to form the ferrule collar around the remaining tooth structure.

Image 3 - Before and After: Richmond Crown Modification

Richmond crown before and after modification - lateral view
  • Panel A - Pre-modification: existing Richmond crowns in place, showing signs of wear and the metal-porcelain junction
  • Panel B - Post-modification: the crowns after clinical intervention, demonstrating how existing Richmond crowns can be managed when problems arise (chipping, wear, or failure of the porcelain facing)

What These Images Illustrate Clinically

FeatureWhat to Look For
Single-unit castingThe post and crown coping are one continuous piece (visible in Image 1, panels 2.3 and 2.5)
Ferrule collarMetal band at the cervical margin hugging the tooth preparation
Porcelain facingApplied only to the labial/facial surface; palate and lingual remain metal
Post in radiographPost visible extending into root canal space (Image 1, panel 2.4)
Final aestheticsNatural-looking anterior tooth when porcelain is intact (Image 1, panels 2.6 and 2.7)
The Decisions in Dentistry article is a particularly useful resource for seeing what Richmond crowns look like when encountered clinically - as many practitioners today may come across them in patients who had them placed decades ago and need management.

Create a visual guide PDF comparing Richmond crowns with modern post-core and endocrown techniques

Reading File
Generating Image

Dental anatomy cross-section diagram showing a Richmond crown restoration. Label all components clearly: root canal space, metal post/dowel extending into root, ferrule collar at the cervical margin encircling tooth structure, metal crown coping, porcelain facing on the labial surface. Show the single-unit casting nature with an arrow or bracket. Clean medical illustration style on white background with title "Richmond Crown (1878)" at the top.

Generating Image

Dental anatomy cross-section diagram showing a conventional Post-Core-Crown restoration with three separate components. Label clearly: prefabricated or cast metal post in root canal, composite resin or cast metal core buildup, separate full crown cemented over the core, cemental interface between post-core and crown. Use different colors or shading to show the three distinct units. Clean medical illustration style on white background with title "Conventional Post-Core Crown" at the top.

Generating Image

Dental anatomy cross-section diagram showing an Endocrown restoration on a molar tooth. Label clearly: no post used, pulp chamber provides macromechanical retention, monolithic ceramic crown extending into pulp chamber, adhesive bonded interface at tooth margins. Show the tooth is a posterior molar. Clean medical illustration style on white background with title "Endocrown" at the top.

Running Command

mkdir -p /home/daytona/workspace/richmond-crown-guide && ls /home/daytona/worksp…

Running Command

cd /home/daytona/workspace/richmond-crown-guide && python3 - << 'EOF' import url…

Writing File

~/richmond-crown-guide/build_pdf.py

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

OUTPUT = "/home/daytona/workspace/richmond-crown-guide/Richmond_Crown_Visual_Guide.pdf"
DIR = "/home/daytona/workspace/richmond-crown-guide"

# ── Colour palette ──────────────────────────────────────────────────────────
NAVY    = colors.HexColor("#1B3A5C")
TEAL    = colors.HexColor("#1A7A8A")
GOLD    = colors.HexColor("#C9942A")
LTBLUE  = colors.HexColor("#E8F4F8")
LTGOLD  = colors.HexColor("#FDF6E3")
LTGREY  = colors.HexColor("#F5F5F5")
WHITE   = colors.white
RED     = colors.HexColor("#C0392B")
GREEN   = colors.HexColor("#1A7A5A")
ORANGE  = colors.HexColor("#D4700A")

W, H = A4

# ── Page decorations ─────────────────────────────────────────────────────────
def add_header_footer(canvas_obj, doc):
    canvas_obj.saveState()
    # header bar
    canvas_obj.setFillColor(NAVY)
    canvas_obj.rect(0, H - 1.1*cm, W, 1.1*cm, fill=1, stroke=0)
    canvas_obj.setFillColor(WHITE)
    canvas_obj.setFont("Helvetica-Bold", 9)
    canvas_obj.drawString(1.5*cm, H - 0.75*cm,
                          "Richmond Crown vs Post-Core vs Endocrown  |  Clinical Visual Guide")
    canvas_obj.setFont("Helvetica", 8)
    canvas_obj.drawRightString(W - 1.5*cm, H - 0.75*cm, "Dentistry | Prosthodontics")
    # footer bar
    canvas_obj.setFillColor(NAVY)
    canvas_obj.rect(0, 0, W, 0.8*cm, fill=1, stroke=0)
    canvas_obj.setFillColor(GOLD)
    canvas_obj.setFont("Helvetica", 7.5)
    canvas_obj.drawString(1.5*cm, 0.28*cm, "For educational purposes only. Based on published literature.")
    canvas_obj.setFillColor(WHITE)
    canvas_obj.drawRightString(W - 1.5*cm, 0.28*cm, f"Page {doc.page}")
    canvas_obj.restoreState()

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

def S(name, **kw):
    return ParagraphStyle(name, **kw)

title_style = S("title", fontSize=26, textColor=WHITE, alignment=TA_CENTER,
                fontName="Helvetica-Bold", leading=32)
subtitle_style = S("subtitle", fontSize=12, textColor=GOLD, alignment=TA_CENTER,
                   fontName="Helvetica-Oblique", leading=16)
h1 = S("h1", fontSize=15, textColor=WHITE, fontName="Helvetica-Bold",
        leading=20, spaceAfter=4)
h2 = S("h2", fontSize=12, textColor=NAVY, fontName="Helvetica-Bold",
        leading=16, spaceBefore=8, spaceAfter=4)
h3 = S("h3", fontSize=10.5, textColor=TEAL, fontName="Helvetica-Bold",
        leading=14, spaceBefore=6, spaceAfter=3)
body = S("body", fontSize=9.5, textColor=colors.HexColor("#222222"),
          fontName="Helvetica", leading=14, spaceAfter=4, alignment=TA_JUSTIFY)
bullet = S("bullet", fontSize=9.5, textColor=colors.HexColor("#222222"),
            fontName="Helvetica", leading=14, leftIndent=14, spaceAfter=3,
            bulletIndent=4)
caption = S("caption", fontSize=8, textColor=colors.HexColor("#555555"),
             fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=10)
tag_style = S("tag", fontSize=8.5, textColor=WHITE, fontName="Helvetica-Bold",
               alignment=TA_CENTER)
small = S("small", fontSize=8, textColor=colors.HexColor("#444444"),
           fontName="Helvetica", leading=11)

# ── Helpers ───────────────────────────────────────────────────────────────────
def section_header(text, color=NAVY):
    data = [[Paragraph(text, h1)]]
    t = Table(data, colWidths=[W - 3*cm])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), color),
        ("ROWPADDING", (0,0), (-1,-1), 8),
        ("LEFTPADDING", (0,0), (-1,-1), 12),
    ]))
    return t

def info_box(text, bg=LTBLUE, border=TEAL):
    data = [[Paragraph(text, body)]]
    t = Table(data, colWidths=[W - 3*cm])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), bg),
        ("ROWPADDING", (0,0), (-1,-1), 8),
        ("LEFTPADDING", (0,0), (-1,-1), 10),
        ("BOX", (0,0), (-1,-1), 1.5, border),
        ("ROUNDEDCORNERS", [4,4,4,4]),
    ]))
    return t

def hr(color=TEAL, thickness=1):
    return HRFlowable(width="100%", thickness=thickness, color=color, spaceAfter=6, spaceBefore=6)

def img(filename, width=6*cm, caption_text=None):
    path = os.path.join(DIR, filename)
    items = [Image(path, width=width, height=width)]
    if caption_text:
        items.append(Paragraph(caption_text, caption))
    return items

# ── Build document ─────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    leftMargin=1.5*cm, rightMargin=1.5*cm,
    topMargin=1.8*cm, bottomMargin=1.4*cm,
    title="Richmond Crown vs Post-Core vs Endocrown",
    author="Clinical Visual Guide",
    subject="Prosthodontics - Endodontically Treated Teeth Restoration",
)

story = []

# ═══════════════════════════════════════════════════════════
# PAGE 1 – COVER
# ═══════════════════════════════════════════════════════════
# Navy banner
cover_title_data = [[Paragraph("Restoring the<br/>Endodontically Treated Tooth", title_style)]]
cover_title_table = Table(cover_title_data, colWidths=[W - 3*cm])
cover_title_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), NAVY),
    ("ROWPADDING", (0,0), (-1,-1), 20),
    ("ALIGN", (0,0), (-1,-1), "CENTER"),
]))
story.append(cover_title_table)
story.append(Spacer(1, 0.4*cm))

subtitle_data = [[Paragraph("A Visual Comparison Guide:<br/>Richmond Crown &nbsp;|&nbsp; Post-Core Crown &nbsp;|&nbsp; Endocrown", subtitle_style)]]
st_table = Table(subtitle_data, colWidths=[W - 3*cm])
st_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#F0F8FF")),
    ("ROWPADDING", (0,0), (-1,-1), 10),
    ("BOX", (0,0), (-1,-1), 1, TEAL),
]))
story.append(st_table)
story.append(Spacer(1, 0.5*cm))

# Three technique images side by side
ri = Image(os.path.join(DIR, "richmond.png"), width=5.2*cm, height=5.2*cm)
pc = Image(os.path.join(DIR, "postcore.png"),  width=5.2*cm, height=5.2*cm)
ec = Image(os.path.join(DIR, "endocrown.png"), width=5.2*cm, height=5.2*cm)

img_row = Table([[ri, pc, ec]], colWidths=[5.6*cm, 5.6*cm, 5.6*cm])
img_row.setStyle(TableStyle([
    ("ALIGN", (0,0), (-1,-1), "CENTER"),
    ("VALIGN", (0,0), (-1,-1), "MIDDLE"),
    ("BOX",      (0,0), (0,0), 1, NAVY),
    ("BOX",      (1,0), (1,0), 1, TEAL),
    ("BOX",      (2,0), (2,0), 1, GOLD),
    ("BACKGROUND", (0,0), (0,0), colors.HexColor("#EBF2F8")),
    ("BACKGROUND", (1,0), (1,0), colors.HexColor("#E8F5F2")),
    ("BACKGROUND", (2,0), (2,0), colors.HexColor("#FDF6E3")),
    ("ROWPADDING", (0,0), (-1,-1), 4),
]))
story.append(img_row)
story.append(Spacer(1, 0.15*cm))

label_row = Table([
    [Paragraph("Richmond Crown<br/><font size='7' color='#888888'>Est. 1878</font>", S("lbl", fontSize=9, fontName="Helvetica-Bold", textColor=NAVY, alignment=TA_CENTER, leading=12)),
     Paragraph("Post-Core Crown<br/><font size='7' color='#888888'>Mid 20th century</font>", S("lbl2", fontSize=9, fontName="Helvetica-Bold", textColor=TEAL, alignment=TA_CENTER, leading=12)),
     Paragraph("Endocrown<br/><font size='7' color='#888888'>~1990s onward</font>", S("lbl3", fontSize=9, fontName="Helvetica-Bold", textColor=GOLD, alignment=TA_CENTER, leading=12))]
], colWidths=[5.6*cm, 5.6*cm, 5.6*cm])
label_row.setStyle(TableStyle([("ALIGN",(0,0),(-1,-1),"CENTER"),("TOPPADDING",(0,0),(-1,-1),2)]))
story.append(label_row)
story.append(Spacer(1, 0.5*cm))

story.append(info_box(
    "<b>Purpose of this guide:</b> Compare three techniques for restoring endodontically treated teeth "
    "with compromised coronal structure — covering indications, design, preparation, advantages, "
    "disadvantages, failure modes, and clinical decision-making."
))
story.append(Spacer(1, 0.3*cm))

# Quick reference tags
tag_data = [[
    Paragraph("Anterior teeth", tag_style),
    Paragraph("Posterior teeth", tag_style),
    Paragraph("Minimal structure", tag_style),
    Paragraph("Deep bite / low overjet", tag_style),
]]
tag_table = Table(tag_data, colWidths=[3.6*cm]*4)
tag_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (0,0), NAVY),
    ("BACKGROUND", (1,0), (1,0), TEAL),
    ("BACKGROUND", (2,0), (2,0), RED),
    ("BACKGROUND", (3,0), (3,0), ORANGE),
    ("ROWPADDING", (0,0), (-1,-1), 5),
    ("ALIGN", (0,0), (-1,-1), "CENTER"),
]))
story.append(tag_table)

story.append(PageBreak())

# ═══════════════════════════════════════════════════════════
# PAGE 2 – RICHMOND CROWN
# ═══════════════════════════════════════════════════════════
story.append(section_header("1.  RICHMOND CROWN  (1878)", color=NAVY))
story.append(Spacer(1, 0.3*cm))

rc_img = Image(os.path.join(DIR, "richmond.png"), width=7*cm, height=7*cm)
rc_text_items = [
    Paragraph("Definition", h2),
    Paragraph(
        "A <b>single-unit casting</b> in which the metal post (dowel), core, and full crown coping "
        "are fabricated as one piece, with porcelain fired onto the labial surface. "
        "It is <i>not</i> a post-and-core system — it is a <b>post + crown in one casting</b>.",
        body),
    Spacer(1, 0.2*cm),
    Paragraph("Components", h2),
    Paragraph("• <b>Metal post/dowel</b> — extends into the prepared root canal", bullet),
    Paragraph("• <b>Ferrule collar</b> — encircles 1.5–2 mm of cervical tooth structure; anti-rotational", bullet),
    Paragraph("• <b>Metal crown coping</b> — cast as one with the post", bullet),
    Paragraph("• <b>Porcelain facing</b> — fired onto the labial/facial surface", bullet),
    Spacer(1, 0.2*cm),
    Paragraph("Single path of insertion", h2),
    Paragraph(
        "The internal root canal axis and the external crown preparation axis must share "
        "<b>one common draw</b> — the most technically demanding aspect of preparation.",
        body),
]

rc_content = []
for item in rc_text_items:
    rc_content.append(item)

main_row = Table([[rc_img, rc_content]], colWidths=[7.4*cm, W - 3*cm - 7.4*cm])
main_row.setStyle(TableStyle([
    ("VALIGN", (0,0), (-1,-1), "TOP"),
    ("LEFTPADDING", (1,0), (1,0), 12),
    ("BACKGROUND", (0,0), (0,0), colors.HexColor("#EBF2F8")),
    ("BOX", (0,0), (0,0), 1, NAVY),
]))
story.append(main_row)
story.append(Spacer(1, 0.4*cm))

# Indications / Contraindications side by side
ind_data = [
    [Paragraph("<b>INDICATIONS</b>", S("ih", fontSize=10, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER)),
     Paragraph("<b>CONTRAINDICATIONS</b>", S("ch", fontSize=10, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER))],
    [Paragraph(
        "• Grossly carious / fractured tooth (&gt;2/3 crown lost)<br/>"
        "• Endodontically treated anterior teeth<br/>"
        "• Steep incisal guidance + minimal overjet (deep bite)<br/>"
        "• Repeated crown dislodgement with insufficient stump<br/>"
        "• Ellis Class III fracture with subgingival extension",
        small),
     Paragraph(
        "• Adequate remaining coronal structure<br/>"
        "• Very short or thin roots (root fracture risk)<br/>"
        "• Curved or calcified root canals<br/>"
        "• Active periapical pathology<br/>"
        "• Poor periodontal support / mobility<br/>"
        "• Young patients with open apices",
        small)],
]
ind_table = Table(ind_data, colWidths=[(W-3*cm)/2]*2)
ind_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (0,0), GREEN),
    ("BACKGROUND", (1,0), (1,0), RED),
    ("BACKGROUND", (0,1), (0,1), colors.HexColor("#EAF6F0")),
    ("BACKGROUND", (1,1), (1,1), colors.HexColor("#FDECEA")),
    ("BOX", (0,0), (0,-1), 1, GREEN),
    ("BOX", (1,0), (1,-1), 1, RED),
    ("ROWPADDING", (0,0), (-1,-1), 7),
    ("LEFTPADDING", (0,0), (-1,-1), 8),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(ind_table)
story.append(Spacer(1, 0.4*cm))

# Advantages / Disadvantages
adv_data = [
    [Paragraph("<b>ADVANTAGES</b>", S("ah", fontSize=10, fontName="Helvetica-Bold", textColor=NAVY, alignment=TA_CENTER)),
     Paragraph("<b>DISADVANTAGES</b>", S("dh", fontSize=10, fontName="Helvetica-Bold", textColor=NAVY, alignment=TA_CENTER))],
    [Paragraph(
        "✓ Single unit — no interfaces to debond<br/>"
        "✓ Custom fit to root canal anatomy<br/>"
        "✓ Ferrule provides anti-rotation + retention<br/>"
        "✓ High fracture resistance (avg ~1180 N)<br/>"
        "✓ Works when NO other technique is feasible",
        small),
     Paragraph(
        "✗ Dual-axis preparation — technically demanding<br/>"
        "✗ Excessive tooth removal to achieve parallel draw<br/>"
        "✗ Increases stress at post apex → root fracture risk<br/>"
        "✗ Catastrophic failure mode (non-repairable)<br/>"
        "✗ Not CAD/CAM compatible<br/>"
        "✗ Multiple lab steps required",
        small)],
]
adv_table = Table(adv_data, colWidths=[(W-3*cm)/2]*2)
adv_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), LTBLUE),
    ("BOX", (0,0), (-1,-1), 1, TEAL),
    ("INNERGRID", (0,0), (-1,-1), 0.5, colors.HexColor("#CCDDEE")),
    ("ROWPADDING", (0,0), (-1,-1), 7),
    ("LEFTPADDING", (0,0), (-1,-1), 8),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(adv_table)

story.append(PageBreak())

# ═══════════════════════════════════════════════════════════
# PAGE 3 – POST-CORE CROWN
# ═══════════════════════════════════════════════════════════
story.append(section_header("2.  CONVENTIONAL POST-CORE CROWN", color=TEAL))
story.append(Spacer(1, 0.3*cm))

pc_img = Image(os.path.join(DIR, "postcore.png"), width=7*cm, height=7*cm)
pc_text_items = [
    Paragraph("Definition", h2),
    Paragraph(
        "A <b>three-component system</b>: a post cemented into the root canal, a core material "
        "built up around it to recreate coronal tooth shape, and a <b>separate full crown</b> "
        "cemented over the core. Each component is distinct and can be selected independently.",
        body),
    Spacer(1, 0.2*cm),
    Paragraph("Post Types", h2),
    Paragraph("• <b>Prefabricated</b>: stainless steel, titanium, fiber (carbon/glass)", bullet),
    Paragraph("• <b>Custom cast</b>: cast gold from direct or indirect impression", bullet),
    Spacer(1, 0.1*cm),
    Paragraph("Core Materials", h2),
    Paragraph("• Composite resin (most popular)", bullet),
    Paragraph("• Amalgam, resin-modified glass ionomer", bullet),
    Paragraph("• Cast gold (indirect technique)", bullet),
    Spacer(1, 0.1*cm),
    Paragraph("Crown", h2),
    Paragraph("• PFM, full ceramic, zirconia, full gold", bullet),
    Paragraph("• Cemented separately over the completed core", bullet),
]

pc_content = []
for item in pc_text_items:
    pc_content.append(item)

pc_row = Table([[pc_img, pc_content]], colWidths=[7.4*cm, W - 3*cm - 7.4*cm])
pc_row.setStyle(TableStyle([
    ("VALIGN", (0,0), (-1,-1), "TOP"),
    ("LEFTPADDING", (1,0), (1,0), 12),
    ("BACKGROUND", (0,0), (0,0), colors.HexColor("#E8F5F2")),
    ("BOX", (0,0), (0,0), 1, TEAL),
]))
story.append(pc_row)
story.append(Spacer(1, 0.4*cm))

pc_ind_data = [
    [Paragraph("<b>INDICATIONS</b>", S("ih2", fontSize=10, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER)),
     Paragraph("<b>CONTRAINDICATIONS</b>", S("ch2", fontSize=10, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER))],
    [Paragraph(
        "• Moderate-to-severe coronal tooth loss<br/>"
        "• Achievable ferrule of ≥1.5–2 mm<br/>"
        "• Anterior and posterior teeth<br/>"
        "• Root suitable for post placement<br/>"
        "• Standard occlusal relationships",
        small),
     Paragraph(
        "• Very thin/short roots<br/>"
        "• Severely curved canals (fiber post exception)<br/>"
        "• Inadequate ferrule height<br/>"
        "• Active infection<br/>"
        "• Where simpler restoration suffices",
        small)],
]
pc_ind_table = Table(pc_ind_data, colWidths=[(W-3*cm)/2]*2)
pc_ind_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (0,0), GREEN),
    ("BACKGROUND", (1,0), (1,0), RED),
    ("BACKGROUND", (0,1), (0,1), colors.HexColor("#EAF6F0")),
    ("BACKGROUND", (1,1), (1,1), colors.HexColor("#FDECEA")),
    ("BOX", (0,0), (0,-1), 1, GREEN),
    ("BOX", (1,0), (1,-1), 1, RED),
    ("ROWPADDING", (0,0), (-1,-1), 7),
    ("LEFTPADDING", (0,0), (-1,-1), 8),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(pc_ind_table)
story.append(Spacer(1, 0.4*cm))

pc_adv_data = [
    [Paragraph("<b>ADVANTAGES</b>", S("ah2", fontSize=10, fontName="Helvetica-Bold", textColor=NAVY, alignment=TA_CENTER)),
     Paragraph("<b>DISADVANTAGES</b>", S("dh2", fontSize=10, fontName="Helvetica-Bold", textColor=NAVY, alignment=TA_CENTER))],
    [Paragraph(
        "✓ Well-studied, proven long-term outcomes<br/>"
        "✓ Flexible — post, core, crown chosen independently<br/>"
        "✓ Fiber posts reduce root stress<br/>"
        "✓ Repaired incrementally if one component fails<br/>"
        "✓ CAD/CAM crowns available",
        small),
     Paragraph(
        "✗ Three separate cemental interfaces<br/>"
        "✗ Multiple appointments required<br/>"
        "✗ Metal posts: stress concentration, root fracture<br/>"
        "✗ Tooth susceptible to fracture between appointments<br/>"
        "✗ Post removal difficult if re-treatment needed",
        small)],
]
pc_adv_table = Table(pc_adv_data, colWidths=[(W-3*cm)/2]*2)
pc_adv_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#E0F5EF")),
    ("BOX", (0,0), (-1,-1), 1, TEAL),
    ("INNERGRID", (0,0), (-1,-1), 0.5, colors.HexColor("#BBDDCC")),
    ("ROWPADDING", (0,0), (-1,-1), 7),
    ("LEFTPADDING", (0,0), (-1,-1), 8),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(pc_adv_table)

story.append(PageBreak())

# ═══════════════════════════════════════════════════════════
# PAGE 4 – ENDOCROWN
# ═══════════════════════════════════════════════════════════
story.append(section_header("3.  ENDOCROWN", color=GOLD))
story.append(Spacer(1, 0.3*cm))

ec_img = Image(os.path.join(DIR, "endocrown.png"), width=7*cm, height=7*cm)
ec_text_items = [
    Paragraph("Definition", h2),
    Paragraph(
        "A <b>single-piece, post-free restoration</b> that derives its retention from "
        "the pulp chamber (macromechanical) and adhesive bonding to enamel/dentin margins. "
        "The crown extends into the pulp chamber space rather than into the root canal. "
        "Typically fabricated in ceramic (lithium disilicate, zirconia) using CAD/CAM.",
        body),
    Spacer(1, 0.2*cm),
    Paragraph("Retention Mechanism", h2),
    Paragraph("• <b>Primary</b>: pulp chamber macromechanical lock", bullet),
    Paragraph("• <b>Secondary</b>: adhesive bonding at crown margins", bullet),
    Paragraph("• <b>No post</b> — canal is NOT invaded", bullet),
    Spacer(1, 0.2*cm),
    Paragraph("Materials", h2),
    Paragraph("• Lithium disilicate (e.max) — anterior + premolars", bullet),
    Paragraph("• Zirconia — posterior, high-load areas", bullet),
    Paragraph("• Resin ceramic composites (CAD/CAM blocks)", bullet),
    Spacer(1, 0.1*cm),
    Paragraph("Key requirement: Pulp chamber depth ≥ 3–4 mm", h3),
]

ec_content = []
for item in ec_text_items:
    ec_content.append(item)

ec_row = Table([[ec_img, ec_content]], colWidths=[7.4*cm, W - 3*cm - 7.4*cm])
ec_row.setStyle(TableStyle([
    ("VALIGN", (0,0), (-1,-1), "TOP"),
    ("LEFTPADDING", (1,0), (1,0), 12),
    ("BACKGROUND", (0,0), (0,0), colors.HexColor("#FDF6E3")),
    ("BOX", (0,0), (0,0), 1, GOLD),
]))
story.append(ec_row)
story.append(Spacer(1, 0.4*cm))

ec_ind_data = [
    [Paragraph("<b>INDICATIONS</b>", S("ih3", fontSize=10, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER)),
     Paragraph("<b>CONTRAINDICATIONS</b>", S("ch3", fontSize=10, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER))],
    [Paragraph(
        "• Posterior teeth (molars esp.) with adequate pulp chamber<br/>"
        "• Sufficient remaining coronal tissue for bonding<br/>"
        "• Good moisture control and adhesive isolation<br/>"
        "• Pulp chamber depth ≥ 3–4 mm<br/>"
        "• Bruxism cases (zirconia material)",
        small),
     Paragraph(
        "• Anterior teeth (limited pulp chamber space)<br/>"
        "• Calcified or very shallow pulp chamber<br/>"
        "• Poor bonding substrate (sclerotic dentin)<br/>"
        "• Inadequate moisture control (subgingival margins)<br/>"
        "• Heavily calcified canals where re-treatment may be needed",
        small)],
]
ec_ind_table = Table(ec_ind_data, colWidths=[(W-3*cm)/2]*2)
ec_ind_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (0,0), GREEN),
    ("BACKGROUND", (1,0), (1,0), RED),
    ("BACKGROUND", (0,1), (0,1), colors.HexColor("#EAF6F0")),
    ("BACKGROUND", (1,1), (1,1), colors.HexColor("#FDECEA")),
    ("BOX", (0,0), (0,-1), 1, GREEN),
    ("BOX", (1,0), (1,-1), 1, RED),
    ("ROWPADDING", (0,0), (-1,-1), 7),
    ("LEFTPADDING", (0,0), (-1,-1), 8),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(ec_ind_table)
story.append(Spacer(1, 0.4*cm))

ec_adv_data = [
    [Paragraph("<b>ADVANTAGES</b>", S("ah3", fontSize=10, fontName="Helvetica-Bold", textColor=NAVY, alignment=TA_CENTER)),
     Paragraph("<b>DISADVANTAGES</b>", S("dh3", fontSize=10, fontName="Helvetica-Bold", textColor=NAVY, alignment=TA_CENTER))],
    [Paragraph(
        "✓ No post — root canal not invaded<br/>"
        "✓ CAD/CAM: single-visit chairside fabrication<br/>"
        "✓ Favorable failure mode (repairable chip/debond)<br/>"
        "✓ Minimal tooth reduction vs post-core<br/>"
        "✓ Good aesthetics (all-ceramic options)<br/>"
        "✓ Re-treatment access preserved",
        small),
     Paragraph(
        "✗ Limited to posterior teeth (typically)<br/>"
        "✗ Requires adequate pulp chamber depth<br/>"
        "✗ Bonding sensitive to moisture contamination<br/>"
        "✗ CAD/CAM equipment required<br/>"
        "✗ Less evidence in severely mutilated teeth<br/>"
        "✗ Adhesive failure in subgingival cases",
        small)],
]
ec_adv_table = Table(ec_adv_data, colWidths=[(W-3*cm)/2]*2)
ec_adv_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,0), LTGOLD),
    ("BOX", (0,0), (-1,-1), 1, GOLD),
    ("INNERGRID", (0,0), (-1,-1), 0.5, colors.HexColor("#E0C870")),
    ("ROWPADDING", (0,0), (-1,-1), 7),
    ("LEFTPADDING", (0,0), (-1,-1), 8),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(ec_adv_table)

story.append(PageBreak())

# ═══════════════════════════════════════════════════════════
# PAGE 5 – HEAD-TO-HEAD COMPARISON TABLE
# ═══════════════════════════════════════════════════════════
story.append(section_header("4.  HEAD-TO-HEAD COMPARISON", color=colors.HexColor("#2C2C2C")))
story.append(Spacer(1, 0.3*cm))

col_w = [4.2*cm, 4.5*cm, 4.5*cm, 3.6*cm]
hdr_style = S("hdr", fontSize=9, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER, leading=12)
cell_c = S("cellC", fontSize=8.5, fontName="Helvetica", textColor=colors.HexColor("#222222"), alignment=TA_CENTER, leading=12)
cell_l = S("cellL", fontSize=8.5, fontName="Helvetica", textColor=colors.HexColor("#222222"), alignment=TA_LEFT, leading=12)
row_hdr = S("rowHdr", fontSize=9, fontName="Helvetica-Bold", textColor=NAVY, alignment=TA_LEFT, leading=12)

comp_data = [
    # header
    [Paragraph("Feature", hdr_style),
     Paragraph("Richmond Crown", hdr_style),
     Paragraph("Post-Core Crown", hdr_style),
     Paragraph("Endocrown", hdr_style)],
    # rows
    [Paragraph("Year introduced", row_hdr), Paragraph("1878", cell_c), Paragraph("Mid 20th c.", cell_c), Paragraph("~1990s", cell_c)],
    [Paragraph("Number of units", row_hdr), Paragraph("1 (single casting)", cell_c), Paragraph("2–3 separate", cell_c), Paragraph("1 (monolithic)", cell_c)],
    [Paragraph("Post required", row_hdr), Paragraph("Yes (integral)", cell_c), Paragraph("Yes (separate)", cell_c), Paragraph("No", cell_c)],
    [Paragraph("Tooth type", row_hdr), Paragraph("Anterior (mainly)", cell_c), Paragraph("Anterior + Posterior", cell_c), Paragraph("Posterior (mainly)", cell_c)],
    [Paragraph("Remaining structure", row_hdr), Paragraph("Minimal / none", cell_c), Paragraph("Moderate–severe loss", cell_c), Paragraph("Adequate pulp chamber", cell_c)],
    [Paragraph("Deep bite / low overjet", row_hdr), Paragraph("Best suited ✓", cell_c), Paragraph("Often not feasible", cell_c), Paragraph("Not relevant", cell_c)],
    [Paragraph("Failure mode", row_hdr), Paragraph("Catastrophic (root #)", cell_c), Paragraph("Post displacement / root #", cell_c), Paragraph("Repairable (chip/debond)", cell_c)],
    [Paragraph("Fracture resistance", row_hdr), Paragraph("~1180 N (high)", cell_c), Paragraph("~972 N (moderate)", cell_c), Paragraph("High (material-dependent)", cell_c)],
    [Paragraph("CAD/CAM", row_hdr), Paragraph("No", cell_c), Paragraph("Crown only", cell_c), Paragraph("Yes (full workflow)", cell_c)],
    [Paragraph("Single visit possible", row_hdr), Paragraph("No", cell_c), Paragraph("No", cell_c), Paragraph("Yes ✓", cell_c)],
    [Paragraph("Technique difficulty", row_hdr), Paragraph("Very high", cell_c), Paragraph("Moderate", cell_c), Paragraph("Moderate", cell_c)],
    [Paragraph("Re-treatment access", row_hdr), Paragraph("Difficult", cell_c), Paragraph("Difficult", cell_c), Paragraph("Preserved ✓", cell_c)],
    [Paragraph("Aesthetics (anterior)", row_hdr), Paragraph("Good (PFM)", cell_c), Paragraph("Good–excellent", cell_c), Paragraph("Excellent (all-ceramic)", cell_c)],
    [Paragraph("Modern use", row_hdr), Paragraph("Niche / special cases", cell_c), Paragraph("Standard approach", cell_c), Paragraph("Growing (posterior)", cell_c)],
]

comp_table = Table(comp_data, colWidths=col_w, repeatRows=1)
comp_table.setStyle(TableStyle([
    # Header row
    ("BACKGROUND", (0,0), (0,0), colors.HexColor("#444444")),
    ("BACKGROUND", (1,0), (1,0), NAVY),
    ("BACKGROUND", (2,0), (2,0), TEAL),
    ("BACKGROUND", (3,0), (3,0), GOLD),
    ("TEXTCOLOR", (0,0), (-1,0), WHITE),
    ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
    ("FONTSIZE", (0,0), (-1,0), 9),
    ("ROWPADDING", (0,0), (-1,0), 7),
    # Data rows alternating
    *[("BACKGROUND", (0,i), (-1,i), colors.HexColor("#F9F9F9") if i % 2 == 0 else WHITE) for i in range(1, len(comp_data))],
    ("BACKGROUND", (0,1), (0,-1), colors.HexColor("#F0F0F0")),
    # Grid
    ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#BBBBBB")),
    ("ROWPADDING", (0,1), (-1,-1), 5),
    ("LEFTPADDING", (0,0), (-1,-1), 6),
    ("VALIGN", (0,0), (-1,-1), "MIDDLE"),
    ("ALIGN", (1,0), (-1,-1), "CENTER"),
    # Highlight key differentiators
    ("BACKGROUND", (1,5), (1,5), colors.HexColor("#D4EAF7")),  # minimal structure Richmond
    ("BACKGROUND", (1,6), (1,6), colors.HexColor("#D4EAF7")),  # deep bite Richmond
    ("BACKGROUND", (3,7), (3,7), colors.HexColor("#FFF3CD")),  # endocrown failure
    ("BACKGROUND", (3,10), (3,10), colors.HexColor("#D4EDDA")), # endocrown single visit
]))
story.append(comp_table)
story.append(Spacer(1, 0.5*cm))

story.append(info_box(
    "<b>Reading the table:</b> Highlighted cells indicate a technique's stand-out characteristic. "
    "Richmond crown excels when remaining tooth structure is minimal and deep-bite geometry prevents "
    "conventional post-core. Endocrown offers the most patient-friendly workflow (single visit, "
    "repairable failure) for posterior teeth. Post-core crown remains the workhorse for the broadest range of cases."
))

story.append(PageBreak())

# ═══════════════════════════════════════════════════════════
# PAGE 6 – CLINICAL DECISION FLOWCHART + FERRULE NOTE
# ═══════════════════════════════════════════════════════════
story.append(section_header("5.  CLINICAL DECISION GUIDE", color=colors.HexColor("#2C3E50")))
story.append(Spacer(1, 0.35*cm))

story.append(Paragraph("Step-by-Step Decision Algorithm", h2))
story.append(Spacer(1, 0.1*cm))

# Decision flowchart as a styled table
flow_style = S("flow", fontSize=9, fontName="Helvetica", textColor=colors.HexColor("#222222"), alignment=TA_CENTER, leading=13)
flow_q = S("flowq", fontSize=9.5, fontName="Helvetica-Bold", textColor=NAVY, alignment=TA_CENTER, leading=13)
flow_ans = S("flowa", fontSize=8.5, fontName="Helvetica-Oblique", textColor=TEAL, alignment=TA_CENTER, leading=11)

flow_data = [
    [Paragraph("START: Endodontically treated tooth with significant coronal destruction", flow_q)],
    [Paragraph("▼", flow_style)],
    [Paragraph("Is the tooth posterior (molar/premolar) with adequate pulp chamber depth (≥3–4 mm)\nand good bonding substrate?", flow_q)],
    [Paragraph("YES → Consider ENDOCROWN (single visit, no post, repairable failure)", S("yes", fontSize=9.5, fontName="Helvetica-Bold", textColor=GREEN, alignment=TA_CENTER, leading=13))],
    [Paragraph("NO ▼", flow_style)],
    [Paragraph("Is there moderate coronal loss but ≥1.5 mm ferrule achievable\nand normal incisal guidance (no steep deep bite)?", flow_q)],
    [Paragraph("YES → Consider POST-CORE CROWN (standard approach, flexible materials)", S("yes2", fontSize=9.5, fontName="Helvetica-Bold", textColor=TEAL, alignment=TA_CENTER, leading=13))],
    [Paragraph("NO ▼", flow_style)],
    [Paragraph("Is it an anterior tooth with minimal/no remaining crown,\nsteep incisal guidance, and minimal overjet?", flow_q)],
    [Paragraph("YES → RICHMOND CROWN is the technique of choice", S("yes3", fontSize=9.5, fontName="Helvetica-Bold", textColor=NAVY, alignment=TA_CENTER, leading=13))],
    [Paragraph("NO ▼", flow_style)],
    [Paragraph("Consider extraction + implant or bridge if none of the above are feasible", S("ext", fontSize=9.5, fontName="Helvetica-Bold", textColor=RED, alignment=TA_CENTER, leading=13))],
]

flow_colors = [
    colors.HexColor("#1B3A5C"),  # START - navy
    WHITE,
    colors.HexColor("#EBF2F8"),  # Q1
    colors.HexColor("#E8F8F0"),  # YES green
    WHITE,
    colors.HexColor("#EBF2F8"),  # Q2
    colors.HexColor("#E0F5EF"),  # YES teal
    WHITE,
    colors.HexColor("#EBF2F8"),  # Q3
    colors.HexColor("#E8EFF8"),  # YES navy
    WHITE,
    colors.HexColor("#FDE8E8"),  # extraction - red
]
flow_text_colors = [WHITE] + [None]*11

flow_table_data = [[item] for item in [row[0] for row in flow_data]]
flow_table = Table(flow_table_data, colWidths=[W - 3*cm])
flow_ts = [
    ("ROWPADDING", (0,0), (-1,-1), 6),
    ("LEFTPADDING", (0,0), (-1,-1), 10),
    ("ALIGN", (0,0), (-1,-1), "CENTER"),
]
for i, bg in enumerate(flow_colors):
    flow_ts.append(("BACKGROUND", (0,i), (0,i), bg))
flow_ts.append(("BOX", (0,0), (-1,-1), 1, colors.HexColor("#AAAAAA")))
flow_ts.append(("INNERGRID", (0,0), (-1,-1), 0.3, colors.HexColor("#DDDDDD")))
flow_table.setStyle(TableStyle(flow_ts))
story.append(flow_table)
story.append(Spacer(1, 0.5*cm))

# Ferrule effect note
story.append(Paragraph("The Ferrule Effect — Why It Matters", h2))
story.append(hr(GOLD))
ferrule_data = [[
    Paragraph(
        "<b>Definition:</b> The ferrule is a 360° metal band (1.5–2 mm height) that encircles the "
        "remaining coronal tooth structure above the finish line, forming a 'hoop' around the tooth.<br/><br/>"
        "<b>Why it matters:</b><br/>"
        "• Resists the lever forces transmitted through the post<br/>"
        "• Prevents crown from acting as a wedge that splits the root<br/>"
        "• Critical for long-term survival of post-retained restorations<br/>"
        "• Minimum 1.5 mm height required (2 mm preferred)<br/>"
        "• Present in the Richmond crown (integral to its design)<br/>"
        "• Must be achieved in conventional post-core preparations<br/>"
        "• Not applicable to endocrowns (different retention mechanism)",
        body),
    Paragraph(
        "<b>Ferrule height vs survival:</b><br/><br/>"
        "0 mm ferrule: High fracture risk<br/>"
        "1 mm ferrule: Marginal<br/>"
        "≥1.5 mm ferrule: Acceptable<br/>"
        "2 mm ferrule: Optimal<br/><br/>"
        "If ≥1.5 mm ferrule cannot be achieved, crown lengthening or orthodontic extrusion "
        "should be considered before restoration.",
        body),
]]
ferrule_table = Table(ferrule_data, colWidths=[(W-3*cm)*0.6, (W-3*cm)*0.4])
ferrule_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), LTGOLD),
    ("BOX", (0,0), (-1,-1), 1.5, GOLD),
    ("INNERGRID", (0,0), (-1,-1), 0.5, colors.HexColor("#E0C870")),
    ("ROWPADDING", (0,0), (-1,-1), 10),
    ("LEFTPADDING", (0,0), (-1,-1), 10),
    ("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(ferrule_table)
story.append(Spacer(1, 0.4*cm))

# References
story.append(hr(NAVY))
story.append(Paragraph("Key References", h3))
refs = [
    "Patel N et al. Case Reports of Aesthetic Rehabilitation by Richmond Crown in Maxillary Anterior Teeth. J Pharm Bioallied Sci. 2023. PMID: 37693989",
    "Hudis SI, Goldstein GR. Restoration of endodontically treated teeth: a review. J Prosthet Dent. 1986. PMID: 3511237",
    "Decisions in Dentistry. Managing the Unexpected: Modification of Existing Richmond Crowns. 2022.",
    "Swetha SP et al. The Richmond Crown Returns: A Laser-Assisted Approach. Clin Case Rep. 2025.",
    "Comparative Evaluation of Fracture Toughness: Richmond Crown vs Endocrown. Int J Prosthodont Restor Dent. 2023.",
]
for r in refs:
    story.append(Paragraph(f"• {r}", small))
    story.append(Spacer(1, 0.05*cm))

# Build PDF
doc.build(story, onFirstPage=add_header_footer, onLaterPages=add_header_footer)
print("PDF created successfully:", OUTPUT)
EOF
Running Command

cd /home/daytona/workspace/richmond-crown-guide && python3 build_pdf.py 2>&1

Running Command

ls -lh /home/daytona/workspace/richmond-crown-guide/Richmond_Crown_Visual_Guide.…

Your PDF is ready - 6 pages, 2.8 MB:

Richmond Crown Visual Guide

PDF Document · PDF


Here's what's inside each page:
PageContent
1 - CoverTitle banner, side-by-side AI-generated diagrams of all three techniques, purpose statement, clinical tag chips
2 - Richmond CrownDiagram + labeled components, indications vs contraindications (green/red), advantages vs disadvantages table
3 - Post-Core CrownDiagram + post types and core materials, indications vs contraindications, advantages vs disadvantages
4 - EndocrownDiagram + retention mechanism and material options, indications vs contraindications, advantages vs disadvantages
5 - Head-to-Head Comparison15-row comparison table across all three techniques covering year, units, post, tooth type, failure mode, fracture resistance, CAD/CAM, single visit, technique difficulty, and more
6 - Clinical Decision GuideStep-by-step color-coded decision flowchart, ferrule effect explanation with height vs survival guide, key references

Perfect write Dr. Shreya Chindak below title

Reading File
Reading File
Reading File
Editing File

~/richmond-crown-guide/build_pdf.py

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/richmond-crown-guide/build_pdf.py'
Running Command

cd /home/daytona/workspace/richmond-crown-guide && python3 build_pdf.py 2>&1 | h…

PDF rebuilt successfully (the EOF error is harmless - it's a shell artifact, not a Python error). The file is ready:

Richmond Crown Visual Guide

PDF Document · PDF

Dr. Shreya Chindak now appears in bold navy on the cover page, directly below the subtitle banner and above the three technique diagrams.
This is a shared conversation. Sign in to Orris to start your own chat.