Please summarize this in study guide

Reading File
Running Command

python3 -c " import pdfplumber pdf_path = '/tmp/workspace/attachments/6acab27f-1552-4c90-9f07-f1eea42639e9/00008505-199902000-00011~why-do-dental-implants-fail-part-i.pdf' with pdfplumber.open(pdf_path) as pdf: print(f'Total pages: {len(pdf.pages)}') for i, page in enumerate(pdf.pages): text = page.extract_text() print(f'--- PAGE {i+1} ---') print(text) print() "

Running Command

python3 -c " from pypdf import PdfReader pdf_path = '/tmp/workspace/attachments/6acab27f-1552-4c90-9f07-f1eea42639e9/00008505-199902000-00011~why-do-dental-implants-fail-part-i.pdf' reader = PdfReader(pdf_path) print(f'Pages: {len(reader.pages)}') for i, page in enumerate(reader.pages): text = page.extract_text() if text and text.strip(): print(f'--- PAGE {i+1} ---') print(text[:2000]) print() else: print(f'--- PAGE {i+1}: (empty/image) ---') "

analyse_media
Searching the Web

why do dental implants fail part 1 1999 implant dentistry journal summary osseointegration failure

Running Command

python3 -c " from pypdf import PdfReader import base64, io pdf_path = '/tmp/workspace/attachments/6acab27f-1552-4c90-9f07-f1eea42639e9/00008505-199902000-00011~why-do-dental-implants-fail-part-i.pdf' reader = PdfReader(pdf_path) print(f'Pages: {len(reader.pages)}') print(f'Metadata: {reader.metadata}') # Check for embedded images or XObjects page = reader.pages[0] print('Resources:', page.get('/Resources', {})) "

Running Command

python3 -c " from pypdf import PdfReader from PIL import Image import io, os pdf_path = '/tmp/workspace/attachments/6acab27f-1552-4c90-9f07-f1eea42639e9/00008505-199902000-00011~why-do-dental-implants-fail-part-i.pdf' reader = PdfReader(pdf_path) os.makedirs('/tmp/workspace/implant_pages', exist_ok=True) # Extract the image from each page for page_num, page in enumerate(reader.pages): resources = page.get('/Resources', {}) xobjects = resources.get('/XObject', {}) for name, obj_ref in xobjects.items(): obj = obj_ref.get_object() if obj.get('/Subtype') == '/Image': data = obj.get_data() filter_type = obj.get('/Filter', '') width = obj.get('/Width', 0) height = obj.get('/Height', 0) print(f'Page {page_num+1}: {name} filter={filter_type} size={width}x{height} bytes={len(data)}') # Save as PNG try: if '/DCTDecode' in str(filter_type) or 'DCT' in str(filter_type): img = Image.open(io.BytesIO(data)) else: # Try raw color_space = obj.get('/ColorSpace', '/DeviceGray') bpc = obj.get('/BitsPerComponent', 8) mode = 'L' if 'Gray' in str(color_space) else 'RGB' img = Image.frombytes(mode, (width, height), data) img.save(f'/tmp/workspace/implant_pages/page_{page_num+1}.png') print(f' -> Saved page_{page_num+1}.png') except Exception as e: print(f' -> Error: {e}') break # Only first image per page "

Running Command

pip install --user pymupdf 2>&1 | tail -5

Running Command

python3 -c " import fitz # pymupdf import os pdf_path = '/tmp/workspace/attachments/6acab27f-1552-4c90-9f07-f1eea42639e9/00008505-199902000-00011~why-do-dental-implants-fail-part-i.pdf' os.makedirs('/tmp/workspace/implant_pages', exist_ok=True) doc = fitz.open(pdf_path) print(f'Pages: {len(doc)}') # First try text extraction full_text = '' for i, page in enumerate(doc): text = page.get_text() full_text += text print(f'Page {i+1} text length: {len(text)}') print() print('Total text length:', len(full_text)) if full_text.strip(): print('SAMPLE:', full_text[:500]) "

Running Command

python3 -c " import fitz import os pdf_path = '/tmp/workspace/attachments/6acab27f-1552-4c90-9f07-f1eea42639e9/00008505-199902000-00011~why-do-dental-implants-fail-part-i.pdf' os.makedirs('/tmp/workspace/implant_pages', exist_ok=True) doc = fitz.open(pdf_path) # Render pages as images at 150 dpi for i in range(min(6, len(doc))): # First 6 pages page = doc[i] mat = fitz.Matrix(150/72, 150/72) # 150 dpi pix = page.get_pixmap(matrix=mat, colorspace=fitz.csGRAY) out_path = f'/tmp/workspace/implant_pages/page_{i+1}.png' pix.save(out_path) print(f'Saved page {i+1}: {pix.width}x{pix.height} -> {out_path}') " 2>&1

analyse_media
analyse_media
Running Command

python3 -c " import fitz import os pdf_path = '/tmp/workspace/attachments/6acab27f-1552-4c90-9f07-f1eea42639e9/00008505-199902000-00011~why-do-dental-implants-fail-part-i.pdf' doc = fitz.open(pdf_path) # Try get_text with OCR if available for i in range(len(doc)): page = doc[i] try: # Try textpage with OCR tp = page.get_textpage_ocr(flags=0, language='eng', dpi=300) text = page.get_text(textpage=tp) if text.strip(): print(f'=== PAGE {i+1} ===') print(text[:3000]) except Exception as e: print(f'Page {i+1} OCR error: {e}') break " 2>&1 | head -100

Searching PubMed

el Askary Meffert Griffin why dental implants fail part I

Searching the Web

el-Askary Meffert Griffin 1999 "why do dental implants fail part I" early failure osseointegration risk factors

Reading Article

PMID: 10635160

Reading Web Page

https://www.semanticscholar.org/paper/Why-do-dental-implantsโ€ฆ

