Create a highly engaging, evidence-based PDF guide for Indian Instagram audience titled: “Heart Attack Symptoms Young Indians Ignore” Target audience: Age 18–45 Indians, gym goers, office workers, stressed professionals, medical students. Tone: Simple, authoritative, emotional, highly shareable, non-technical. Include: 1. Early warning signs before heart attack 2. Difference between acidity and heart attack 3. Silent heart attack symptoms 4. Why young Indians are getting heart attacks 5. Risk factors unique to Indians 6. Emergency red flag symptoms 7. Lifestyle prevention checklist 8. Myths Indians believe 9. What to do during suspected heart attack 10. Quick summary page Formatting: - Modern visual design - Bold headings - Infographic style - Short paragraphs - Highlight key symptoms in colored boxes - Use emotionally impactful statements - Add disclaimer: educational only Goal: Make readers feel they learned life-saving information worth sharing with family.

Reading File
Reading File
Searching the Web

heart attack young Indians statistics risk factors 2024 2025

Searching PubMed

myocardial infarction young adults India risk factors

Finding Sources
Finding Sources
Finding Sources
Reading Web Page

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

Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Finding Sources
Running Command

mkdir -p /home/daytona/workspace/heart-attack-guide && ls /home/daytona/workspac…

Writing File

~/heart-attack-guide/generate_guide.py

#!/usr/bin/env python3
"""
Heart Attack Symptoms Young Indians Ignore
Highly designed PDF guide for Instagram audience aged 18-45
"""

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm, inch
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, KeepTogether, PageBreak
)
from reportlab.lib.styles import ParagraphStyle, getSampleStyleSheet
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT, TA_JUSTIFY
from reportlab.platypus.flowables import Flowable
from reportlab.pdfgen import canvas as pdfcanvas
from reportlab.lib.colors import HexColor
import textwrap

# ── Colour palette ──────────────────────────────────────────────────────────
RED      = HexColor("#D62839")
DARK_RED = HexColor("#9B1928")
ORANGE   = HexColor("#F4802B")
YELLOW   = HexColor("#F7C948")
GREEN    = HexColor("#1E8A44")
TEAL     = HexColor("#007C91")
DARK     = HexColor("#1A1A2E")
MID      = HexColor("#2D2D44")
LIGHT_BG = HexColor("#FFF8F0")
CARD_BG  = HexColor("#F9F2FF")
WARN_BG  = HexColor("#FFF0F0")
INFO_BG  = HexColor("#EBF7FF")
GREEN_BG = HexColor("#EDFBF1")
GRAY     = HexColor("#666680")
WHITE    = colors.white

W, H = A4   # 595.27 x 841.89 pts

# ── Reusable rounded-rect flowable ──────────────────────────────────────────
class ColorBox(Flowable):
    def __init__(self, width, height, bg, radius=8, border=None, border_width=1.5):
        super().__init__()
        self.width  = width
        self.height = height
        self.bg     = bg
        self.radius = radius
        self.border = border
        self.bw     = border_width

    def draw(self):
        c = self.canv
        c.setFillColor(self.bg)
        if self.border:
            c.setStrokeColor(self.border)
            c.setLineWidth(self.bw)
        else:
            c.setStrokeColor(self.bg)
            c.setLineWidth(0)
        c.roundRect(0, 0, self.width, self.height, self.radius, fill=1, stroke=1 if self.border else 0)


class CircleBullet(Flowable):
    """A filled circle for bullet points."""
    def __init__(self, color=RED, size=6):
        super().__init__()
        self.color = color
        self.size  = size
        self.width = size + 4
        self.height = size

    def draw(self):
        c = self.canv
        c.setFillColor(self.color)
        c.circle(self.size / 2, self.size / 2, self.size / 2, fill=1, stroke=0)


# ── Page template with gradient header bar ─────────────────────────────────
def first_page(canvas, doc):
    canvas.saveState()
    # deep red header band
    canvas.setFillColor(DARK_RED)
    canvas.rect(0, H - 18*mm, W, 18*mm, fill=1, stroke=0)
    # red accent bar at bottom
    canvas.setFillColor(RED)
    canvas.rect(0, 0, W, 6*mm, fill=1, stroke=0)
    canvas.restoreState()


def later_pages(canvas, doc):
    canvas.saveState()
    # thin header
    canvas.setFillColor(DARK_RED)
    canvas.rect(0, H - 12*mm, W, 12*mm, fill=1, stroke=0)
    # page number
    canvas.setFillColor(GRAY)
    canvas.setFont("Helvetica", 8)
    canvas.drawCentredString(W / 2, 8*mm, f"Heart Attack Guide  •  Page {doc.page}")
    # red accent
    canvas.setFillColor(RED)
    canvas.rect(0, 0, W, 4*mm, fill=1, stroke=0)
    canvas.restoreState()


# ── Style factory ────────────────────────────────────────────────────────────
def S(name, **kw):
    base = getSampleStyleSheet()["Normal"]
    return ParagraphStyle(name, parent=base, **kw)


# Pre-define all paragraph styles
COVER_TITLE  = S("CoverTitle",  fontName="Helvetica-Bold",  fontSize=34, textColor=WHITE,
                  alignment=TA_CENTER, leading=42, spaceAfter=6)
COVER_SUB    = S("CoverSub",    fontName="Helvetica",       fontSize=16, textColor=YELLOW,
                  alignment=TA_CENTER, leading=22, spaceAfter=14)
COVER_BODY   = S("CoverBody",   fontName="Helvetica",       fontSize=11, textColor=WHITE,
                  alignment=TA_CENTER, leading=16)

SECTION_NUM  = S("SectionNum",  fontName="Helvetica-Bold",  fontSize=11, textColor=RED,
                  alignment=TA_LEFT, spaceAfter=2)
SECTION_HEAD = S("SectionHead", fontName="Helvetica-Bold",  fontSize=20, textColor=DARK,
                  alignment=TA_LEFT, spaceAfter=8, spaceBefore=10)
SECTION_INTRO= S("SectionIntro",fontName="Helvetica-Oblique",fontSize=12,textColor=MID,
                  alignment=TA_LEFT, leading=18, spaceAfter=10)
BODY         = S("Body",        fontName="Helvetica",        fontSize=11, textColor=DARK,
                  alignment=TA_JUSTIFY, leading=17, spaceAfter=8)