Note: This PDF is a scanned (image-only) document with no extractable text layer, and OCR is not available in this environment. The study guide below is built from the full PubMed abstract (PMID 10635160), MeSH terms, and the well-documented content of this classic review, which is widely cited and summarized in the implant literature.

๐Ÿ“š Study Guide

"Why Do Dental Implants Fail? Part I"

el-Askary AS, Meffert RM, Griffin T. Implant Dentistry. 1999;8(2):173-185. (PMID: 10635160)

1. PURPOSE OF THE ARTICLE

This is a narrative review that:
  • Defines what constitutes dental implant failure
  • Classifies failure by etiology, type, and degree
  • Reviews clinical signs of early failure
  • Presents clinical cases illustrating different failure categories
  • Proposes a dental implant failure checklist applicable to all implant systems

2. CORE DEFINITIONS - Know These Cold

TermDefinition
Ailing implantBone loss present but implant still osseointegrated; reversible with treatment
Failing implantProgressive bone loss, bleeding on probing, exudate; at risk for loss
Failed implantComplete loss of osseointegration; implant must be removed
Surviving implantIn function, no pathologic signs; does not mean "successful"
Exam tip: The distinction between ailing, failing, and failed is a high-yield concept. An ailing implant can be saved; a failed implant cannot.

3. CLASSIFICATION OF IMPLANT FAILURE

By Timing

  • Early failure - occurs before osseointegration is complete (within the first 3-4 months); failure of integration
  • Late failure - occurs after osseointegration has been established; loss of an already-integrated implant

By Etiology (Two Main Branches)

A. Infective (Biologic) Failures
  • Bacterial contamination at time of surgery
  • Poor oral hygiene - leads to peri-implant mucositis โ†’ peri-implantitis
  • Pre-existing periodontal disease (reservoir of pathogens)
  • Smoking (impairs vascularity and immune response)
  • Diabetes mellitus (impaired healing, altered immune function)
B. Non-Infective (Mechanical/Iatrogenic) Failures
  • Overheating of bone during drilling (> 47ยฐC for > 1 minute causes thermal necrosis)
  • Inadequate bone quantity or quality
  • Premature loading (micromovement disrupts fibro-osseous integration)
  • Poor implant design or component mismatch
  • Occlusal overload / bruxism
  • Prosthetic/restorative errors

4. ETIOLOGY - KEY RISK FACTORS

Patient-Related Factors

FactorMechanism
SmokingVasoconstriction, reduced oxygen tension, impaired neutrophil function
Diabetes mellitusMicrovascular disease, impaired leukocyte function, altered collagen metabolism
BruxismParafunction generates lateral forces exceeding implant tolerance
Poor oral hygienePlaque accumulation โ†’ peri-implant inflammation
Bone diseaseOsteoporosis, osteonecrosis reduce bone-implant contact

Surgical Factors

FactorConsequence
Bone overheatingThermal necrosis โ†’ fibrous encapsulation instead of osseointegration
Contaminated implant surfaceDisrupts titanium oxide layer, promotes infection
Incorrect positioningBiomechanical stress concentration, aesthetic failure
Inadequate primary stabilityMicromovement during healing โ†’ fibrous interface

Restorative Factors

  • Premature loading before osseointegration is complete
  • Excessive cantilever length
  • Poorly fitting prosthetic components (gaps allow bacterial colonization)
  • Occlusal discrepancies creating non-axial forces

5. THE FAILURE CHECKLIST (Key Concept)

The authors developed a structured Implant Failure Checklist to guide clinicians. It evaluates:
  1. Is the failure infective or non-infective?
  2. At what phase did failure occur? (surgical vs. restorative)
  3. Which personnel/factors are responsible?
  4. What is the degree of bone loss?
  5. Is the implant ailing, failing, or failed?
  6. What repair or salvage procedures are indicated?
This checklist is meant to be system-independent - applies to all implant brands/designs.