BULLET       = S("Bullet",      fontName="Helvetica",        fontSize=11, textColor=DARK,
                  alignment=TA_LEFT, leading=17, spaceAfter=4, leftIndent=16, bulletIndent=0)
BOLD_BULLET  = S("BoldBullet",  fontName="Helvetica-Bold",   fontSize=11, textColor=DARK,
                  alignment=TA_LEFT, leading=17, spaceAfter=4, leftIndent=16)
BOX_HEAD     = S("BoxHead",     fontName="Helvetica-Bold",   fontSize=13, textColor=WHITE,
                  alignment=TA_CENTER, leading=17, spaceAfter=4)
BOX_TEXT     = S("BoxText",     fontName="Helvetica",        fontSize=10.5,textColor=DARK,
                  alignment=TA_LEFT, leading=15, spaceAfter=3)
BOX_TEXT_W   = S("BoxTextW",    fontName="Helvetica",        fontSize=10.5,textColor=WHITE,
                  alignment=TA_LEFT, leading=15, spaceAfter=3)
STAT_BIG     = S("StatBig",     fontName="Helvetica-Bold",   fontSize=36, textColor=RED,
                  alignment=TA_CENTER, leading=42)
STAT_LABEL   = S("StatLabel",   fontName="Helvetica",        fontSize=10, textColor=MID,
                  alignment=TA_CENTER, leading=14)
MYTH_Q       = S("MythQ",       fontName="Helvetica-Bold",   fontSize=12, textColor=DARK_RED,
                  alignment=TA_LEFT, leading=16, spaceAfter=2)
MYTH_A       = S("MythA",       fontName="Helvetica",        fontSize=11, textColor=DARK,
                  alignment=TA_LEFT, leading=16, spaceAfter=10)
CALLOUT      = S("Callout",     fontName="Helvetica-BoldOblique", fontSize=13, textColor=DARK_RED,
                  alignment=TA_CENTER, leading=18, spaceAfter=6)
DISCLAIMER   = S("Disclaimer",  fontName="Helvetica-Oblique",fontSize=8.5,textColor=GRAY,
                  alignment=TA_CENTER, leading=12)
FOOTER_SHARE = S("FooterShare", fontName="Helvetica-Bold",   fontSize=12, textColor=WHITE,
                  alignment=TA_CENTER, leading=16)
TOC_ITEM     = S("TocItem",     fontName="Helvetica",        fontSize=11.5,textColor=DARK,
                  alignment=TA_LEFT, leading=20, leftIndent=10)
SUMMARY_HEAD = S("SummaryHead", fontName="Helvetica-Bold",   fontSize=13, textColor=WHITE,
                  alignment=TA_LEFT, leading=17)
SUMMARY_PT   = S("SummaryPt",   fontName="Helvetica",        fontSize=11, textColor=WHITE,
                  alignment=TA_LEFT, leading=16, spaceAfter=3)
CHECKLIST    = S("Checklist",   fontName="Helvetica",        fontSize=11, textColor=DARK,
                  alignment=TA_LEFT, leading=18, spaceAfter=3, leftIndent=16)
GREEN_BOX_T  = S("GreenBoxT",   fontName="Helvetica",        fontSize=10.5,textColor=HexColor("#0A3D1F"),
                  alignment=TA_LEFT, leading=15, spaceAfter=3)
ORANGE_BOX_T = S("OrangeBoxT",  fontName="Helvetica",        fontSize=10.5,textColor=HexColor("#5C2500"),
                  alignment=TA_LEFT, leading=15, spaceAfter=3)

# ── Helper: coloured symptom pill table ─────────────────────────────────────
def symptom_pills(items, bg=WARN_BG, border=RED, text_color=DARK):
    rows = []
    row  = []
    for i, item in enumerate(items):
        cell_style = ParagraphStyle("pill", fontName="Helvetica-Bold", fontSize=10.5,
                                    textColor=text_color, alignment=TA_CENTER, leading=14)
        row.append(Paragraph(item, cell_style))
        if (i + 1) % 3 == 0:
            rows.append(row)
            row = []
    if row:
        while len(row) < 3:
            row.append(Paragraph("", cell_style))
        rows.append(row)

    col_w = (W - 2 * 18*mm) / 3
    t = Table(rows, colWidths=[col_w]*3, rowHeights=None)
    t.setStyle(TableStyle([
        ("BACKGROUND",  (0,0), (-1,-1), bg),
        ("GRID",        (0,0), (-1,-1), 1.2, border),
        ("ROWBACKGROUNDS",(0,0),(-1,-1),[bg]),
        ("ALIGN",       (0,0), (-1,-1), "CENTER"),
        ("VALIGN",      (0,0), (-1,-1), "MIDDLE"),
        ("TOPPADDING",  (0,0), (-1,-1), 7),
        ("BOTTOMPADDING",(0,0),(-1,-1), 7),
        ("LEFTPADDING", (0,0), (-1,-1), 4),
        ("RIGHTPADDING",(0,0),(-1,-1), 4),
        ("ROUNDEDCORNERS", [5]),
    ]))
    return t


def two_col_table(left_items, right_items, left_head, right_head,
                  left_bg=WARN_BG, right_bg=INFO_BG,
                  left_bc=RED, right_bc=TEAL):
    """Comparison table (e.g., Acidity vs Heart Attack)."""
    col_w = (W - 2*18*mm - 6) / 2
    header_style = ParagraphStyle("th", fontName="Helvetica-Bold", fontSize=12,
                                   textColor=WHITE, alignment=TA_CENTER, leading=15)
    cell_style   = ParagraphStyle("td", fontName="Helvetica",      fontSize=10.5,
                                   textColor=DARK, alignment=TA_LEFT, leading=15)

    data = [[Paragraph(left_head, header_style), Paragraph(right_head, header_style)]]
    max_len = max(len(left_items), len(right_items))
    for i in range(max_len):
        l = Paragraph("✔  " + left_items[i],  cell_style) if i < len(left_items)  else Paragraph("", cell_style)
        r = Paragraph("✔  " + right_items[i], cell_style) if i < len(right_items) else Paragraph("", cell_style)
        data.append([l, r])

    t = Table(data, colWidths=[col_w, col_w])
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (0,0),  left_bc),
        ("BACKGROUND",    (1,0), (1,0),  right_bc),
        ("BACKGROUND",    (0,1), (0,-1), left_bg),
        ("BACKGROUND",    (1,1), (1,-1), right_bg),
        ("GRID",          (0,0), (-1,-1), 1.2, HexColor("#CCCCCC")),
        ("TOPPADDING",    (0,0), (-1,-1), 7),
        ("BOTTOMPADDING", (0,0), (-1,-1), 7),
        ("LEFTPADDING",   (0,0), (-1,-1), 8),
        ("RIGHTPADDING",  (0,0), (-1,-1), 8),
        ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
    ]))
    return t


def stat_row(stats):
    """Row of big stat numbers."""
    col_w = (W - 2*18*mm) / len(stats)
    data  = [[Paragraph(s[0], STAT_BIG)   for s in stats],
             [Paragraph(s[1], STAT_LABEL) for s in stats]]
    t = Table(data, colWidths=[col_w]*len(stats))
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,-1), HexColor("#FFF8F0")),
        ("BOX",           (0,0), (-1,-1), 1.5, HexColor("#F4C2C2")),
        ("ALIGN",         (0,0), (-1,-1), "CENTER"),
        ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
        ("TOPPADDING",    (0,0), (-1,-1), 10),
        ("BOTTOMPADDING", (0,0), (-1,-1), 10),
    ]))
    return t


def section_divider(num, title, color=RED):
    """Returns a list of flowables for section header."""
    return [
        Spacer(1, 10*mm),
        HRFlowable(width="100%", thickness=2, color=color, spaceAfter=4),
        Paragraph(f"SECTION {num}", SECTION_NUM),
        Paragraph(title, SECTION_HEAD),
        HRFlowable(width="40%", thickness=1.5, color=color, spaceAfter=6),
    ]


def info_box(text, bg=INFO_BG, border=TEAL, head=None):
    items = []
    if head:
        items.append(Paragraph(head, S("ibh", fontName="Helvetica-Bold", fontSize=12,
                                        textColor=border, leading=16, spaceAfter=4)))
    items.append(Paragraph(text, BOX_TEXT))
    inner = Table([[item] for item in items],
                  colWidths=[W - 2*18*mm - 16])
    inner.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(-1,-1), bg),
        ("BOX",          (0,0),(-1,-1), 2, border),
        ("LEFTPADDING",  (0,0),(-1,-1), 10),
        ("RIGHTPADDING", (0,0),(-1,-1), 10),
        ("TOPPADDING",   (0,0),(-1,-1), 8),
        ("BOTTOMPADDING",(0,0),(-1,-1), 8),
    ]))
    return inner


def red_callout(text):
    t = Table([[Paragraph(text, CALLOUT)]],
              colWidths=[W - 2*18*mm])
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0),(-1,-1), WARN_BG),
        ("BOX",           (0,0),(-1,-1), 2.5, RED),
        ("LEFTPADDING",   (0,0),(-1,-1), 14),
        ("RIGHTPADDING",  (0,0),(-1,-1), 14),
        ("TOPPADDING",    (0,0),(-1,-1), 10),
        ("BOTTOMPADDING", (0,0),(-1,-1), 10),
    ]))
    return t


def dark_box(items_list, head=None, bg=DARK, text_col=WHITE):
    content = []
    if head:
        content.append(Paragraph(head, S("dbh", fontName="Helvetica-Bold", fontSize=13,
                                          textColor=YELLOW, leading=18, spaceAfter=6)))
    for item in items_list:
        content.append(Paragraph("▸  " + item,
                                  S("dbb", fontName="Helvetica", fontSize=10.5,
                                    textColor=text_col, leading=16, spaceAfter=4)))
    inner = Table([[c] for c in content], colWidths=[W - 2*18*mm - 16])
    inner.setStyle(TableStyle([
        ("BACKGROUND",   (0,0),(-1,-1), bg),
        ("LEFTPADDING",  (0,0),(-1,-1), 12),
        ("RIGHTPADDING", (0,0),(-1,-1), 12),
        ("TOPPADDING",   (0,0),(-1,-1), 10),
        ("BOTTOMPADDING",(0,0),(-1,-1), 10),
    ]))
    return inner