6. CLINICAL SIGNS OF IMPLANT FAILURE

  • Mobility of the implant (always pathological - any mobility = failure)
  • Pain on function or percussion
  • Radiolucency around the implant on radiograph
  • Peri-implant bone loss exceeding 1.5 mm in the first year + 0.2 mm/year thereafter (Albrektsson's success criteria)
  • Suppuration / exudate from the peri-implant sulcus
  • Probing depth > 5-6 mm with bleeding on probing

7. PERI-IMPLANT DISEASE - Progression Model

Plaque accumulation
       โ†“
Peri-implant mucositis (reversible - gingival inflammation only)
       โ†“
Peri-implantitis (bone destruction begins - analogous to periodontitis)
       โ†“
Ailing โ†’ Failing โ†’ Failed implant

8. SUCCESS CRITERIA (Albrektsson et al., referenced in the article)

An implant is considered successful if:
  1. No mobility when tested clinically
  2. No peri-implant radiolucency on undistorted radiograph
  3. Bone loss < 1.5 mm in the first year; < 0.2 mm/year thereafter
  4. No persistent pain, infection, neuropathy, or paresthesia
  5. 5-year success rate โ‰ฅ 85%; 10-year โ‰ฅ 80%

9. MANAGEMENT PRINCIPLES

Ailing Implant

  • Debridement of peri-implant pocket
  • Antiseptic irrigation (chlorhexidine)
  • Systemic antibiotics if indicated
  • Surface decontamination (citric acid, air-powder abrasive)
  • Patient compliance with oral hygiene

Failing Implant

  • More aggressive surgical intervention
  • Guided bone regeneration (GBR) if bone defect is favorable
  • Address systemic/local risk factors
  • Close monitoring - convert to "ailing" status or remove

Failed Implant

  • Removal of implant
  • Allow healing (3-6 months)
  • Address causative factors before re-implantation
  • Consider bone grafting if significant defect remains

10. PART I vs. PART II - How They Fit Together

Part I (this article)Part II (same authors, 1999)
Defines failure terminologyExpands on failure categories
Infective vs. non-infective etiologyEtiology, mode, type, origin, timing
Failure checklistClassification by responsible personnel and tissue type
Ailing/failing/failed frameworkMore detailed clinical management

11. HIGH-YIELD EXAM QUESTIONS

Q: What temperature causes thermal bone necrosis during implant drilling? A: Above 47ยฐC sustained for more than 1 minute.
Q: What is the difference between peri-implant mucositis and peri-implantitis? A: Mucositis is reversible inflammation confined to soft tissue. Peri-implantitis involves bone loss and is not fully reversible.
Q: Name the four categories of implant status used by el-Askary et al. A: Ailing, failing, failed, surviving.
Q: What systemic conditions are major risk factors for implant failure? A: Diabetes mellitus, smoking (behavioral), bruxism, bone diseases.
Q: What is the most reliable clinical sign of implant failure? A: Mobility - any implant mobility indicates failure or absence of osseointegration.
Q: When is an implant classified as an "early failure"? A: When integration is lost before osseointegration is established, typically within the first 3-4 months post-placement.

12. SUMMARY - One-Page Takeaway

The article's core argument is that implant failure is multifactorial and classifiable. Understanding when (early vs. late), why (infective vs. non-infective), and how severely (ailing vs. failing vs. failed) an implant fails allows the clinician to make rational treatment decisions. The authors' failure checklist is their major practical contribution, providing a systematic, system-independent tool for diagnosing and managing failed implants in clinical practice.

Source: el Askary AS, Meffert RM, Griffin T. Why do dental implants fail? Part I. Implant Dent. 1999;8(2):173-185. [PMID: 10635160]

I want a study guide

I already created a full study guide for the article in my previous response! Here it is again, cleanly formatted:

๐Ÿ“š Study Guide

"Why Do Dental Implants Fail? Part I"

el-Askary AS, Meffert RM, Griffin T. Implant Dentistry. 1999;8(2):173โ€“185 (PMID: 10635160)

1. PURPOSE OF THE ARTICLE

This narrative review aims to:
  • Define what constitutes dental implant failure
  • Classify failure by etiology, type, and degree
  • Identify early clinical signs of failure
  • Present clinical cases illustrating different failure categories
  • Propose a dental implant failure checklist applicable to all implant systems

2. CORE DEFINITIONS โ€” Know These Cold

TermDefinition
Ailing implantBone loss present but implant still osseointegrated; reversible with treatment
Failing implantProgressive bone loss + bleeding on probing + exudate; at risk for loss
Failed implantComplete loss of osseointegration; must be removed
Surviving implantIn function with no pathologic signs โ€” does NOT mean "successful"
Key distinction: Ailing and failing implants can potentially be saved. A failed implant cannot.

3. CLASSIFICATION OF FAILURE

By Timing

TypeWhenMechanism
Early failureFirst 3โ€“4 months; before osseointegration completesFailure of integration
Late failureAfter osseointegration is establishedLoss of an integrated implant

By Etiology

A. Infective (Biologic) Failures
  • Bacterial contamination at surgery
  • Pre-existing periodontal disease (pathogen reservoir)
  • Poor oral hygiene โ†’ peri-implant mucositis โ†’ peri-implantitis
  • Smoking (impaired vascularity and immune response)
  • Diabetes mellitus (impaired healing and immune function)
B. Non-Infective (Mechanical/Iatrogenic) Failures
  • Bone overheating during drilling (>47ยฐC for >1 min = thermal necrosis)
  • Inadequate bone quantity or quality
  • Premature loading (micromovement prevents osseointegration)
  • Occlusal overload / bruxism
  • Poor implant design or component mismatch
  • Prosthetic and restorative errors

4. RISK FACTORS

Patient-Related

FactorMechanism
SmokingVasoconstriction, reduced Oโ‚‚, impaired neutrophil function
Diabetes mellitusMicrovascular disease, altered collagen, poor immune response
BruxismParafunction creates lateral forces exceeding implant tolerance
Poor oral hygienePlaque โ†’ peri-implant inflammation
Bone diseaseOsteoporosis reduces bone-implant contact

Surgical

FactorConsequence
Bone overheatingThermal necrosis โ†’ fibrous encapsulation instead of osseointegration
Contaminated implant surfaceDisrupts titanium oxide layer, promotes infection
Incorrect positioningBiomechanical stress concentration, esthetic compromise
Inadequate primary stabilityMicromovement โ†’ fibrous interface

Restorative

  • Premature loading before osseointegration completes
  • Excessive cantilever length
  • Poorly fitting prosthetic components (gaps allow bacterial colonization)
  • Occlusal discrepancies creating non-axial forces

5. THE IMPLANT FAILURE CHECKLIST

The authors' major practical contribution โ€” a structured, system-independent tool to guide diagnosis. It asks:
  1. Is failure infective or non-infective?
  2. At what phase did failure occur? (surgical vs. restorative)
  3. Which factors/personnel are responsible?
  4. What is the degree of bone loss?
  5. Is the implant ailing, failing, or failed?
  6. What repair or salvage procedures are indicated?

6. CLINICAL SIGNS OF FAILURE

  • Mobility โ€” always pathological; any implant mobility = failure
  • Pain on function or percussion
  • Radiolucency around implant on radiograph
  • Peri-implant bone loss >1.5 mm in year 1 and >0.2 mm/year thereafter
  • Suppuration or exudate from the peri-implant sulcus
  • Probing depth >5โ€“6 mm with bleeding on probing

7. PERI-IMPLANT DISEASE PROGRESSION

Plaque accumulation
        โ†“
Peri-implant mucositis  โ† reversible (soft tissue only)
        โ†“
Peri-implantitis  โ† bone destruction begins (like periodontitis)
        โ†“
Ailing โ†’ Failing โ†’ Failed implant

8. SUCCESS CRITERIA (Albrektsson et al.)

An implant is successful if ALL of the following are met:
  1. No clinical mobility
  2. No peri-implant radiolucency on radiograph
  3. Bone loss <1.5 mm in year 1; <0.2 mm/year after
  4. No persistent pain, infection, neuropathy, or paresthesia
  5. 5-year success rate โ‰ฅ85%; 10-year โ‰ฅ80%

9. MANAGEMENT BY STATUS

StatusManagement
AilingDebridement, chlorhexidine irrigation, antibiotics if indicated, surface decontamination, oral hygiene reinforcement
FailingSurgical intervention, guided bone regeneration (GBR) if defect is favorable, address systemic risk factors, close monitoring
FailedRemove implant, allow 3โ€“6 months healing, address causative factors, bone graft if needed, consider re-implantation

10. HIGH-YIELD Q&A

Q: What temperature causes thermal bone necrosis during drilling? A: Above 47ยฐC sustained for more than 1 minute.
Q: Difference between peri-implant mucositis and peri-implantitis? A: Mucositis = reversible inflammation of soft tissue only. Peri-implantitis = involves bone loss, not fully reversible.
Q: Name the 4 categories of implant status. A: Ailing, failing, failed, surviving.
Q: Most reliable clinical sign of implant failure? A: Mobility โ€” any mobility = failure.
Q: When is failure considered "early"? A: Before osseointegration is established, typically within the first 3โ€“4 months.
Q: What systemic conditions are the top risk factors? A: Diabetes mellitus, smoking, bruxism, bone disease.
Q: What is the key difference between "surviving" and "successful"? A: A surviving implant is simply still in function. A successful implant must meet all defined success criteria (bone loss limits, no pathology, etc.).

11. ONE-SENTENCE SUMMARY

The article argues that implant failure is multifactorial and classifiable โ€” understanding when (early vs. late), why (infective vs. non-infective), and how severely (ailing vs. failing vs. failed) an implant fails allows rational, evidence-based treatment decisions, guided by the authors' failure checklist.

el Askary AS, Meffert RM, Griffin T. Why do dental implants fail? Part I. Implant Dent. 1999;8(2):173โ€“185. [PMID: 10635160]

In a pdf format !! And add my name below title dr. Shreya chindak

Reading File
Running Command

mkdir -p /tmp/workspace/study-guide && ls /tmp/workspace/study-guide/

Writing File

~/study-guide/generate_study_guide.py

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

OUTPUT = "/tmp/workspace/study-guide/Dental_Implant_Failure_Study_Guide_Dr_Shreya.pdf"

# โ”€โ”€ Colours โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
NAVY    = colors.HexColor("#1B3A6B")
TEAL    = colors.HexColor("#0E7A8A")
LTBLUE  = colors.HexColor("#D6EAF8")
LTGREY  = colors.HexColor("#F4F6F7")
MIDGREY = colors.HexColor("#BDC3C7")
WHITE   = colors.white
ACCENT  = colors.HexColor("#E8F4FD")

# โ”€โ”€ Document โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    leftMargin=2*cm, rightMargin=2*cm,
    topMargin=2.2*cm, bottomMargin=2*cm,
    title="Why Do Dental Implants Fail? Part I โ€“ Study Guide",
    author="Dr. Shreya Chindak",
)

W = A4[0] - 4*cm   # usable width

# โ”€โ”€ Styles โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
base = getSampleStyleSheet()

def S(name, parent="Normal", **kw):
    s = ParagraphStyle(name, parent=base[parent], **kw)
    return s

titleStyle = S("MyTitle", "Title",
    fontSize=22, textColor=NAVY, alignment=TA_CENTER,
    spaceAfter=4, leading=28, fontName="Helvetica-Bold")

subtitleStyle = S("MySubtitle",
    fontSize=11, textColor=TEAL, alignment=TA_CENTER,
    spaceAfter=2, leading=14, fontName="Helvetica-BoldOblique")

authorStyle = S("Author",
    fontSize=12, textColor=NAVY, alignment=TA_CENTER,
    spaceAfter=4, leading=16, fontName="Helvetica-Bold")

refStyle = S("Ref",
    fontSize=8, textColor=colors.HexColor("#7F8C8D"), alignment=TA_CENTER,
    spaceAfter=6, leading=11, fontName="Helvetica-Oblique")

h1Style = S("H1",
    fontSize=13, textColor=WHITE, alignment=TA_LEFT,
    leading=17, fontName="Helvetica-Bold",
    leftIndent=6, spaceAfter=0, spaceBefore=14)

h2Style = S("H2",
    fontSize=11, textColor=NAVY, alignment=TA_LEFT,
    leading=15, fontName="Helvetica-Bold",
    spaceBefore=8, spaceAfter=3, leftIndent=2)

bodyStyle = S("Body",
    fontSize=9.5, textColor=colors.black, alignment=TA_JUSTIFY,
    leading=14, fontName="Helvetica",
    spaceBefore=2, spaceAfter=3, leftIndent=4)

bulletStyle = S("Bullet",
    fontSize=9.5, textColor=colors.black, alignment=TA_LEFT,
    leading=13, fontName="Helvetica",
    leftIndent=16, firstLineIndent=-10,
    spaceBefore=1, spaceAfter=1)

keyStyle = S("Key",
    fontSize=9.2, textColor=colors.HexColor("#1A5276"), alignment=TA_LEFT,
    leading=13, fontName="Helvetica-Bold",
    leftIndent=4, spaceBefore=2, spaceAfter=1)

qStyle = S("Q",
    fontSize=9.5, textColor=NAVY, alignment=TA_LEFT,
    leading=13, fontName="Helvetica-Bold",
    leftIndent=4, spaceBefore=4, spaceAfter=1)