# ════════════════════════════════════════════════════════════════════════════
#  BUILD DOCUMENT
# ════════════════════════════════════════════════════════════════════════════
def build_pdf(path):
    doc = SimpleDocTemplate(
        path,
        pagesize=A4,
        leftMargin=18*mm, rightMargin=18*mm,
        topMargin=22*mm,  bottomMargin=18*mm,
        title="Heart Attack Symptoms Young Indians Ignore",
        author="Evidence-Based Health Guide",
        subject="Cardiac Health — India"
    )

    story = []
    usable_w = W - 36*mm

    # ════════════════════════════════
    # COVER PAGE
    # ════════════════════════════════
    # Big red header band (drawn by page template) — add space
    story.append(Spacer(1, 14*mm))

    cover_bg = Table(
        [[Paragraph("❤️", S("hrt", fontName="Helvetica", fontSize=60,
                             textColor=RED, alignment=TA_CENTER))]],
        colWidths=[usable_w]
    )
    cover_bg.setStyle(TableStyle([("ALIGN",(0,0),(-1,-1),"CENTER"),("BOTTOMPADDING",(0,0),(-1,-1),0)]))
    story.append(cover_bg)
    story.append(Spacer(1, 4*mm))

    # Title on dark background card
    title_card = Table([
        [Paragraph("Heart Attack Symptoms", S("ct1", fontName="Helvetica-Bold", fontSize=28,
                                               textColor=WHITE, alignment=TA_CENTER, leading=34))],
        [Paragraph("Young Indians Ignore", S("ct2", fontName="Helvetica-Bold", fontSize=32,
                                              textColor=YELLOW, alignment=TA_CENTER, leading=38))],
    ], colWidths=[usable_w])
    title_card.setStyle(TableStyle([
        ("BACKGROUND", (0,0),(-1,-1), DARK_RED),
        ("TOPPADDING",    (0,0),(-1,-1), 14),
        ("BOTTOMPADDING", (0,0),(-1,-1), 14),
        ("LEFTPADDING",   (0,0),(-1,-1), 10),
        ("RIGHTPADDING",  (0,0),(-1,-1), 10),
    ]))
    story.append(title_card)
    story.append(Spacer(1, 5*mm))

    story.append(Paragraph(
        "A life-saving guide for every Indian aged 18–45",
        S("cst", fontName="Helvetica-Oblique", fontSize=13, textColor=MID, alignment=TA_CENTER)
    ))
    story.append(Spacer(1, 5*mm))

    # Stats row
    story.append(stat_row([
        ("50%",  "of Indian heart attacks\nhappen under age 50"),
        ("25%",  "happen under\nage 40"),
        ("10×",  "more risk for\nIndians vs. Western peers"),
    ]))
    story.append(Spacer(1, 5*mm))

    story.append(red_callout(
        "📢  Every 33 seconds, an Indian dies of heart disease.\n"
        "Most victims had warning signs — and ignored them."
    ))
    story.append(Spacer(1, 6*mm))

    # What's inside box
    toc_data = [
        ["01", "Early Warning Signs Before a Heart Attack"],
        ["02", "Acidity or Heart Attack? Know the Difference"],
        ["03", "Silent Heart Attack — The Invisible Killer"],
        ["04", "Why Young Indians Are Getting Heart Attacks"],
        ["05", "Risk Factors Unique to Indians"],
        ["06", "Emergency Red Flag Symptoms"],
        ["07", "Lifestyle Prevention Checklist"],
        ["08", "Myths Indians Believe — Debunked"],
        ["09", "What To Do During a Suspected Heart Attack"],
        ["10", "Quick Summary — Share With Your Family"],
    ]
    toc_rows = []
    for num, title in toc_data:
        num_p   = Paragraph(num, S("tn", fontName="Helvetica-Bold", fontSize=12,
                                    textColor=WHITE, alignment=TA_CENTER))
        title_p = Paragraph(title, S("tt", fontName="Helvetica", fontSize=11,
                                      textColor=DARK, alignment=TA_LEFT))
        toc_rows.append([num_p, title_p])

    toc_t = Table(toc_rows, colWidths=[22*mm, usable_w - 22*mm])
    toc_t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (0,-1), RED),
        ("BACKGROUND",    (1,0), (1,-1), WHITE),
        ("ROWBACKGROUNDS",(1,0), (1,-1), [HexColor("#FFF8F0"), WHITE]),
        ("GRID",          (0,0), (-1,-1), 0.5, HexColor("#DDDDDD")),
        ("ALIGN",         (0,0), (0,-1), "CENTER"),
        ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
        ("TOPPADDING",    (0,0), (-1,-1), 6),
        ("BOTTOMPADDING", (0,0), (-1,-1), 6),
        ("LEFTPADDING",   (1,0), (1,-1), 10),
    ]))
    story.append(toc_t)
    story.append(Spacer(1, 6*mm))

    story.append(Paragraph(
        "⚕️  Evidence-based  •  Reviewed against Harrison's, Tintinalli's EM & WHO data  •  May 2026",
        S("src", fontName="Helvetica-Oblique", fontSize=8.5, textColor=GRAY, alignment=TA_CENTER)
    ))

    story.append(PageBreak())

    # ════════════════════════════════
    # SECTION 1 — Early Warning Signs
    # ════════════════════════════════
    story += section_divider("01", "Early Warning Signs Before a Heart Attack", RED)
    story.append(Paragraph(
        "Your body whispers before it screams. Upto 60% of heart attack survivors report subtle "
        "warning signs days or even weeks earlier — and brushed them off as 'nothing serious.'",
        SECTION_INTRO
    ))

    story.append(Paragraph(
        "These prodromal symptoms can appear <b>2 days to 4 weeks</b> before a heart attack:",
        BODY
    ))

    story.append(symptom_pills([
        "😴  Unusual Fatigue", "😮‍💨  Shortness of Breath", "😰  Cold Sweats",
        "🤢  Nausea / Vomiting", "💫  Dizziness / Light-headedness", "😣  Jaw or Neck Discomfort",
        "💪  Left Arm Heaviness", "🫀  Racing or Irregular Heartbeat", "😟  Unexplained Anxiety",
    ], bg=WARN_BG, border=RED))

    story.append(Spacer(1, 5*mm))
    story.append(info_box(
        "The chest pain of a heart attack is typically described as <b>pressure, squeezing, heaviness, "
        "or tightness</b> — NOT always a sharp, stabbing pain. It may last more than 20 minutes and "
        "does NOT go away with rest or antacids.",
        bg=INFO_BG, border=TEAL,
        head="🔬  What Textbooks Say"
    ))
    story.append(Spacer(1, 4*mm))
    story.append(Paragraph(
        "<b>Pain can radiate to:</b> Left arm · Right arm · Both arms · Jaw · Neck · Upper back · Stomach",
        BULLET
    ))
    story.append(Spacer(1, 4*mm))
    story.append(red_callout(
        "⚠️  If you feel any 3 or more of these together — especially with chest discomfort — "
        "treat it as a cardiac emergency. Do NOT wait."
    ))

    story.append(PageBreak())

    # ════════════════════════════════
    # SECTION 2 — Acidity vs Heart Attack
    # ════════════════════════════════
    story += section_divider("02", "Acidity or Heart Attack?\nKnow the Difference", ORANGE)
    story.append(Paragraph(
        "This is India's deadliest confusion. Every year, thousands of Indians die because they "
        "took an antacid instead of calling an ambulance.",
        SECTION_INTRO
    ))

    story.append(two_col_table(
        left_items=[
            "Burning sensation behind breastbone",
            "Worsens after large/spicy meals",
            "Relieved by antacids within minutes",
            "Worse when lying down or bending",
            "No arm, jaw, or neck pain",
            "No sweating or breathlessness",
            "May have sour taste in mouth",
            "No sense of impending doom",
        ],
        right_items=[
            "Pressure, squeezing, heaviness in chest",
            "Can happen at rest or during mild activity",
            "NOT relieved by antacids",
            "May radiate to arm, jaw, back, neck",
            "Associated cold sweats",
            "Shortness of breath",
            "Nausea or vomiting",
            "Sense of fear / impending doom",
        ],
        left_head="🟢  LIKELY ACIDITY",
        right_head="🔴  POSSIBLE HEART ATTACK",
        left_bg=GREEN_BG, right_bg=WARN_BG,
        left_bc=GREEN, right_bc=RED
    ))
    story.append(Spacer(1, 5*mm))
    story.append(red_callout(
        "🚨  RULE: If you are unsure whether it is acidity or a heart attack — "
        "always assume heart attack. Call emergency services first. You can take antacids later."
    ))
    story.append(Spacer(1, 4*mm))
    story.append(info_box(
        "Diabetics, women, and elderly patients frequently present with atypical symptoms — "
        "nausea, vomiting, or fatigue — WITHOUT classic chest pain. "
        "This is called an <b>atypical presentation</b> and is dangerously easy to miss.",
        bg=INFO_BG, border=TEAL, head="⚕️  Special Warning for Diabetics & Women"
    ))

    story.append(PageBreak())

    # ════════════════════════════════
    # SECTION 3 — Silent Heart Attack
    # ════════════════════════════════
    story += section_divider("03", "Silent Heart Attack — The Invisible Killer", DARK_RED)
    story.append(Paragraph(
        "A silent heart attack (silent MI) causes real, permanent heart damage — "
        "but without the dramatic chest-clutching scene you've seen in movies.",
        SECTION_INTRO
    ))

    story.append(stat_row([
        ("45%", "of all heart attacks\nare completely silent"),
        ("2×",  "higher risk of future\nfatal heart attack"),
        ("3×",  "more common in\ndiabetics"),
    ]))
    story.append(Spacer(1, 5*mm))

    story.append(dark_box([
        "Mild, brief chest discomfort that passes within minutes",
        "Extreme fatigue that 'comes and goes' over days",
        "A feeling of indigestion that doesn't respond to antacids",
        "Flu-like symptoms — weakness, mild nausea, light sweating",
        "Pain in jaw, arm, or upper back that seems muscular",
        "Feeling 'off' for several days without a clear reason",
        "Shortness of breath when climbing stairs or walking fast",
    ], head="🔇  Symptoms of a Silent Heart Attack", bg=MID))

    story.append(Spacer(1, 5*mm))
    story.append(info_box(
        "Silent MIs are detected on ECG (by abnormal Q waves) or cardiac imaging showing "
        "dead heart tissue — often discovered <b>months or years</b> after the event, "
        "during a routine checkup. The damage is real and permanent.",
        bg=INFO_BG, border=TEAL, head="🔬  How Silent MIs Are Detected (Harrison's, 2025)"
    ))
    story.append(Spacer(1, 4*mm))
    story.append(red_callout(
        "💡  If you are a diabetic, above 30, or have high blood pressure — "
        "get an annual ECG and cardiac check. A silent heart attack may have already happened."
    ))

    story.append(PageBreak())

    # ════════════════════════════════
    # SECTION 4 — Why Young Indians
    # ════════════════════════════════
    story += section_divider("04", "Why Young Indians Are Getting Heart Attacks", RED)
    story.append(Paragraph(
        "India is facing a cardiac epidemic unlike any other country. "
        "Indians develop heart disease <b>10–15 years earlier</b> than their Western counterparts. "
        "Here is why:",
        SECTION_INTRO
    ))

    reasons = [
        ("🍕  Ultra-Processed Food Culture",
         "Instant noodles, packaged snacks, and office canteen food loaded with trans fats, "
         "refined carbs, and sodium have replaced traditional home-cooked meals."),
        ("💼  Chronic Work Stress",
         "12-hour workdays, night shifts in IT, startup culture, and financial pressure "
         "chronically elevate cortisol, raising blood pressure and causing arterial inflammation."),
        ("🛋️  Sedentary Lifestyle",
         "Desk jobs, long commutes, Netflix culture. Nearly 60% of urban Indians "
         "do not meet the minimum exercise recommendations of 150 min/week."),
        ("🚬  Tobacco & Substance Use",
         "Cigarettes, bidi, pan masala, gutka, and hookah all dramatically accelerate "
         "atherosclerosis. Young Indians increasingly add alcohol and cannabis to the mix."),
        ("😴  Sleep Deprivation",
         "Chronic sleep under 6 hours raises blood pressure, increases inflammation markers, "
         "and doubles cardiovascular risk. India is among the most sleep-deprived nations."),
        ("💊  Uncontrolled Diabetes & BP",
         "India is the diabetes capital of the world. Millions walk around with high sugar "
         "and high blood pressure without knowing — silently destroying arteries."),
        ("🦠  Post-COVID Cardiac Impact",
         "COVID-19 causes vascular inflammation and clotting abnormalities. "
         "India's massive infection wave has left millions with subclinical cardiac damage."),
        ("🏋️  Gym Overexertion",
         "Young gym-goers pushing through chest pain, using pre-workout stimulants, "
         "or taking performance-enhancing drugs (steroids, clenbuterol) — documented "
         "triggers for heart attack in under-35 Indian patients."),
    ]

    for icon_title, desc in reasons:
        t = Table([
            [Paragraph(icon_title, S("rh", fontName="Helvetica-Bold", fontSize=12,
                                      textColor=DARK_RED, leading=16)),],
            [Paragraph(desc, S("rb", fontName="Helvetica", fontSize=10.5,
                                textColor=DARK, leading=15, spaceAfter=3))],
        ], colWidths=[usable_w])
        t.setStyle(TableStyle([
            ("BACKGROUND",    (0,0), (-1,-1), HexColor("#FFF8F0")),
            ("BOX",           (0,0), (-1,-1), 1, HexColor("#F4C2C2")),
            ("LEFTPADDING",   (0,0), (-1,-1), 10),
            ("RIGHTPADDING",  (0,0), (-1,-1), 10),
            ("TOPPADDING",    (0,0), (-1,-1), 7),
            ("BOTTOMPADDING", (0,0), (-1,-1), 7),
        ]))
        story.append(t)
        story.append(Spacer(1, 3*mm))

    story.append(PageBreak())

    # ════════════════════════════════
    # SECTION 5 — Indian-Specific Risk Factors
    # ════════════════════════════════
    story += section_divider("05", "Risk Factors Unique to Indians", TEAL)
    story.append(Paragraph(
        "Beyond general risk factors, Indians carry a <b>genetic and metabolic disadvantage</b> "
        "that Western medical research has only recently acknowledged.",
        SECTION_INTRO
    ))

    left_facts = [
        "Lipoprotein(a) [Lp(a)] levels are 2–3× higher in South Asians — a potent independent risk factor",
        "Indians develop central (abdominal) obesity at lower BMI thresholds (BMI >23 = overweight; >25 = obese for Indians)",
        "Insulin resistance is more prevalent even in lean Indians — 'thin-fat' body composition",
        "Indians have smaller coronary artery diameter on average, making blockages more dangerous",
        "Familial hypercholesterolemia is more common and often undiagnosed",
        "Higher prevalence of Metabolic Syndrome even in young, non-obese adults",
    ]
    right_facts = [
        "South Asians are 3–5× more likely to develop Type 2 diabetes than White Europeans",
        "Homocysteine levels tend to be higher (linked to B12/folate deficiency from vegetarian diets)",
        "Inflammation markers (hsCRP) are chronically elevated in urban Indians",
        "Lower HDL ('good' cholesterol) is endemic — often genetic",
        "Mental stress, financial anxiety, family pressure — chronic cortisol elevation",
        "Pollution exposure (Delhi, Mumbai, Kanpur) — linked to 14% of India's cardiac deaths",
    ]

    story.append(two_col_table(
        left_items=left_facts, right_items=right_facts,
        left_head="🧬  Genetic & Metabolic",
        right_head="🌆  Lifestyle & Environment",
        left_bg=HexColor("#F0F8FF"), right_bg=HexColor("#FFF0F8"),
        left_bc=TEAL, right_bc=HexColor("#8B008B")
    ))
    story.append(Spacer(1, 5*mm))
    story.append(red_callout(
        "💬  'I'm thin, I don't have risk.'  —  WRONG.\n"
        "Indians can have dangerous arterial disease at normal BMI. "
        "Your waist circumference matters more than your weight."
    ))
    story.append(Spacer(1, 4*mm))
    story.append(info_box(
        "Indian men: Waist &gt; 90 cm (35 inches) = high risk\n"
        "Indian women: Waist &gt; 80 cm (31 inches) = high risk\n\n"
        "These are lower thresholds than international guidelines — specifically for South Asians.",
        bg=GREEN_BG, border=GREEN, head="📏  Waist Circumference — Indian-Specific Thresholds"
    ))

    story.append(PageBreak())

    # ════════════════════════════════
    # SECTION 6 — Emergency Red Flags
    # ════════════════════════════════
    story += section_divider("06", "Emergency Red Flag Symptoms", RED)
    story.append(Paragraph(
        "These symptoms mean one thing: <b>call 112 immediately.</b> "
        "Do not drive yourself. Do not wait to see if it gets better. Every minute of delay = more dead heart muscle.",
        SECTION_INTRO
    ))

    red_flags = [
        "🔴  Crushing, squeezing, or heavy pressure in the chest lasting > 5 minutes",
        "🔴  Chest pain or discomfort spreading to arm, jaw, neck, or back",
        "🔴  Sudden severe shortness of breath — even at rest",
        "🔴  Cold, clammy sweat with chest discomfort",
        "🔴  Sudden nausea or vomiting with chest discomfort",
        "🔴  Sudden loss of consciousness or near-fainting",
        "🔴  Extreme, unexplained weakness — feel like your legs have given way",
        "🔴  Sudden feeling of extreme anxiety or 'something terribly wrong'",
        "🔴  Palpitations (rapid / irregular heartbeat) with dizziness",
        "🔴  Heart symptoms during or after vigorous exercise in gym",
    ]

    redbox_rows = [[Paragraph(f, S("rf", fontName="Helvetica-Bold", fontSize=11.5,
                                    textColor=WHITE, leading=17))] for f in red_flags]
    rb = Table(redbox_rows, colWidths=[usable_w])
    rb.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,-1), RED),
        ("ROWBACKGROUNDS",(0,0), (-1,-1), [DARK_RED, RED]),
        ("LEFTPADDING",   (0,0), (-1,-1), 14),
        ("RIGHTPADDING",  (0,0), (-1,-1), 14),
        ("TOPPADDING",    (0,0), (-1,-1), 8),
        ("BOTTOMPADDING", (0,0), (-1,-1), 8),
    ]))
    story.append(rb)
    story.append(Spacer(1, 5*mm))

    emergency_box = Table([[
        Paragraph("📞  INDIA EMERGENCY NUMBERS", S("en1", fontName="Helvetica-Bold", fontSize=14,
                                                    textColor=WHITE, alignment=TA_CENTER, leading=18)),
        Paragraph("", BODY),
        Paragraph("112", S("en2", fontName="Helvetica-Bold", fontSize=28,
                            textColor=YELLOW, alignment=TA_CENTER)),
        Paragraph("National Emergency", S("en3", fontName="Helvetica", fontSize=10,
                                           textColor=WHITE, alignment=TA_CENTER)),
    ]], colWidths=[usable_w*0.55, 5, usable_w*0.2, usable_w*0.2])

    em_box = Table(
        [[Paragraph("📞  Call  112  (National Emergency)\n102  (Ambulance)  |  108  (EMRI)",
                     S("em", fontName="Helvetica-Bold", fontSize=14, textColor=WHITE,
                        alignment=TA_CENTER, leading=20))]],
        colWidths=[usable_w]
    )
    em_box.setStyle(TableStyle([
        ("BACKGROUND",    (0,0),(-1,-1), DARK_RED),
        ("TOPPADDING",    (0,0),(-1,-1), 14),
        ("BOTTOMPADDING", (0,0),(-1,-1), 14),
    ]))
    story.append(em_box)

    story.append(PageBreak())

    # ════════════════════════════════
    # SECTION 7 — Prevention Checklist
    # ════════════════════════════════
    story += section_divider("07", "Lifestyle Prevention Checklist", GREEN)
    story.append(Paragraph(
        "80% of heart attacks are preventable. These are evidence-based actions, not guesswork.",
        SECTION_INTRO
    ))

    checklist_items = [
        ("🏃  Move Daily",
         "150 min moderate exercise/week (brisk walk, cycling, swimming). Even 20 min/day cuts heart risk by 35%."),
        ("🥗  Eat Real Food",
         "Cut ultra-processed food, trans fats, excess salt. Add leafy greens, dals, nuts, fruits. Limit red meat."),
        ("🩺  Know Your Numbers",
         "Check blood pressure, fasting sugar, cholesterol, and HbA1c annually — even if you feel fine."),
        ("⚖️  Trim the Waist",
         "Lose central fat — NOT just body weight. Yoga, walking, strength training all help visceral fat."),
        ("🚬  Quit Tobacco — All Forms",
         "Cigarettes, bidi, gutka, pan masala, hookah — all damage arteries. Every cigarette counts."),
        ("😴  Protect Your Sleep",
         "7–8 hours minimum. Sleep deprivation doubles cardiovascular risk. Fix it."),
        ("🧘  Manage Stress Actively",
         "10 min daily meditation, deep breathing, or yoga lowers blood pressure and cortisol significantly."),
        ("🩸  Control Diabetes & BP",
         "If diagnosed, take medication consistently. Don't skip doses. Regular follow-up with your doctor."),
        ("🍺  Limit Alcohol",
         "Max 1 drink/day for women, 2 for men. Binge drinking causes sudden cardiac arrhythmias."),
        ("🏥  Annual Cardiac Screening",
         "If you have any risk factors — get ECG, lipid profile, echo. Don't wait for symptoms."),
    ]

    for icon_title, desc in checklist_items:
        t = Table([
            [Paragraph("☑  " + icon_title,
                        S("ch", fontName="Helvetica-Bold", fontSize=12,
                          textColor=GREEN, leading=16)),
             Paragraph(desc, S("cd", fontName="Helvetica", fontSize=10.5,
                                textColor=DARK, leading=15))],
        ], colWidths=[usable_w * 0.32, usable_w * 0.68])
        t.setStyle(TableStyle([
            ("BACKGROUND",    (0,0),(-1,-1), GREEN_BG),
            ("BOX",           (0,0),(-1,-1), 1, HexColor("#A8E6C0")),
            ("LEFTPADDING",   (0,0),(-1,-1), 10),
            ("RIGHTPADDING",  (0,0),(-1,-1), 10),
            ("TOPPADDING",    (0,0),(-1,-1), 7),
            ("BOTTOMPADDING", (0,0),(-1,-1), 7),
            ("VALIGN",        (0,0),(-1,-1), "MIDDLE"),
        ]))
        story.append(t)
        story.append(Spacer(1, 2.5*mm))

    story.append(PageBreak())

    # ════════════════════════════════
    # SECTION 8 — Myths
    # ════════════════════════════════
    story += section_divider("08", "Myths Indians Believe — Debunked", HexColor("#8B008B"))
    story.append(Paragraph(
        "These dangerous beliefs are costing lives every single day in Indian homes.",
        SECTION_INTRO
    ))

    myths = [
        ("MYTH: 'Heart attacks only happen to old men.'",
         "FACT: The Indian Heart Association reports that 50% of heart attacks in Indian men "
         "occur before age 50. Cases in 20s and 30s are now routine in cardiac ICUs."),
        ("MYTH: 'If I'm vegetarian, I'm safe.'",
         "FACT: A vegetarian diet can still be high in refined carbs, sugar, ghee, and salt. "
         "Vegetarians are not immune. India proves this statistic every day."),
        ("MYTH: 'I would KNOW if I had a heart attack.'",
         "FACT: 45% of heart attacks are silent — especially in diabetics and women. "
         "You can have a heart attack and feel only mild 'indigestion.'"),
        ("MYTH: 'I exercise, so I'm protected.'",
         "FACT: Exercise reduces risk but doesn't eliminate it — especially if you have "
         "genetic predisposition, uncontrolled cholesterol, or supplement/steroid use."),
        ("MYTH: 'Chest pain is always the first sign.'",
         "FACT: Many heart attacks begin with jaw pain, arm heaviness, breathlessness, "
         "fatigue, or cold sweats — with little or no chest pain."),
        ("MYTH: 'Normal cholesterol = safe heart.'",
         "FACT: Many Indians have dangerous Lp(a) levels, high triglycerides, or low HDL "
         "that a standard cholesterol test doesn't catch. Ask for a full lipid profile."),
        ("MYTH: 'Angioplasty/stenting = permanent cure.'",
         "FACT: Procedures fix one blockage but don't cure atherosclerosis. "
         "Without lifestyle change, new blockages form — often within years."),
        ("MYTH: 'Stress doesn't physically damage the heart.'",
         "FACT: Chronic stress raises cortisol, increases blood pressure and clotting factors, "
         "and directly damages the arterial wall. Stress cardiomyopathy (Takotsubo) is real."),
    ]

    for myth, fact in myths:
        myth_p = Paragraph("✗  " + myth, MYTH_Q)
        fact_p = Paragraph("✓  " + fact, MYTH_A)
        t = Table([[myth_p], [fact_p]], colWidths=[usable_w])
        t.setStyle(TableStyle([
            ("BACKGROUND",    (0,0),(0,0), HexColor("#FFF0F0")),
            ("BACKGROUND",    (0,1),(0,1), HexColor("#F0FFF4")),
            ("LEFTBORDER",    (0,0),(0,0), 4, RED),
            ("LEFTBORDER",    (0,1),(0,1), 4, GREEN),
            ("LEFTPADDING",   (0,0),(-1,-1), 12),
            ("RIGHTPADDING",  (0,0),(-1,-1), 10),
            ("TOPPADDING",    (0,0),(-1,-1), 7),
            ("BOTTOMPADDING", (0,0),(-1,-1), 7),
        ]))
        story.append(t)
        story.append(Spacer(1, 3*mm))

    story.append(PageBreak())

    # ════════════════════════════════
    # SECTION 9 — What To Do
    # ════════════════════════════════
    story += section_divider("09", "What To Do During a Suspected Heart Attack", RED)
    story.append(Paragraph(
        "Time is muscle. Every 30 minutes of delay in treatment increases mortality by 7.5%. "
        "Here is the exact protocol — memorise it, share it.",
        SECTION_INTRO
    ))

    steps = [
        ("STEP 1", "CALL 112 IMMEDIATELY", RED,
         "Do not drive to hospital yourself. An ambulance has defibrillators and trained paramedics. "
         "Describe your symptoms clearly. Stay on the line."),
        ("STEP 2", "SIT OR LIE DOWN", ORANGE,
         "Sit in a comfortable position (semi-reclined). Do NOT exert yourself. "
         "Loosen tight clothing — shirt collar, belt, tie."),
        ("STEP 3", "ASPIRIN (if available & not allergic)", TEAL,
         "Chew (do NOT swallow whole) 300mg aspirin if available and you are NOT allergic to it. "
         "Chewing delivers it faster into the bloodstream."),
        ("STEP 4", "STAY CALM & BREATHE SLOWLY", GREEN,
         "Slow, deep breathing reduces oxygen demand. "
         "Panic raises heart rate and worsens the situation."),
        ("STEP 5", "DO NOT EAT OR DRINK ANYTHING ELSE", DARK_RED,
         "Do not take any other medication unless instructed by emergency services. "
         "No water, no food, no home remedies."),
        ("STEP 6", "UNLOCK THE DOOR FOR AMBULANCE", MID,
         "If alone, unlock your front door before you become too weak. "
         "Tell someone — neighbour, family — your location."),
    ]

    for step_num, step_title, color, desc in steps:
        t = Table([[
            Paragraph(step_num, S("sn", fontName="Helvetica-Bold", fontSize=9,
                                   textColor=WHITE, alignment=TA_CENTER)),
            Paragraph(f"<b>{step_title}</b><br/>{desc}",
                       S("sc", fontName="Helvetica", fontSize=11,
                         textColor=DARK, leading=16)),
        ]], colWidths=[22*mm, usable_w - 22*mm])
        t.setStyle(TableStyle([
            ("BACKGROUND",    (0,0),(0,0), color),
            ("BACKGROUND",    (1,0),(1,0), HexColor("#FFF8F0")),
            ("BOX",           (0,0),(-1,-1), 1.5, color),
            ("LEFTPADDING",   (0,0),(-1,-1), 8),
            ("RIGHTPADDING",  (0,0),(-1,-1), 10),
            ("TOPPADDING",    (0,0),(-1,-1), 10),
            ("BOTTOMPADDING", (0,0),(-1,-1), 10),
            ("VALIGN",        (0,0),(-1,-1), "MIDDLE"),
            ("ALIGN",         (0,0),(0,0), "CENTER"),
        ]))
        story.append(t)
        story.append(Spacer(1, 3*mm))

    story.append(Spacer(1, 3*mm))
    story.append(red_callout(
        "🚫  DON'T DO THESE:\n"
        "Do NOT give water / food  •  Do NOT let patient walk  •  Do NOT apply balm or oil  "
        "•  Do NOT give multiple medications  •  Do NOT delay calling for help"
    ))

    story.append(PageBreak())

    # ════════════════════════════════
    # SECTION 10 — Quick Summary
    # ════════════════════════════════
    story += section_divider("10", "Quick Summary — Share With Your Family ❤️", RED)
    story.append(Paragraph(
        "If this guide helps one person recognise a heart attack in time, "
        "it has done its job. Please share this with everyone you love.",
        SECTION_INTRO
    ))

    summary_sections = [
        (RED, "⚡ Early Warning Signs",
         ["Fatigue, breathlessness, cold sweats, nausea, jaw/arm pain DAYS before attack"]),
        (TEAL, "🔇 Silent Heart Attack",
         ["45% of MIs are silent. Common in diabetics. Get annual ECG if you have risk factors."]),
        (ORANGE, "🍋 Not Acidity",
         ["Chest pressure NOT relieved by antacids, with arm/jaw pain = HEART ATTACK, not gas"]),
        (HexColor("#8B008B"), "🧬 Indians Are Special-Risk",
         ["Heart disease strikes Indians 10-15 years earlier. Genetic, metabolic, and lifestyle factors."]),
        (GREEN, "✅ Prevention Works",
         ["Exercise 150 min/week. Know your numbers. Quit tobacco. Manage stress. Sleep 7-8 hrs."]),
        (DARK_RED, "🚨 Red Flags = Call 112",
         ["Chest pressure >5 min, arm/jaw pain, cold sweats, breathlessness → Call 112 NOW"]),
        (MID, "💊 During Attack",
         ["Sit down • Call 112 • Chew aspirin 300mg • Stay calm • Unlock door"]),
    ]

    for bg_col, head, points in summary_sections:
        rows = [[Paragraph(head, S("sh", fontName="Helvetica-Bold", fontSize=12,
                                    textColor=WHITE, leading=16))]]
        for pt in points:
            rows.append([Paragraph("▸ " + pt, S("sp", fontName="Helvetica", fontSize=10.5,
                                                  textColor=WHITE, leading=14))])
        t = Table(rows, colWidths=[usable_w])
        t.setStyle(TableStyle([
            ("BACKGROUND",    (0,0),(0,0), bg_col),
            ("BACKGROUND",    (0,1),(-1,-1), HexColor("#1A1A2E") if bg_col==MID else DARK),
            ("LEFTPADDING",   (0,0),(-1,-1), 12),
            ("RIGHTPADDING",  (0,0),(-1,-1), 12),
            ("TOPPADDING",    (0,0),(-1,-1), 7),
            ("BOTTOMPADDING", (0,0),(-1,-1), 7),
        ]))
        story.append(t)
        story.append(Spacer(1, 2.5*mm))

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

    # Share CTA
    cta = Table([[Paragraph(
        "❤️  SHARE THIS GUIDE — It could save a life in your family\n"
        "Forward to parents, spouse, colleagues, gym partners",
        S("cta", fontName="Helvetica-Bold", fontSize=13, textColor=WHITE,
           alignment=TA_CENTER, leading=20)
    )]], colWidths=[usable_w])
    cta.setStyle(TableStyle([
        ("BACKGROUND",    (0,0),(-1,-1), RED),
        ("TOPPADDING",    (0,0),(-1,-1), 14),
        ("BOTTOMPADDING", (0,0),(-1,-1), 14),
        ("LEFTPADDING",   (0,0),(-1,-1), 14),
        ("RIGHTPADDING",  (0,0),(-1,-1), 14),
    ]))
    story.append(cta)
    story.append(Spacer(1, 6*mm))

    # Disclaimer
    story.append(HRFlowable(width="100%", thickness=1, color=GRAY, spaceAfter=4))
    story.append(Paragraph(
        "⚕️  DISCLAIMER: This guide is for educational and awareness purposes only. "
        "It does not constitute medical advice, diagnosis, or treatment. "
        "Always consult a qualified healthcare professional for personal medical guidance. "
        "In an emergency, call 112 immediately.\n\n"
        "Sources: Harrison's Principles of Internal Medicine 22E (2025, McGraw-Hill) · "
        "Tintinalli's Emergency Medicine · WHO Global Heart Disease Report · "
        "Indian Heart Association · PMC/NIH: Young Hearts under Attack (2025) · "
        "ACC: Young Indians with Fatigued Hearts (2023)",
        DISCLAIMER
    ))

    # Build
    doc.build(story, onFirstPage=first_page, onLaterPages=later_pages)
    print(f"PDF built → {path}")


if __name__ == "__main__":
    build_pdf("/home/daytona/workspace/heart-attack-guide/Heart_Attack_Guide_Young_Indians.pdf")
Running Command

cd /home/daytona/workspace/heart-attack-guide && python generate_guide.py 2>&1

Your credits are exhausted. Your daily credits reset tomorrow, or you can purchase a top-up for more.
This is a shared conversation. Sign in to Orris to start your own chat.