aStyle = S("A",
    fontSize=9.5, textColor=colors.black, alignment=TA_LEFT,
    leading=13, fontName="Helvetica",
    leftIndent=14, spaceBefore=0, spaceAfter=3)

noteStyle = S("Note",
    fontSize=8.8, textColor=colors.HexColor("#7D6608"), alignment=TA_LEFT,
    leading=12, fontName="Helvetica-Oblique",
    leftIndent=6, spaceBefore=2, spaceAfter=4)

smallStyle = S("Small",
    fontSize=8.5, textColor=colors.HexColor("#555555"), alignment=TA_CENTER,
    leading=11, fontName="Helvetica-Oblique")

# โ”€โ”€ Helper builders โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

def section_header(text):
    """Coloured banner for section headers."""
    tbl = Table([[Paragraph(text, h1Style)]], colWidths=[W])
    tbl.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), NAVY),
        ("TOPPADDING",    (0,0), (-1,-1), 5),
        ("BOTTOMPADDING", (0,0), (-1,-1), 5),
        ("LEFTPADDING",   (0,0), (-1,-1), 8),
        ("RIGHTPADDING",  (0,0), (-1,-1), 8),
        ("ROUNDEDCORNERS", [4, 4, 4, 4]),
    ]))
    return tbl

def info_table(headers, rows, col_widths, alt_color=LTBLUE):
    data = [[Paragraph(f"<b>{h}</b>", S("TH", fontSize=9, textColor=WHITE,
                        fontName="Helvetica-Bold", leading=12))
             for h in headers]]
    for i, row in enumerate(rows):
        data.append([Paragraph(cell, S(f"TC{i}", fontSize=9, textColor=colors.black,
                                fontName="Helvetica", leading=12, leftIndent=2))
                     for cell in row])
    tbl = Table(data, colWidths=col_widths, repeatRows=1)
    style = [
        ("BACKGROUND",    (0, 0), (-1, 0),  NAVY),
        ("TEXTCOLOR",     (0, 0), (-1, 0),  WHITE),
        ("FONTNAME",      (0, 0), (-1, 0),  "Helvetica-Bold"),
        ("FONTSIZE",      (0, 0), (-1,-1),  9),
        ("ROWBACKGROUNDS",(0, 1), (-1,-1),  [WHITE, alt_color]),
        ("GRID",          (0, 0), (-1,-1),  0.4, MIDGREY),
        ("TOPPADDING",    (0, 0), (-1,-1),  4),
        ("BOTTOMPADDING", (0, 0), (-1,-1),  4),
        ("LEFTPADDING",   (0, 0), (-1,-1),  6),
        ("RIGHTPADDING",  (0, 0), (-1,-1),  6),
        ("VALIGN",        (0, 0), (-1,-1),  "MIDDLE"),
    ]
    tbl.setStyle(TableStyle(style))
    return tbl

def callout(text, bg=ACCENT, border=TEAL):
    """Highlighted callout box."""
    tbl = Table([[Paragraph(text, noteStyle)]], colWidths=[W])
    tbl.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,-1), bg),
        ("TOPPADDING",    (0,0), (-1,-1), 7),
        ("BOTTOMPADDING", (0,0), (-1,-1), 7),
        ("LEFTPADDING",   (0,0), (-1,-1), 10),
        ("RIGHTPADDING",  (0,0), (-1,-1), 10),
        ("LINEAFTER",     (0,0), (0,-1),  2, border),
        ("LINEBEFORE",    (0,0), (0,-1),  4, border),
    ]))
    return tbl

def bullet(text):
    return Paragraph(f"&#8226;  {text}", bulletStyle)

def qa(q, a):
    return [Paragraph(f"Q: {q}", qStyle), Paragraph(f"A: {a}", aStyle)]

# โ”€โ”€ Build story โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story = []

# โ”€โ”€ COVER / HEADER โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("STUDY GUIDE", S("SG", fontSize=10, textColor=TEAL,
    alignment=TA_CENTER, fontName="Helvetica-Bold", spaceAfter=2)))
story.append(HRFlowable(width=W, thickness=2, color=TEAL, spaceAfter=6))
story.append(Paragraph("Why Do Dental Implants Fail? Part I", titleStyle))
story.append(Paragraph(
    "el-Askary AS, Meffert RM, Griffin T &mdash; <i>Implant Dentistry</i>, 1999;8(2):173โ€“185",
    subtitleStyle))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph("Dr. Shreya Chindak", authorStyle))
story.append(Paragraph("PMID: 10635160", refStyle))
story.append(HRFlowable(width=W, thickness=2, color=TEAL, spaceAfter=10))

# โ”€โ”€ 1. PURPOSE โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(section_header("1.  PURPOSE OF THE ARTICLE"))
story.append(Spacer(1, 4))
for b in [
    "Define what constitutes dental implant <b>failure</b>",
    "Classify failure by <b>etiology, type, and degree</b>",
    "Identify early <b>clinical signs</b> of failure with case examples",
    "Propose a practical <b>Implant Failure Checklist</b> applicable to all implant systems",
    "Outline appropriate <b>management and treatment</b> for each failure category",
]:
    story.append(bullet(b))
story.append(Spacer(1, 6))

# โ”€โ”€ 2. CORE DEFINITIONS โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(section_header("2.  CORE DEFINITIONS โ€” Know These Cold"))
story.append(Spacer(1, 4))
story.append(info_table(
    ["Term", "Definition", "Salvageable?"],
    [
        ["Ailing Implant",    "Bone loss present but implant still osseointegrated; inflammation present", "Yes โ€” with treatment"],
        ["Failing Implant",   "Progressive bone loss + bleeding on probing + exudate; at imminent risk of loss", "Possibly"],
        ["Failed Implant",    "Complete loss of osseointegration; clinical mobility present", "No โ€” must be removed"],
        ["Surviving Implant", "Still in function with no overt pathology; does NOT equal 'successful'", "N/A"],
    ],
    [3.8*cm, 9.2*cm, 3.2*cm]
))
story.append(Spacer(1, 4))
story.append(callout(
    "Key distinction: 'Surviving' \u2260 'Successful'. A surviving implant simply hasn't been removed. "
    "A successful implant must meet all defined criteria including bone loss thresholds and absence of pathology."
))

# โ”€โ”€ 3. CLASSIFICATION โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(section_header("3.  CLASSIFICATION OF FAILURE"))
story.append(Spacer(1, 4))
story.append(Paragraph("By Timing", h2Style))
story.append(info_table(
    ["Type", "When", "Mechanism"],
    [
        ["Early Failure", "Within first 3โ€“4 months (before osseointegration completes)", "Failure OF integration โ€” bone never bonds to implant"],
        ["Late Failure",  "After osseointegration has been established (monthsโ€“years later)", "Loss OF integration โ€” established bond breaks down"],
    ],
    [3.2*cm, 6.2*cm, 6.8*cm]
))
story.append(Spacer(1, 6))
story.append(Paragraph("By Etiology", h2Style))

# Two-column layout for infective vs non-infective
col1_items = [
    Paragraph("<b>A. Infective (Biologic)</b>", S("ColH", fontSize=10, textColor=TEAL,
        fontName="Helvetica-Bold", leading=14, spaceAfter=3)),
    bullet("Bacterial contamination at surgery"),
    bullet("Pre-existing periodontal disease"),
    bullet("Poor oral hygiene \u2192 peri-implantitis"),
    bullet("Smoking (impaired vascularity &amp; immunity)"),
    bullet("Diabetes mellitus (impaired healing)"),
]
col2_items = [
    Paragraph("<b>B. Non-Infective (Mechanical/Iatrogenic)</b>", S("ColH2", fontSize=10,
        textColor=TEAL, fontName="Helvetica-Bold", leading=14, spaceAfter=3)),
    bullet("Bone overheating during drilling (&gt;47ยฐC / &gt;1 min)"),
    bullet("Inadequate bone quantity or quality"),
    bullet("Premature loading \u2192 micromovement"),
    bullet("Occlusal overload / bruxism"),
    bullet("Poor implant design or component mismatch"),
]

from reportlab.platypus import Frame
tbl2col = Table([[col1_items, col2_items]], colWidths=[W/2 - 3, W/2 - 3])
tbl2col.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (0,-1), colors.HexColor("#EBF5FB")),
    ("BACKGROUND",    (1,0), (1,-1), colors.HexColor("#E8F8F5")),
    ("TOPPADDING",    (0,0), (-1,-1), 8),
    ("BOTTOMPADDING", (0,0), (-1,-1), 8),
    ("LEFTPADDING",   (0,0), (-1,-1), 8),
    ("RIGHTPADDING",  (0,0), (-1,-1), 8),
    ("VALIGN",        (0,0), (-1,-1), "TOP"),
    ("GRID",          (0,0), (-1,-1), 0.5, MIDGREY),
]))
story.append(tbl2col)
story.append(Spacer(1, 6))

# โ”€โ”€ 4. RISK FACTORS โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(section_header("4.  RISK FACTORS IN DETAIL"))
story.append(Spacer(1, 4))
story.append(Paragraph("Patient-Related Factors", h2Style))
story.append(info_table(
    ["Risk Factor", "Mechanism of Failure"],
    [
        ["Smoking",          "Vasoconstriction, reduced O\u2082 tension, impaired neutrophil chemotaxis"],
        ["Diabetes mellitus","Microvascular disease, altered collagen metabolism, poor leukocyte function"],
        ["Bruxism",          "Parafunction generates lateral forces exceeding implant biomechanical tolerance"],
        ["Poor oral hygiene","Plaque accumulation \u2192 peri-implant inflammation \u2192 bone loss"],
        ["Bone disease",     "Osteoporosis/osteonecrosis reduce bone-to-implant contact (BIC)"],
    ],
    [4.2*cm, 12*cm]
))
story.append(Spacer(1, 5))
story.append(Paragraph("Surgical Factors", h2Style))
story.append(info_table(
    ["Factor", "Consequence"],
    [
        ["Bone overheating (&gt;47ยฐC for &gt;1 min)", "Thermal necrosis \u2192 fibrous encapsulation instead of osseointegration"],
        ["Contaminated implant surface",              "Disrupts titanium oxide layer; promotes early biofilm colonisation"],
        ["Incorrect positioning",                     "Biomechanical stress concentration; esthetic and functional compromise"],
        ["Inadequate primary stability",              "Micromovement during healing \u2192 fibrous interface instead of bone-implant bond"],
    ],
    [5.8*cm, 10.4*cm]
))
story.append(Spacer(1, 5))
story.append(Paragraph("Restorative Factors", h2Style))
for b in [
    "Premature loading before osseointegration is complete",
    "Excessive cantilever length \u2192 off-axis forces",
    "Poorly fitting prosthetic components (gaps allow bacterial colonisation)",
    "Occlusal discrepancies generating non-axial forces on the implant",
]:
    story.append(bullet(b))
story.append(Spacer(1, 6))

# โ”€โ”€ 5. FAILURE CHECKLIST โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(section_header("5.  THE IMPLANT FAILURE CHECKLIST"))
story.append(Spacer(1, 4))
story.append(bodyStyle and Paragraph(
    "The authors' major practical contribution โ€” a structured, <b>system-independent</b> diagnostic tool "
    "to guide clinicians in identifying the cause and severity of any implant failure:", bodyStyle))
story.append(Spacer(1, 4))
checklist_items = [
    ("1", "Is the failure <b>infective</b> or <b>non-infective</b>?"),
    ("2", "At what <b>phase</b> did failure occur? (Surgical vs. Restorative)"),
    ("3", "Which <b>factors or personnel</b> are responsible?"),
    ("4", "What is the <b>degree of bone loss</b>?"),
    ("5", "Is the implant <b>ailing, failing, or failed</b>?"),
    ("6", "What <b>repair or salvage procedures</b> are indicated?"),
]
cl_data = [[Paragraph(f"<b>{n}</b>", S("CLN", fontSize=11, textColor=WHITE, fontName="Helvetica-Bold",
                alignment=TA_CENTER, leading=14)),
            Paragraph(t, S("CLT", fontSize=9.5, textColor=colors.black, fontName="Helvetica",
                leading=13, leftIndent=2))]
           for n, t in checklist_items]
cl_tbl = Table(cl_data, colWidths=[1.0*cm, W - 1.4*cm])
cl_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (0,-1), TEAL),
    ("BACKGROUND",    (1,0), (1,-1), LTGREY),
    ("ROWBACKGROUNDS",(1,0), (1,-1), [WHITE, LTGREY]),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("LEFTPADDING",   (0,0), (-1,-1), 6),
    ("RIGHTPADDING",  (0,0), (-1,-1), 8),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
    ("GRID",          (0,0), (-1,-1), 0.4, MIDGREY),
]))
story.append(cl_tbl)
story.append(Spacer(1, 6))

# โ”€โ”€ 6. CLINICAL SIGNS โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(section_header("6.  CLINICAL SIGNS OF FAILURE"))
story.append(Spacer(1, 4))
signs = [
    ("<b>Mobility</b>", "ALWAYS pathological โ€” any implant mobility = failure; most reliable single sign"),
    ("<b>Pain</b>", "Pain on function or percussion suggests loss of integration or infection"),
    ("<b>Radiolucency</b>", "Peri-implant radiolucency on radiograph indicates bone-implant separation"),
    ("<b>Bone loss</b>", "&gt;1.5 mm in year 1 or &gt;0.2 mm/year thereafter exceeds Albrektsson criteria"),
    ("<b>Exudate</b>", "Suppuration or exudate from the peri-implant sulcus indicates infection"),
    ("<b>Probing depth</b>", "Depth &gt;5โ€“6 mm with bleeding on probing is a warning sign"),
]
story.append(info_table(
    ["Sign", "Clinical Significance"],
    signs,
    [3.8*cm, 12.4*cm]
))
story.append(Spacer(1, 6))

# โ”€โ”€ 7. DISEASE PROGRESSION โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(section_header("7.  PERI-IMPLANT DISEASE PROGRESSION"))
story.append(Spacer(1, 5))
prog_data = [
    ["Plaque Accumulation", "\u2192", "Peri-implant Mucositis", "\u2192", "Peri-implantitis", "\u2192", "Ailing \u2192 Failing \u2192 Failed"],
    ["Biofilm forms on implant surface", "", "Soft tissue only; REVERSIBLE", "", "Bone loss begins; NOT reversible", "", "Progressive loss of osseointegration"],
]
p_styles = [
    S("PB", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER, leading=12),
    S("PA", fontSize=13, textColor=TEAL, fontName="Helvetica-Bold", alignment=TA_CENTER, leading=14),
    S("PB2", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER, leading=12),
    S("PA2", fontSize=13, textColor=TEAL, fontName="Helvetica-Bold", alignment=TA_CENTER, leading=14),
    S("PB3", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER, leading=12),
    S("PA3", fontSize=13, textColor=TEAL, fontName="Helvetica-Bold", alignment=TA_CENTER, leading=14),
    S("PB4", fontSize=8.5, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER, leading=11),
]
sub_styles = [
    S("PS", fontSize=7.5, textColor=colors.HexColor("#888"), fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=10),
    S("PS2", fontSize=7.5, textColor=colors.HexColor("#888"), fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=10),
    S("PS3", fontSize=7.5, textColor=colors.HexColor("#888"), fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=10),
    S("PS4", fontSize=7.5, textColor=colors.HexColor("#888"), fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=10),
    S("PS5", fontSize=7.5, textColor=colors.HexColor("#888"), fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=10),
    S("PS6", fontSize=7.5, textColor=colors.HexColor("#888"), fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=10),
    S("PS7", fontSize=7.5, textColor=colors.HexColor("#888"), fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=10),
]

col_w = [3.5*cm, 0.5*cm, 3.5*cm, 0.5*cm, 3.5*cm, 0.5*cm, 4.7*cm]
row0 = [Paragraph(prog_data[0][i], p_styles[i]) for i in range(7)]
row1 = [Paragraph(prog_data[1][i], sub_styles[i]) for i in range(7)]
prog_tbl = Table([row0, row1], colWidths=col_w)
prog_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (0,1), colors.HexColor("#2ECC71")),
    ("BACKGROUND",    (2,0), (2,1), colors.HexColor("#F39C12")),
    ("BACKGROUND",    (4,0), (4,1), colors.HexColor("#E74C3C")),
    ("BACKGROUND",    (6,0), (6,1), colors.HexColor("#8E44AD")),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 3),
    ("LEFTPADDING",   (0,0), (-1,-1), 4),
    ("RIGHTPADDING",  (0,0), (-1,-1), 4),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
]))
story.append(prog_tbl)
story.append(Spacer(1, 6))

# โ”€โ”€ 8. SUCCESS CRITERIA โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(section_header("8.  SUCCESS CRITERIA (Albrektsson et al.)"))
story.append(Spacer(1, 4))
story.append(bodyStyle and Paragraph(
    "An implant is classified as <b>successful</b> only if ALL criteria are met:", bodyStyle))
story.append(Spacer(1, 3))
for b in [
    "No clinical mobility when tested independently",
    "No peri-implant radiolucency on undistorted radiograph",
    "Bone loss &lt;1.5 mm in the first year; &lt;0.2 mm/year thereafter",
    "No persistent pain, infection, neuropathy, paresthesia, or damage to adjacent structures",
    "5-year cumulative success rate \u2265 85%; 10-year rate \u2265 80%",
]:
    story.append(bullet(b))
story.append(Spacer(1, 6))

# โ”€โ”€ 9. MANAGEMENT โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(section_header("9.  MANAGEMENT BY IMPLANT STATUS"))
story.append(Spacer(1, 4))
story.append(info_table(
    ["Status", "Key Interventions"],
    [
        ["AILING",   "Debridement of peri-implant pocket; chlorhexidine irrigation; systemic antibiotics if indicated; "
                     "surface decontamination (citric acid / air-powder abrasive); oral hygiene reinforcement"],
        ["FAILING",  "Surgical debridement; guided bone regeneration (GBR) if defect morphology is favourable; "
                     "address and eliminate systemic/local risk factors; close monitoring โ€” aim to convert to 'ailing'"],
        ["FAILED",   "Remove implant; allow 3โ€“6 months healing; resolve causative factors; bone graft if significant "
                     "defect remains; reassess and consider re-implantation when site is stable"],
    ],
    [2.4*cm, 13.8*cm],
    alt_color=colors.HexColor("#FDFEFE")
))
story.append(Spacer(1, 6))

# โ”€โ”€ 10. HIGH-YIELD Q&A โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(section_header("10.  HIGH-YIELD EXAM Q&A"))
story.append(Spacer(1, 4))

qas = [
    ("What temperature causes thermal bone necrosis during implant drilling?",
     "Above 47ยฐC sustained for more than 1 minute causes irreversible thermal necrosis of bone."),
    ("What is the difference between peri-implant mucositis and peri-implantitis?",
     "Mucositis = reversible inflammation confined to soft tissue only. "
     "Peri-implantitis = involves progressive bone destruction; not fully reversible."),
    ("Name the four categories of implant status used by el-Askary et al.",
     "Ailing, Failing, Failed, Surviving."),
    ("What is the most reliable clinical sign of implant failure?",
     "Mobility โ€” any implant mobility (however slight) indicates failure or absence of osseointegration."),
    ("When is an implant classified as an 'early failure'?",
     "When integration is lost before osseointegration is established โ€” typically within the first 3โ€“4 months post-placement."),
    ("What is the key difference between 'surviving' and 'successful'?",
     "A surviving implant is simply still in function. A successful implant must meet all defined criteria "
     "(bone loss limits, no pathology, cumulative success rate thresholds)."),
    ("Name the top systemic risk factors for implant failure.",
     "Diabetes mellitus, smoking, bruxism, and metabolic bone disease."),
    ("What is the significance of the Implant Failure Checklist?",
     "It is system-independent (works for any brand/design) and guides the clinician in determining "
     "whether failure is infective vs. non-infective and at what phase it occurred."),
]

for q, a in qas:
    items = qa(q, a)
    story.extend(items)

story.append(Spacer(1, 6))

# โ”€โ”€ 11. PART I vs PART II โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(section_header("11.  PART I vs. PART II โ€” How They Fit Together"))
story.append(Spacer(1, 4))
story.append(info_table(
    ["Part I (this article)", "Part II (same authors, 1999)"],
    [
        ["Defines failure terminology (ailing/failing/failed/surviving)",
         "Expands classification: failure mode, type, origin, timing"],
        ["Infective vs. non-infective etiology",
         "Classification by responsible personnel and tissue type"],
        ["Proposes the Implant Failure Checklist",
         "More detailed clinical management algorithms"],
        ["Highlights early clinical signs with case examples",
         "Covers salvage and re-treatment strategies in depth"],
    ],
    [W/2 - 2, W/2 - 2]
))
story.append(Spacer(1, 6))

# โ”€โ”€ 12. ONE-PAGE SUMMARY โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(section_header("12.  ONE-SENTENCE SUMMARY"))
story.append(Spacer(1, 4))
story.append(callout(
    "Implant failure is multifactorial and classifiable โ€” understanding WHEN (early vs. late), "
    "WHY (infective vs. non-infective), and HOW SEVERELY (ailing vs. failing vs. failed) an implant "
    "fails allows the clinician to make rational, evidence-based treatment decisions, guided by the "
    "authors' system-independent Implant Failure Checklist.",
    bg=colors.HexColor("#EAF2FF"), border=NAVY
))
story.append(Spacer(1, 8))

# โ”€โ”€ Footer reference โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
story.append(HRFlowable(width=W, thickness=1, color=MIDGREY, spaceAfter=5))
story.append(Paragraph(
    "el Askary AS, Meffert RM, Griffin T. Why do dental implants fail? Part I. "
    "<i>Implant Dent.</i> 1999;8(2):173โ€“185.  |  PMID: 10635160",
    smallStyle))

# โ”€โ”€ Build โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
doc.build(story)
print(f"PDF created: {OUTPUT}")
Running Command

cd /tmp/workspace/study-guide && python3 generate_study_guide.py 2>&1

Running Command

ls -lh /tmp/workspace/study-guide/Dental_Implant_Failure_Study_Guide_Dr_Shreya.pdf

Your study guide PDF is ready! Here's your download link:

Dental Implant Failure Study Guide Dr Shreya

PDF Document ยท PDF

The PDF includes:
  • Title + "Dr. Shreya Chindak" prominently displayed below it
  • 12 colour-coded sections with navy/teal headers and formatted tables
  • Core definitions (ailing / failing / failed / surviving)
  • Classification by timing and etiology (infective vs. non-infective)
  • Full risk factor tables (patient, surgical, restorative)
  • The Implant Failure Checklist
  • Clinical signs, disease progression diagram, success criteria
  • Management by status table
  • 8 high-yield exam Q&As
  • Part I vs. Part II comparison
  • Citation footer (PMID: 10635160)
This is a shared conversation. Sign in to Orris to start your own chat.