act as shalakya tantra professor who will solve the questions ...ayurveda in hindi with shloka with reference and modern in english ...and corelate wherever necessary you can find shloka from this site:https://www.carakasamhitaonline.com/index.php?title=Main_Pagesushruta samhita https://niimh.nic.in/ebooks/esushruta/ashtang hridya samhita : https://vedotpatti.in/samhita/Vag/ehrudayam/?mod=readmadhavnidan site :https://niimh.nic.in/ebooks/madhavanidana/kashyap samhita site:https://esamhita.wordpress.com/kashyapa-samhita/

I understand! You want me to act as a Shalakya Tantra Professor who answers questions in a combined format:
  • Ayurveda in Hindi with shlokas and references (Charaka, Sushruta, Ashtanga Hridaya, Madhava Nidana, Kashyapa Samhita)
  • Modern medicine in English
  • Correlation between both systems wherever applicable
I'm ready. Please post your question and I will answer in the format of a Shalakya Tantra professor - covering netra roga (eye diseases), karna roga (ear diseases), nasa roga (nasal diseases), mukha roga (oral diseases), shiro roga (head diseases) and related topics from Shalakya Tantra.

प्रश्न पूछिए (Please ask your question) - I will respond with:
आयुर्वेदिक दृष्टिकोण (Ayurvedic Perspective) - Hindi शास्त्रीय श्लोक + व्याख्या + संदर्भ
Modern Perspective - English Definition, Etiology, Pathophysiology, Clinical Features, Diagnosis, Treatment
Correlation / तुलनात्मक विवेचन Ancient-Modern Integration

Kapalgata Roga visual notes

Reading File
Searching the Web

Kapalgata Roga Shalakya Tantra Sushruta Samhita shlokas diseases of skull

Reading Web Page

https://niimh.nic.in/ebooks/esushruta/

Reading Web Page

https://www.slideshare.net/slideshow/kapalagata-roga-with-mo…

Finding Sources
Generating Image

Ayurveda Shalakya Tantra medical visual study notes poster titled "KAPALGATA ROGA - कपालगत रोग" (Diseases of the Scalp/Skull Region). Dark blue and gold academic theme. Structured layout with the following clearly organized sections: TOP HEADER: "KAPALGATA ROGA | कपालगत रोग" with subtitle "Shalakya Tantra | शालाक्य तन्त्र" - Reference: Ashtanga Hridayam Uttarasthana 23, Sushruta Samhita LEFT COLUMN - 6 Disease boxes each with Hindi name, Sanskrit shloka snippet, modern correlation: 1. UPASHIRSHAKA (उपशीर्षक) - Congenital condition; scalp abscess/furuncle 2. ARUNSHIKA (अरुंशिका) - Scalp pustules; folliculitis 3. DARUNAKA (दारुणक) - Dry scaly itchy scalp; Dandruff/Seborrheic Dermatitis 4. INDRALUPTA (इन्द्रलुप्त) - Pitta+Vata vitiation, hair fall; Alopecia Areata 5. KHALITYA (खालित्य) - Progressive hair loss; Androgenic Alopecia / Male Pattern Baldness 6. PALITYA (पालित्य) - Premature greying; Canities/Premature Graying CENTER COLUMN - Dosha involvement table: VATA: dry scalp, hair loss, rough texture PITTA: inflammation, sweating, follicle damage KAPHA: thick scalp, oily, blocks follicles RAKTA: blood vitiation, redness RIGHT COLUMN - Treatment/Chikitsa section: - Siravedha (Bloodletting) - Nasya Karma - Shirobasti - Shirolepa (Oil application) - Abhyanga - Modern: Minoxidil, Finasteride, Corticosteroids, Antifungals BOTTOM BAND: Mnemonic box "U-A-D-I-K-P = उपशीर्षक, अरुंशिका, दारुणक, इन्द्रलुप्त, खालित्य, पालित्य" Academic medical poster style with clean white text on dark background, colored boxes for each disease, arrows showing progression. Include Sanskrit text in Devanagari script.

!

404 Not Found. {'message': '{\n "error": {\n "code": 404,\n "message": "Publisher model `projects/engaged-beaker-474810-u2/locations/global/publishers/google/models/gemini-3-pro-image-preview` was not found or your project does not have access to it. Ensure you are using a valid model name and that the model is available in the specified region. For more information, see: https://docs.cloud.google.com/gemini-enterprise-agent-platform/resources/locations.",\n "status": "NOT_FOUND"\n }\n}\n', 'status': 'Not Found'}

We encountered an error while processing your request. Please try again or reach out to us for help.

Kapalgata roga visual notes

Running Command

mkdir -p /tmp/workspace/kapalgata-roga && ls /tmp/workspace/

Writing File

~/kapalgata-roga/kapalgata_roga_visual_notes.html

<!DOCTYPE html>
<html lang="hi">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kapalgata Roga - Visual Notes | Shalakya Tantra</title>
<style>
  @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+Devanagari:wght@400;700&family=Roboto:wght@300;400;700;900&display=swap');

  * { margin: 0; padding: 0; box-sizing: border-box; }

  body {
    font-family: 'Roboto', sans-serif;
    background: #0a0e1a;
    color: #fff;
    min-height: 100vh;
    padding: 16px;
  }

  .page {
    max-width: 1200px;
    margin: 0 auto;
    background: #0d1225;
    border-radius: 16px;
    overflow: hidden;
    border: 2px solid #c9a84c;
  }

  /* ===== HEADER ===== */
  .header {
    background: linear-gradient(135deg, #1a0a3d 0%, #0d1a4a 50%, #0a2040 100%);
    padding: 20px 28px 16px;
    border-bottom: 3px solid #c9a84c;
    display: flex;
    align-items: center;
    justify-content: space-between;
  }
  .header-left { flex: 1; }
  .header-badge {
    background: #c9a84c;
    color: #0d1225;
    font-weight: 900;
    font-size: 11px;
    padding: 4px 12px;
    border-radius: 20px;
    letter-spacing: 2px;
    display: inline-block;
    margin-bottom: 8px;
  }
  .main-title {
    font-size: 32px;
    font-weight: 900;
    color: #fff;
    letter-spacing: 1px;
    line-height: 1.1;
  }
  .hindi-title {
    font-family: 'Noto Sans Devanagari', sans-serif;
    font-size: 22px;
    color: #c9a84c;
    margin-top: 4px;
  }
  .subtitle {
    font-size: 13px;
    color: #8ba3c7;
    margin-top: 6px;
    letter-spacing: 0.5px;
  }
  .header-refs {
    text-align: right;
    font-size: 11px;
    color: #8ba3c7;
    line-height: 1.8;
  }
  .header-refs span {
    display: block;
    color: #c9a84c;
    font-size: 10px;
    letter-spacing: 1px;
    font-weight: 700;
    margin-bottom: 4px;
  }

  /* ===== DEFINITION BAND ===== */
  .def-band {
    background: linear-gradient(90deg, #1e2d0a, #0e1e3a, #1e2d0a);
    border-left: 5px solid #4caf50;
    padding: 12px 28px;
    display: flex;
    align-items: center;
    gap: 20px;
    flex-wrap: wrap;
  }
  .def-band .label {
    color: #4caf50;
    font-weight: 700;
    font-size: 12px;
    letter-spacing: 1px;
    min-width: 120px;
  }
  .def-band .text {
    color: #d4e8ff;
    font-size: 13px;
    flex: 1;
  }
  .shloka-band {
    background: #0c1830;
    border-left: 5px solid #c9a84c;
    padding: 10px 28px;
    font-family: 'Noto Sans Devanagari', sans-serif;
    font-size: 13px;
    color: #f0d98a;
    line-height: 1.8;
  }
  .shloka-ref { font-size: 11px; color: #8ba3c7; font-family: 'Roboto', sans-serif; margin-top: 2px; }

  /* ===== MAIN GRID ===== */
  .main-grid {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    gap: 0;
  }

  .col {
    padding: 16px;
    border-right: 1px solid #1e2d4a;
  }
  .col:last-child { border-right: none; }

  .col-title {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 2px;
    text-transform: uppercase;
    padding: 6px 12px;
    border-radius: 6px;
    margin-bottom: 14px;
    text-align: center;
  }

  /* ===== DISEASE CARDS ===== */
  .disease-card {
    background: #0f1b35;
    border-radius: 10px;
    padding: 12px 14px;
    margin-bottom: 10px;
    border-left: 4px solid;
    position: relative;
    transition: transform 0.2s;
  }
  .disease-card:hover { transform: translateX(3px); }

  .dc-num {
    position: absolute;
    top: -8px;
    left: 10px;
    font-size: 10px;
    font-weight: 900;
    padding: 2px 8px;
    border-radius: 10px;
  }

  .dc-name-en {
    font-size: 14px;
    font-weight: 900;
    margin-top: 6px;
    letter-spacing: 0.5px;
  }
  .dc-name-hi {
    font-family: 'Noto Sans Devanagari', sans-serif;
    font-size: 13px;
    color: #c9a84c;
    margin-bottom: 6px;
  }
  .dc-dosha {
    display: flex;
    gap: 4px;
    flex-wrap: wrap;
    margin-bottom: 6px;
  }
  .dosha-tag {
    font-size: 9px;
    padding: 2px 7px;
    border-radius: 10px;
    font-weight: 700;
    letter-spacing: 0.5px;
  }
  .vata { background: #1a2e4a; color: #6eb6ff; border: 1px solid #3a6aaa; }
  .pitta { background: #3a1a00; color: #ff9944; border: 1px solid #aa4400; }
  .kapha { background: #0a2a1a; color: #44cc88; border: 1px solid #1a6644; }
  .rakta { background: #3a0a0a; color: #ff6666; border: 1px solid #aa2222; }

  .dc-shloka {
    font-family: 'Noto Sans Devanagari', sans-serif;
    font-size: 10.5px;
    color: #d4c080;
    background: #060e1e;
    padding: 6px 8px;
    border-radius: 5px;
    line-height: 1.7;
    margin-bottom: 5px;
    border-left: 2px solid #c9a84c;
  }
  .dc-ref { font-size: 9px; color: #6888aa; font-family: 'Roboto', sans-serif; margin-bottom: 5px; }

  .dc-symptoms {
    font-size: 11px;
    color: #b0c8e8;
    line-height: 1.5;
    margin-bottom: 5px;
  }
  .dc-symptoms li { list-style: none; padding-left: 12px; position: relative; }
  .dc-symptoms li::before { content: "▸"; position: absolute; left: 0; color: inherit; }

  .modern-tag {
    display: inline-block;
    font-size: 10px;
    font-weight: 700;
    padding: 3px 10px;
    border-radius: 4px;
    letter-spacing: 0.5px;
    margin-top: 2px;
  }

  /* Colors for each disease */
  .c1 { border-color: #e74c3c; }
  .c1 .dc-num { background: #e74c3c; color: #fff; }
  .c1 .dc-name-en { color: #ff7070; }
  .c1 .modern-tag { background: #3a0a0a; color: #ff7070; border: 1px solid #e74c3c; }
  .c1 .dc-symptoms li::before { color: #ff7070; }

  .c2 { border-color: #e67e22; }
  .c2 .dc-num { background: #e67e22; color: #fff; }
  .c2 .dc-name-en { color: #ffaa55; }
  .c2 .modern-tag { background: #3a1a00; color: #ffaa55; border: 1px solid #e67e22; }
  .c2 .dc-symptoms li::before { color: #ffaa55; }

  .c3 { border-color: #f1c40f; }
  .c3 .dc-num { background: #f1c40f; color: #000; }
  .c3 .dc-name-en { color: #ffe060; }
  .c3 .modern-tag { background: #2a1a00; color: #ffe060; border: 1px solid #f1c40f; }
  .c3 .dc-symptoms li::before { color: #ffe060; }

  .c4 { border-color: #2ecc71; }
  .c4 .dc-num { background: #2ecc71; color: #000; }
  .c4 .dc-name-en { color: #55ee99; }
  .c4 .modern-tag { background: #0a2a1a; color: #55ee99; border: 1px solid #2ecc71; }
  .c4 .dc-symptoms li::before { color: #55ee99; }

  .c5 { border-color: #3498db; }
  .c5 .dc-num { background: #3498db; color: #fff; }
  .c5 .dc-name-en { color: #66bbff; }
  .c5 .modern-tag { background: #0a1a3a; color: #66bbff; border: 1px solid #3498db; }
  .c5 .dc-symptoms li::before { color: #66bbff; }

  .c6 { border-color: #9b59b6; }
  .c6 .dc-num { background: #9b59b6; color: #fff; }
  .c6 .dc-name-en { color: #cc88ff; }
  .c6 .modern-tag { background: #1a0a2a; color: #cc88ff; border: 1px solid #9b59b6; }
  .c6 .dc-symptoms li::before { color: #cc88ff; }

  /* ===== MIDDLE COLUMN: NIDANA + DOSHA ===== */
  .col-title.blue { background: #0e2044; color: #6eb6ff; }

  .dosha-section {
    background: #0a1428;
    border-radius: 10px;
    padding: 12px;
    margin-bottom: 10px;
  }
  .dosha-header {
    font-size: 13px;
    font-weight: 900;
    letter-spacing: 1px;
    margin-bottom: 8px;
    padding-bottom: 6px;
    border-bottom: 1px solid;
    font-family: 'Noto Sans Devanagari', sans-serif;
  }
  .dosha-item {
    font-size: 11px;
    color: #b0c8e8;
    padding: 3px 0 3px 12px;
    position: relative;
    line-height: 1.4;
  }
  .dosha-item::before { content: "•"; position: absolute; left: 0; font-size: 14px; }

  .vata-sec .dosha-header { color: #6eb6ff; border-color: #3a6aaa; }
  .vata-sec .dosha-item::before { color: #6eb6ff; }
  .pitta-sec .dosha-header { color: #ff9944; border-color: #aa4400; }
  .pitta-sec .dosha-item::before { color: #ff9944; }
  .kapha-sec .dosha-header { color: #44cc88; border-color: #1a6644; }
  .kapha-sec .dosha-item::before { color: #44cc88; }
  .rakta-sec .dosha-header { color: #ff6666; border-color: #aa2222; }
  .rakta-sec .dosha-item::before { color: #ff6666; }

  /* Nidana */
  .nidana-card {
    background: #0f1b35;
    border-radius: 10px;
    padding: 12px;
    margin-bottom: 10px;
    border-top: 3px solid #c9a84c;
  }
  .nidana-title { color: #c9a84c; font-size: 12px; font-weight: 700; letter-spacing: 1px; margin-bottom: 8px; }
  .nidana-list { list-style: none; }
  .nidana-list li {
    font-size: 11px;
    color: #b0c8e8;
    padding: 4px 0 4px 16px;
    position: relative;
    border-bottom: 1px solid #1a2a40;
  }
  .nidana-list li:last-child { border-bottom: none; }
  .nidana-list li::before { content: "→"; position: absolute; left: 0; color: #c9a84c; }

  /* Pathway */
  .pathway {
    background: #060e1e;
    border: 1px solid #1e3050;
    border-radius: 10px;
    padding: 12px;
    margin-bottom: 10px;
  }
  .pathway-title { color: #a0c0e8; font-size: 11px; font-weight: 700; letter-spacing: 1px; margin-bottom: 10px; text-align: center; }
  .path-step {
    background: #0f1b35;
    border-radius: 6px;
    padding: 7px 10px;
    font-size: 10.5px;
    color: #d0e8ff;
    margin-bottom: 4px;
    border-left: 3px solid;
    position: relative;
  }
  .path-step.s1 { border-color: #e74c3c; }
  .path-step.s2 { border-color: #e67e22; }
  .path-step.s3 { border-color: #f1c40f; }
  .path-step.s4 { border-color: #2ecc71; }
  .path-step.s5 { border-color: #3498db; }
  .path-arrow { text-align: center; color: #c9a84c; font-size: 16px; margin: 1px 0; }

  /* ===== RIGHT COLUMN: CHIKITSA ===== */
  .col-title.green { background: #0a2a1a; color: #4caf50; }

  .chikitsa-card {
    background: #0a2a1a;
    border-radius: 10px;
    padding: 12px 14px;
    margin-bottom: 10px;
    border-left: 4px solid #2ecc71;
  }
  .chikitsa-title {
    color: #2ecc71;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 1px;
    margin-bottom: 8px;
    font-family: 'Noto Sans Devanagari', sans-serif;
  }
  .chikitsa-item {
    background: #061a0e;
    border-radius: 6px;
    padding: 7px 10px;
    font-size: 11px;
    color: #a0e8b8;
    margin-bottom: 5px;
    border-left: 2px solid #2ecc71;
    display: flex;
    align-items: flex-start;
    gap: 8px;
  }
  .chikitsa-item .ci-icon { font-size: 14px; min-width: 18px; }
  .chikitsa-item .ci-body { flex: 1; }
  .chikitsa-item .ci-name { font-weight: 700; font-family: 'Noto Sans Devanagari', sans-serif; font-size: 12px; }
  .chikitsa-item .ci-detail { font-size: 10px; color: #6aaa80; margin-top: 1px; }

  .modern-chikitsa-card {
    background: #0f1b35;
    border-radius: 10px;
    padding: 12px 14px;
    margin-bottom: 10px;
    border-left: 4px solid #3498db;
  }
  .mc-title { color: #3498db; font-size: 12px; font-weight: 700; letter-spacing: 1px; margin-bottom: 8px; }
  .mc-disease { margin-bottom: 10px; }
  .mc-disease-name { color: #6eb6ff; font-size: 11px; font-weight: 700; margin-bottom: 4px; border-bottom: 1px dashed #1e3a5a; padding-bottom: 3px; }
  .mc-drug {
    font-size: 10.5px;
    color: #b0c8e8;
    padding: 2px 0 2px 12px;
    position: relative;
  }
  .mc-drug::before { content: "💊"; position: absolute; left: 0; font-size: 9px; top: 2px; }

  /* ===== COMPARISON TABLE ===== */
  .compare-section {
    padding: 16px;
    border-top: 1px solid #1e2d4a;
  }
  .compare-title {
    color: #c9a84c;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 2px;
    margin-bottom: 12px;
    text-align: center;
    text-transform: uppercase;
  }
  table.compare {
    width: 100%;
    border-collapse: collapse;
    font-size: 11px;
  }
  table.compare th {
    background: #1a2a3e;
    color: #c9a84c;
    padding: 8px 12px;
    text-align: left;
    font-size: 10px;
    letter-spacing: 1px;
    text-transform: uppercase;
    border: 1px solid #1e3050;
  }
  table.compare td {
    padding: 8px 12px;
    border: 1px solid #1e3050;
    color: #b0c8e8;
    vertical-align: top;
    line-height: 1.5;
  }
  table.compare tr:nth-child(even) td { background: #0a1428; }
  table.compare td.ayur { color: #d4c080; font-family: 'Noto Sans Devanagari', sans-serif; }
  table.compare td.mod { color: #88bbff; }
  table.compare td.shloka-cell {
    font-family: 'Noto Sans Devanagari', sans-serif;
    color: #d4c080;
    font-size: 10px;
    line-height: 1.7;
  }

  /* ===== MNEMONIC ===== */
  .mnemonic-bar {
    background: linear-gradient(90deg, #1a0a3d, #0d1a4a, #1a0a3d);
    border-top: 2px solid #c9a84c;
    padding: 14px 28px;
    text-align: center;
  }
  .mnemonic-title { color: #c9a84c; font-size: 11px; font-weight: 700; letter-spacing: 2px; margin-bottom: 10px; }
  .mnemonic-pills {
    display: flex;
    justify-content: center;
    gap: 8px;
    flex-wrap: wrap;
    margin-bottom: 8px;
  }
  .m-pill {
    padding: 6px 14px;
    border-radius: 20px;
    font-size: 12px;
    font-weight: 700;
    border: 2px solid;
  }
  .mnemonic-text {
    font-family: 'Noto Sans Devanagari', sans-serif;
    color: #8ba3c7;
    font-size: 11px;
    margin-top: 6px;
  }

  /* ===== FOOTER ===== */
  .footer {
    background: #060c1a;
    border-top: 1px solid #1e2d4a;
    padding: 10px 28px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 10px;
    color: #4a6080;
  }
  .footer strong { color: #c9a84c; }

  /* Print styles */
  @media print {
    body { background: #fff; padding: 0; }
    .page { border-radius: 0; border: none; }
  }
</style>
</head>
<body>
<div class="page">

  <!-- HEADER -->
  <div class="header">
    <div class="header-left">
      <div class="header-badge">SHALAKYA TANTRA | शालाक्य तन्त्र</div>
      <div class="main-title">KAPALGATA ROGA</div>
      <div class="hindi-title">कपालगत रोग</div>
      <div class="subtitle">Diseases of the Scalp (Shira-Kapala / Keshabhumi) &nbsp;|&nbsp; 6 Classical Diseases</div>
    </div>
    <div class="header-refs">
      <span>CLASSICAL REFERENCES</span>
      अ.हृ. उत्तर. 23 (Ashtanga Hridayam Uttarasthana)<br>
      सु.चि. 26 (Sushruta Samhita Chikitsasthana)<br>
      च.चि. 26 (Charaka Samhita Chikitsasthana)<br>
      माधव निदान 58
    </div>
  </div>

  <!-- DEFINITION BAND -->
  <div class="def-band">
    <div class="label">📖 DEFINITION</div>
    <div class="text">
      <strong style="color:#fff">कपालगत रोग</strong> = Diseases occurring in the <em>Shira-Kapala</em> (skull/scalp) — the region of <em>Keshabhumi</em> (hair-bearing scalp). These are primarily disorders of the <strong>hair and scalp</strong> caused by vitiated Doshas affecting the hair follicles, scalp skin, and hair shaft.
    </div>
  </div>

  <!-- SHLOKA BAND -->
  <div class="shloka-band">
    उपशीर्षकमरुंशिकां दारुणकं च इन्द्रलुप्तं खालित्यं पालित्यं च — कपालगताः षड् रोगाः ।
    <div class="shloka-ref">षट् कपालगत रोग — अ.हृ. उत्तरस्थान 23 | Six diseases situated at Shira-Kapala</div>
  </div>

  <!-- MAIN 3-COLUMN GRID -->
  <div class="main-grid">

    <!-- LEFT: DISEASES LIST -->
    <div class="col">
      <div class="col-title" style="background:#1a0a3d; color:#c9a84c;">🔵 षट् कपालगत रोग | 6 DISEASES</div>

      <!-- 1. Upashirshaka -->
      <div class="disease-card c1">
        <div class="dc-num">01</div>
        <div class="dc-name-en">UPASHIRSHAKA</div>
        <div class="dc-name-hi">उपशीर्षक</div>
        <div class="dc-dosha">
          <span class="dosha-tag vata">वात</span>
          <span class="dosha-tag kapha">कफ</span>
        </div>
        <div class="dc-shloka">कपाले पवने दुष्टे गर्भस्थस्यापि जायते।<br>सवर्णो नीरुजः शोफः स उपशीर्षक उच्यते॥</div>
        <div class="dc-ref">अ.हृ.उ. 23/1 | Su.Ut. 16</div>
        <ul class="dc-symptoms">
          <li>Painless swelling on scalp / skull</li>
          <li>Can occur even in foetus (congenital)</li>
          <li>Same colour as skin (सवर्ण)</li>
          <li>No pain (नीरुज)</li>
        </ul>
        <span class="modern-tag">≈ Cephalhaematoma / Scalp Cyst / Dermoid Cyst</span>
      </div>

      <!-- 2. Arunshika -->
      <div class="disease-card c2">
        <div class="dc-num">02</div>
        <div class="dc-name-en">ARUNSHIKA</div>
        <div class="dc-name-hi">अरुंशिका</div>
        <div class="dc-dosha">
          <span class="dosha-tag vata">वात</span>
          <span class="dosha-tag pitta">पित्त</span>
          <span class="dosha-tag kapha">कफ</span>
        </div>
        <div class="dc-shloka">शिरः कण्डूयते तीव्रं रक्तं स्रवति चापि च।<br>पित्तोल्बणैः अरुंशिका बहुशः पिटिकाः।।</div>
        <div class="dc-ref">अ.हृ.उ. 23/2 | Su. Nidana</div>
        <ul class="dc-symptoms">
          <li>Multiple small pustules (पिटिका) on scalp</li>
          <li>Severe itching (कण्डू)</li>
          <li>Bleeding on scratching</li>
          <li>Tridoshaja predominance</li>
        </ul>
        <span class="modern-tag">≈ Folliculitis / Scalp Impetigo</span>
      </div>

      <!-- 3. Darunaka -->
      <div class="disease-card c3">
        <div class="dc-num">03</div>
        <div class="dc-name-en">DARUNAKA</div>
        <div class="dc-name-hi">दारुणक</div>
        <div class="dc-dosha">
          <span class="dosha-tag vata">वात</span>
          <span class="dosha-tag kapha">कफ</span>
        </div>
        <div class="dc-shloka">शिरः कण्डायते तीव्रमस्थीनीव च दारुणम्।<br>केशभूमिर्भवेत् रूक्षा स्फुटिता च सकण्डुका॥<br>दारुणं तद्विदुर्व्याधिं दारुणाकृतितो बुधाः।।</div>
        <div class="dc-ref">वा.उ. 23/15-16 | अ.हृ.उ. 23</div>
        <ul class="dc-symptoms">
          <li>Dry, rough, fissured scalp (रूक्ष, स्फुटिता)</li>
          <li>Intense itching (कण्डू)</li>
          <li>White scales / flakes</li>
          <li>Scalp becomes hard like wood (दारु)</li>
        </ul>
        <span class="modern-tag">≈ Dandruff / Seborrheic Dermatitis / Psoriasis</span>
      </div>

    </div><!-- end left col -->

    <!-- MIDDLE: NIDANA + DOSHA PATHOLOGY -->
    <div class="col">
      <div class="col-title blue">⚡ NIDANA & DOSHA | निदान & दोष</div>

      <!-- Dosha boxes -->
      <div class="dosha-section vata-sec">
        <div class="dosha-header">🌬️ वात दोष दुष्टि</div>
        <div class="dosha-item">Ruksha (dry) ahara-vihara</div>
        <div class="dosha-item">Causes dryness, fissures, hair loss</div>
        <div class="dosha-item">Responsible for Darunaka, Khalitya (mainly)</div>
        <div class="dosha-item">Blocks hair follicle nourishment</div>
      </div>

      <div class="dosha-section pitta-sec">
        <div class="dosha-header">🔥 पित्त दोष दुष्टि</div>
        <div class="dosha-item">Ushna (hot) ahara, anger, sun exposure</div>
        <div class="dosha-item">Causes inflammation, follicle damage</div>
        <div class="dosha-item">Main dosha in Indralupta, Palitya</div>
        <div class="dosha-item">Burns hair root → premature grey/fall</div>
      </div>

      <div class="dosha-section kapha-sec">
        <div class="dosha-header">💧 कफ दोष दुष्टि</div>
        <div class="dosha-item">Guru, snigdha ahara, day sleep</div>
        <div class="dosha-item">Blocks romakupa (hair follicle pores)</div>
        <div class="dosha-item">Causes oily scalp, blocked follicles</div>
        <div class="dosha-item">Secondary role in Indralupta</div>
      </div>

      <div class="dosha-section rakta-sec">
        <div class="dosha-header">🩸 रक्त दुष्टि</div>
        <div class="dosha-item">Vitiated Rakta reaches scalp vessels</div>
        <div class="dosha-item">Causes redness, pustules in Arunshika</div>
        <div class="dosha-item">Contributes to Indralupta with Pitta</div>
      </div>

      <!-- Samprapti pathway -->
      <div class="pathway">
        <div class="pathway-title">⬇ SAMPRAPTI PATHWAY (Indralupta)</div>
        <div class="path-step s1">Pitta vitiation in romakupa (hair follicles)</div>
        <div class="path-arrow">↓</div>
        <div class="path-step s2">Vata association → hair root loosening</div>
        <div class="path-arrow">↓</div>
        <div class="path-step s3">Hair falls off (kesha-pata)</div>
        <div class="path-arrow">↓</div>
        <div class="path-step s4">Kapha + Rakta block romakupa orifice</div>
        <div class="path-arrow">↓</div>
        <div class="path-step s5">No new hair growth → Indralupta</div>
      </div>

      <!-- Nidana Sevana -->
      <div class="nidana-card">
        <div class="nidana-title">📋 SAMANYA NIDANA (Common Causes)</div>
        <ul class="nidana-list">
          <li>Excessive exposure to dust, smoke, sun</li>
          <li>Ati-snana (excessive bathing with hot water)</li>
          <li>Diwaswapna (daytime sleeping)</li>
          <li>Mithya-ahara (improper diet)</li>
          <li>Shiro-abhighata (head trauma)</li>
          <li>Krodha-shoka (anger, grief)</li>
          <li>Ati-vyayama (excessive exercise)</li>
          <li>Viruddha ahara (incompatible food)</li>
        </ul>
      </div>

    </div><!-- end middle col -->

    <!-- RIGHT: MORE DISEASES + CHIKITSA -->
    <div class="col">
      <div class="col-title green">🌿 DISEASES 4-6 + CHIKITSA</div>

      <!-- 4. Indralupta -->
      <div class="disease-card c4">
        <div class="dc-num">04</div>
        <div class="dc-name-en">INDRALUPTA</div>
        <div class="dc-name-hi">इन्द्रलुप्त</div>
        <div class="dc-dosha">
          <span class="dosha-tag pitta">पित्त</span>
          <span class="dosha-tag vata">वात</span>
          <span class="dosha-tag kapha">कफ</span>
          <span class="dosha-tag rakta">रक्त</span>
        </div>
        <div class="dc-shloka">रोमकूपानुगं पित्तं वातेन सह मूर्च्छितम्।<br>प्रच्यावयति रोमाणि ततः श्लेष्मा सशोणितः।<br>रोमकूपान् रुणद्ध्यस्य तेनान्येषामसम्भवः॥<br>तदिन्द्रलुप्तं रुज्यां च प्राहुश्चाचेति चापरे।</div>
        <div class="dc-ref">अ.हृ.उ. 23/24-25</div>
        <ul class="dc-symptoms">
          <li>Patchy hair loss on scalp</li>
          <li>Well-defined patches (खालित्य से भेद)</li>
          <li>No regrowth due to blocked follicles</li>
          <li>Also called "Ruja" or "Chace"</li>
        </ul>
        <span class="modern-tag">≈ Alopecia Areata</span>
      </div>

      <!-- 5. Khalitya -->
      <div class="disease-card c5">
        <div class="dc-num">05</div>
        <div class="dc-name-en">KHALITYA</div>
        <div class="dc-name-hi">खालित्य</div>
        <div class="dc-dosha">
          <span class="dosha-tag vata">वात</span>
          <span class="dosha-tag pitta">पित्त</span>
          <span class="dosha-tag kapha">कफ</span>
        </div>
        <div class="dc-shloka">खलतेरपि जन्मैवं शातनं तत्र तु क्रमात्।।<br>सा वाताद्भस्मसदृशा, पित्तात्स्विन्नसिरावृता।<br>कफाद्धनत्वग्वर्णा च यथास्वं निर्दिशेत् त्वचि।।<br>दोषैः सर्वाकृतिः सर्वैः साध्या सा नखप्रभा।<br>दग्धाग्निनेव निर्लोमा सदाहा वा च जायते।।</div>
        <div class="dc-ref">अ.हृ.उ. 23 | वा.उ.</div>
        <ul class="dc-symptoms">
          <li>Gradual diffuse hair fall (शातन)</li>
          <li>Vata type: Ashy/dull scalp</li>
          <li>Pitta type: Sweating + visible veins</li>
          <li>Kapha type: Thick, discoloured skin</li>
        </ul>
        <span class="modern-tag">≈ Androgenic Alopecia / Male Pattern Baldness</span>
      </div>

      <!-- 6. Palitya -->
      <div class="disease-card c6">
        <div class="dc-num">06</div>
        <div class="dc-name-en">PALITYA</div>
        <div class="dc-name-hi">पालित्य</div>
        <div class="dc-dosha">
          <span class="dosha-tag pitta">पित्त</span>
          <span class="dosha-tag vata">वात</span>
        </div>
        <div class="dc-shloka">भ्राजकः पित्तमासाद्य वायुना केशमूलगः।<br>केशान् पाचयते तेन पालित्यं समुपैति च।।</div>
        <div class="dc-ref">च.चि. 26 | अ.हृ.उ. 23</div>
        <ul class="dc-symptoms">
          <li>Premature greying of hair</li>
          <li>Bhrajaka Pitta + Vata at hair root</li>
          <li>Pitta "cooks/burns" hair melanocytes</li>
          <li>Can be Sahaja (congenital) or Kalaja</li>
        </ul>
        <span class="modern-tag">≈ Premature Canities / Poliosis</span>
      </div>

    </div><!-- end right col -->
  </div><!-- end main grid -->

  <!-- CHIKITSA TABLE -->
  <div style="background:#080f1e; padding:16px; border-top:1px solid #1e2d4a;">
    <div style="display:grid; grid-template-columns:1fr 1fr; gap:16px;">

      <!-- Ayurvedic Treatment -->
      <div>
        <div class="col-title green" style="border-radius:8px; margin-bottom:12px; padding:8px 16px; text-align:center;">🌿 AYURVEDIC CHIKITSA | आयुर्वेदिक चिकित्सा</div>

        <div class="chikitsa-card">
          <div class="chikitsa-title">🩸 शोधन चिकित्सा (Shodhan)</div>
          <div class="chikitsa-item">
            <div class="ci-icon">🔪</div>
            <div class="ci-body">
              <div class="ci-name">सिरावेध (Siravedha)</div>
              <div class="ci-detail">Bloodletting from veins of forehead — for Darunaka, Indralupta</div>
            </div>
          </div>
          <div class="chikitsa-item">
            <div class="ci-icon">💧</div>
            <div class="ci-body">
              <div class="ci-name">नस्यकर्म (Nasya Karma)</div>
              <div class="ci-detail">Nasal instillation — Anu tailam, Shadbindu oil; clears Kapha from head</div>
            </div>
          </div>
          <div class="chikitsa-item">
            <div class="ci-icon">🫙</div>
            <div class="ci-body">
              <div class="ci-name">शिरोबस्ति (Shirobasti)</div>
              <div class="ci-detail">Retention of oil on head — for Vata-type conditions, Darunaka</div>
            </div>
          </div>
          <div class="chikitsa-item">
            <div class="ci-icon">🌿</div>
            <div class="ci-body">
              <div class="ci-name">शिरोलेप (Shirolepa)</div>
              <div class="ci-detail">Herbal paste — Bhringaraj, Amalaki, Neeli for hair growth</div>
            </div>
          </div>
        </div>

        <div class="chikitsa-card">
          <div class="chikitsa-title">💆 शमन चिकित्सा (Shaman)</div>
          <div class="chikitsa-item">
            <div class="ci-icon">🛢️</div>
            <div class="ci-body">
              <div class="ci-name">अभ्यंग (Abhyanga)</div>
              <div class="ci-detail">Oil massage — Bhringaraj taila, Neelibhringadi taila, Coconut oil</div>
            </div>
          </div>
          <div class="chikitsa-item">
            <div class="ci-icon">🌡️</div>
            <div class="ci-body">
              <div class="ci-name">शिरोधारा (Shirodhara)</div>
              <div class="ci-detail">Continuous stream of oil on forehead — Vata-Pitta pacification</div>
            </div>
          </div>
          <div class="chikitsa-item">
            <div class="ci-icon">🌱</div>
            <div class="ci-body">
              <div class="ci-name">औषध (Aushadha)</div>
              <div class="ci-detail">Bhringaraj, Amalaki, Yastimadhu, Brahmi, Neeli — internal + external</div>
            </div>
          </div>
        </div>
      </div>

      <!-- Modern Treatment -->
      <div>
        <div class="col-title" style="background:#0f1b35; color:#3498db; border-radius:8px; margin-bottom:12px; padding:8px 16px; text-align:center; font-size:11px; letter-spacing:2px; text-transform:uppercase;">💊 MODERN TREATMENT CORRELATION</div>

        <div class="modern-chikitsa-card">
          <div class="mc-title">🏥 Modern Management by Condition</div>

          <div class="mc-disease">
            <div class="mc-disease-name">Dandruff (Darunaka) — Seborrheic Dermatitis</div>
            <div class="mc-drug">Ketoconazole 2% shampoo</div>
            <div class="mc-drug">Selenium sulphide shampoo</div>
            <div class="mc-drug">Zinc pyrithione shampoo</div>
            <div class="mc-drug">Topical corticosteroids (mild)</div>
          </div>

          <div class="mc-disease">
            <div class="mc-disease-name">Alopecia Areata (Indralupta)</div>
            <div class="mc-drug">Intralesional triamcinolone acetonide</div>
            <div class="mc-drug">Topical minoxidil 5%</div>
            <div class="mc-drug">Topical immunotherapy (DPCP)</div>
            <div class="mc-drug">JAK inhibitors (Baricitinib)</div>
          </div>

          <div class="mc-disease">
            <div class="mc-disease-name">Androgenic Alopecia (Khalitya)</div>
            <div class="mc-drug">Minoxidil 5% topical (1st line)</div>
            <div class="mc-drug">Finasteride 1mg oral (males)</div>
            <div class="mc-drug">Dutasteride 0.5mg (off-label)</div>
            <div class="mc-drug">Hair transplant surgery (FUT/FUE)</div>
          </div>

          <div class="mc-disease">
            <div class="mc-disease-name">Premature Canities (Palitya)</div>
            <div class="mc-drug">Vitamin B12, D3 supplementation</div>
            <div class="mc-drug">Calcium pantothenate</div>
            <div class="mc-drug">Biotin therapy</div>
            <div class="mc-drug">Topical para-aminobenzoic acid</div>
          </div>

          <div class="mc-disease">
            <div class="mc-disease-name">Folliculitis (Arunshika)</div>
            <div class="mc-drug">Topical mupirocin / fusidic acid</div>
            <div class="mc-drug">Oral cloxacillin / flucloxacillin</div>
            <div class="mc-drug">Antifungal (if Malassezia)</div>
          </div>
        </div>
      </div>
    </div>
  </div>

  <!-- COMPARISON TABLE -->
  <div class="compare-section">
    <div class="compare-title">📊 AYURVEDA - MODERN CORRELATION TABLE | तुलनात्मक विवेचन</div>
    <table class="compare">
      <tr>
        <th style="width:5%">#</th>
        <th style="width:18%">Ayurvedic Name</th>
        <th style="width:18%">Dosha</th>
        <th style="width:24%">Key Shloka (अ.हृ.उ.23)</th>
        <th style="width:20%">Modern Equivalent</th>
        <th style="width:15%">Key Treatment</th>
      </tr>
      <tr>
        <td style="color:#ff7070; font-weight:bold;">1</td>
        <td class="ayur">उपशीर्षक<br><small>Upashirshaka</small></td>
        <td><span class="dosha-tag vata">वात</span> <span class="dosha-tag kapha">कफ</span></td>
        <td class="shloka-cell">कपाले पवने दुष्टे गर्भस्थस्यापि जायते। सवर्णो नीरुजः शोफः...</td>
        <td class="mod">Cephalhaematoma<br>Dermoid Cyst<br>Scalp Abscess</td>
        <td style="color:#a0c8a0; font-size:10px;">Lepa, surgical drainage</td>
      </tr>
      <tr>
        <td style="color:#ffaa55; font-weight:bold;">2</td>
        <td class="ayur">अरुंशिका<br><small>Arunshika</small></td>
        <td><span class="dosha-tag vata">वात</span> <span class="dosha-tag pitta">पित्त</span> <span class="dosha-tag kapha">कफ</span></td>
        <td class="shloka-cell">शिरः कण्डूयते तीव्रं रक्तं स्रवति... बहुशः पिटिकाः</td>
        <td class="mod">Folliculitis capitis<br>Scalp Impetigo</td>
        <td style="color:#a0c8a0; font-size:10px;">Antibiotics, Nasya</td>
      </tr>
      <tr>
        <td style="color:#ffe060; font-weight:bold;">3</td>
        <td class="ayur">दारुणक<br><small>Darunaka</small></td>
        <td><span class="dosha-tag vata">वात</span> <span class="dosha-tag kapha">कफ</span></td>
        <td class="shloka-cell">केशभूमिर्भवेत् रूक्षा स्फुटिता च सकण्डुका...</td>
        <td class="mod">Dandruff<br>Seborrheic Dermatitis<br>Scalp Psoriasis</td>
        <td style="color:#a0c8a0; font-size:10px;">Ketoconazole, Shirobasti</td>
      </tr>
      <tr>
        <td style="color:#55ee99; font-weight:bold;">4</td>
        <td class="ayur">इन्द्रलुप्त<br><small>Indralupta</small></td>
        <td><span class="dosha-tag pitta">पित्त</span> <span class="dosha-tag vata">वात</span> <span class="dosha-tag kapha">कफ</span> <span class="dosha-tag rakta">रक्त</span></td>
        <td class="shloka-cell">रोमकूपानुगं पित्तं वातेन सह मूर्च्छितम्। प्रच्यावयति रोमाणि...</td>
        <td class="mod">Alopecia Areata<br>Tinea Capitis</td>
        <td style="color:#a0c8a0; font-size:10px;">Corticosteroids, JAK inhibitors, Nasya</td>
      </tr>
      <tr>
        <td style="color:#66bbff; font-weight:bold;">5</td>
        <td class="ayur">खालित्य<br><small>Khalitya</small></td>
        <td><span class="dosha-tag vata">वात</span> <span class="dosha-tag pitta">पित्त</span> <span class="dosha-tag kapha">कफ</span></td>
        <td class="shloka-cell">खलतेरपि जन्मैवं शातनं तत्र तु क्रमात्। दोषैः सर्वाकृतिः...</td>
        <td class="mod">Androgenic Alopecia<br>Male Pattern Baldness</td>
        <td style="color:#a0c8a0; font-size:10px;">Minoxidil, Finasteride, Hair Tx</td>
      </tr>
      <tr>
        <td style="color:#cc88ff; font-weight:bold;">6</td>
        <td class="ayur">पालित्य<br><small>Palitya</small></td>
        <td><span class="dosha-tag pitta">पित्त</span> <span class="dosha-tag vata">वात</span></td>
        <td class="shloka-cell">भ्राजकः पित्तमासाद्य वायुना केशमूलगः। केशान् पाचयते...</td>
        <td class="mod">Premature Canities<br>Poliosis</td>
        <td style="color:#a0c8a0; font-size:10px;">B12, Biotin, Bhringaraj</td>
      </tr>
    </table>
  </div>

  <!-- MNEMONIC -->
  <div class="mnemonic-bar">
    <div class="mnemonic-title">🧠 MNEMONIC | स्मरण सूत्र — 6 KAPALGATA ROGA</div>
    <div class="mnemonic-pills">
      <span class="m-pill" style="border-color:#e74c3c; color:#ff7070; background:#1a0808;">U — Upashirshaka</span>
      <span class="m-pill" style="border-color:#e67e22; color:#ffaa55; background:#1a0e08;">A — Arunshika</span>
      <span class="m-pill" style="border-color:#f1c40f; color:#ffe060; background:#1a1608;">D — Darunaka</span>
      <span class="m-pill" style="border-color:#2ecc71; color:#55ee99; background:#081a0e;">I — Indralupta</span>
      <span class="m-pill" style="border-color:#3498db; color:#66bbff; background:#08101a;">K — Khalitya</span>
      <span class="m-pill" style="border-color:#9b59b6; color:#cc88ff; background:#100816;">P — Palitya</span>
    </div>
    <div style="color:#c9a84c; font-size:13px; font-weight:700; letter-spacing:3px; margin:6px 0;">"U A D I K P"</div>
    <div class="mnemonic-text">उपशीर्षक • अरुंशिका • दारुणक • इन्द्रलुप्त • खालित्य • पालित्य</div>
    <div style="color:#6888aa; font-size:10px; margin-top:6px;">संदर्भ: अ.हृ. उत्तरस्थान 23 | Su.Ut.16 | Ch.Chi.26 | Madhava Nidana 58</div>
  </div>

  <!-- FOOTER -->
  <div class="footer">
    <div><strong>SHALAKYA TANTRA</strong> — Visual Notes by Prof. AI | कपालगत रोग</div>
    <div>Ref: अ.हृ.उ.23 | सु.चि.26 | च.चि.26 | मा.नि.58</div>
    <div><strong>For Academic Use Only</strong></div>
  </div>

</div>
</body>
</html>
Running Command

cd /tmp/workspace/kapalgata-roga && python3 -c " import subprocess, sys # Try weasyprint first try: from weasyprint import HTML HTML(filename='kapalgata_roga_visual_notes.html').write_pdf('kapalgata_roga_visual_notes.pdf') print('PDF created with weasyprint') except Exception as e: print(f'weasyprint failed: {e}') # Try pdfkit try: import pdfkit pdfkit.from_file('kapalgata_roga_visual_notes.html', 'kapalgata_roga_visual_notes.pdf') print('PDF created with pdfkit') except Exception as e2: print(f'pdfkit failed: {e2}') "

Running Command

python3 -c " from reportlab.lib.pagesizes import A3, landscape from reportlab.pdfgen import canvas from reportlab.lib import colors from reportlab.lib.units import cm from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer, HRFlowable from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont import os print('reportlab available') print(os.listdir('/tmp/workspace/kapalgata-roga/')) "

Writing File

~/kapalgata-roga/generate_pdf.py

from reportlab.lib.pagesizes import A3, landscape, A4
from reportlab.pdfgen import canvas
from reportlab.lib import colors
from reportlab.lib.units import cm, mm
from reportlab.platypus import (SimpleDocTemplate, Table, TableStyle, Paragraph,
                                 Spacer, HRFlowable, KeepTogether, PageBreak)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
from reportlab.graphics.shapes import Drawing, Rect, String
import os

OUT = '/tmp/workspace/kapalgata-roga/kapalgata_roga_visual_notes.pdf'

# ─── Colors ────────────────────────────────────────────────────────────────────
BG_DARK     = colors.HexColor('#0d1225')
BG_DARKER   = colors.HexColor('#060c1a')
GOLD        = colors.HexColor('#c9a84c')
GOLD_LIGHT  = colors.HexColor('#f0d98a')
BLUE_DARK   = colors.HexColor('#0e2044')
BLUE_MID    = colors.HexColor('#0f1b35')
BLUE_LIGHT  = colors.HexColor('#6eb6ff')
GREEN_DARK  = colors.HexColor('#0a2a1a')
GREEN_MID   = colors.HexColor('#2ecc71')
WHITE       = colors.white
GREY        = colors.HexColor('#8ba3c7')
GREY2       = colors.HexColor('#b0c8e8')
RED         = colors.HexColor('#e74c3c')
ORANGE      = colors.HexColor('#e67e22')
YELLOW      = colors.HexColor('#f1c40f')
TEAL        = colors.HexColor('#2ecc71')
CYAN        = colors.HexColor('#3498db')
PURPLE      = colors.HexColor('#9b59b6')
DRED        = colors.HexColor('#ff7070')
DORAN       = colors.HexColor('#ffaa55')
DYELL       = colors.HexColor('#ffe060')
DTEAL       = colors.HexColor('#55ee99')
DCYAN       = colors.HexColor('#66bbff')
DPURP       = colors.HexColor('#cc88ff')
BG_VATA     = colors.HexColor('#0f1b35')
BG_PITTA    = colors.HexColor('#3a1a00')
BG_KAPHA    = colors.HexColor('#0a2a1a')
BG_RAKTA    = colors.HexColor('#3a0a0a')
SHLOKA_BG   = colors.HexColor('#060e1e')

doc = SimpleDocTemplate(
    OUT,
    pagesize=landscape(A3),
    rightMargin=12*mm, leftMargin=12*mm,
    topMargin=10*mm, bottomMargin=10*mm,
    title='Kapalgata Roga - Visual Notes',
)
W, H = landscape(A3)

# ─── Styles ────────────────────────────────────────────────────────────────────
def S(name, **kw):
    base = ParagraphStyle(name)
    for k, v in kw.items(): setattr(base, k, v)
    return base

def para(text, style):
    return Paragraph(text, style)

TITLE_S = S('title', fontSize=22, textColor=WHITE, fontName='Helvetica-Bold',
             alignment=TA_CENTER, spaceAfter=2)
HINDI_S = S('hindi', fontSize=14, textColor=GOLD, fontName='Helvetica',
             alignment=TA_CENTER, spaceAfter=2)
SUB_S   = S('sub', fontSize=9, textColor=GREY, fontName='Helvetica',
             alignment=TA_CENTER, spaceAfter=4)
BADGE_S = S('badge', fontSize=8, textColor=BG_DARK, fontName='Helvetica-Bold',
             alignment=TA_CENTER, backColor=GOLD, spaceAfter=4)
REF_S   = S('ref', fontSize=8, textColor=GREY, fontName='Helvetica', alignment=TA_RIGHT)

# Section headers
SEC_S   = S('sec', fontSize=10, textColor=GOLD, fontName='Helvetica-Bold',
             alignment=TA_CENTER, spaceAfter=4, spaceBefore=4,
             backColor=BLUE_DARK, leftIndent=4, rightIndent=4, borderPad=4)
SEC_G   = S('sec_g', fontSize=10, textColor=GREEN_MID, fontName='Helvetica-Bold',
             alignment=TA_CENTER, spaceAfter=4, spaceBefore=4,
             backColor=GREEN_DARK, leftIndent=4, rightIndent=4, borderPad=4)
SEC_B   = S('sec_b', fontSize=10, textColor=BLUE_LIGHT, fontName='Helvetica-Bold',
             alignment=TA_CENTER, spaceAfter=4, spaceBefore=4,
             backColor=BLUE_DARK, leftIndent=4, rightIndent=4, borderPad=4)

DISEASE_EN  = S('den', fontSize=11, textColor=WHITE, fontName='Helvetica-Bold', spaceAfter=1)
DISEASE_HI  = S('dhi', fontSize=10, textColor=GOLD, fontName='Helvetica', spaceAfter=3)
SHLOKA_S    = S('shloka', fontSize=8, textColor=GOLD_LIGHT, fontName='Helvetica',
                 backColor=SHLOKA_BG, leftIndent=6, rightIndent=2, spaceBefore=2,
                 spaceAfter=2, leading=13)
SREF_S      = S('sref', fontSize=7, textColor=GREY, fontName='Helvetica-Oblique', spaceAfter=3)
SYMP_S      = S('symp', fontSize=8, textColor=GREY2, fontName='Helvetica',
                 leftIndent=8, spaceAfter=1, bulletIndent=4)
MODERN_S    = S('mod', fontSize=8, textColor=DCYAN, fontName='Helvetica-Bold',
                 backColor=colors.HexColor('#0a1a3a'), spaceAfter=3,
                 leftIndent=4, borderPad=2)
BODY_S      = S('body', fontSize=8, textColor=GREY2, fontName='Helvetica',
                 spaceAfter=2, leading=12)
BOLD_S      = S('bold', fontSize=9, textColor=WHITE, fontName='Helvetica-Bold', spaceAfter=2)
DOSHA_T     = S('doshat', fontSize=9, textColor=GOLD, fontName='Helvetica-Bold',
                 spaceAfter=3, borderPad=3)
ITEM_S      = S('item', fontSize=8, textColor=GREY2, fontName='Helvetica',
                 leftIndent=10, spaceAfter=1, leading=12)
SHLOKA_T_S  = S('shlokaT', fontSize=8, textColor=GOLD_LIGHT, fontName='Helvetica', leading=13)
NIDANA_S    = S('nidana', fontSize=8, textColor=GREY2, fontName='Helvetica',
                 leftIndent=8, spaceAfter=2, leading=12)
CHIK_NAME_S = S('cname', fontSize=9, textColor=GREEN_MID, fontName='Helvetica-Bold',
                 spaceAfter=1)
CHIK_DET_S  = S('cdet', fontSize=7.5, textColor=colors.HexColor('#6aaa80'), fontName='Helvetica',
                 spaceAfter=3, leading=11)
MC_DIS_S    = S('mcdis', fontSize=8.5, textColor=BLUE_LIGHT, fontName='Helvetica-Bold',
                 spaceAfter=2, borderPad=2)
MC_DRUG_S   = S('mcdrug', fontSize=8, textColor=GREY2, fontName='Helvetica',
                 leftIndent=8, spaceAfter=1)
FOOTER_S    = S('footer', fontSize=8, textColor=GREY, fontName='Helvetica', alignment=TA_CENTER)
MNEM_S      = S('mnem', fontSize=11, textColor=WHITE, fontName='Helvetica-Bold',
                 alignment=TA_CENTER, spaceAfter=4)
MNEM_SUB_S  = S('mnemsub', fontSize=9, textColor=GOLD, fontName='Helvetica',
                 alignment=TA_CENTER, spaceAfter=2)

def cell(content, bg=BG_DARK, padding=6):
    """Wrap content in a single-cell table for background."""
    t = Table([[content]], colWidths=['100%'])
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), bg),
        ('TOPPADDING', (0,0), (-1,-1), padding),
        ('BOTTOMPADDING', (0,0), (-1,-1), padding),
        ('LEFTPADDING', (0,0), (-1,-1), padding),
        ('RIGHTPADDING', (0,0), (-1,-1), padding),
        ('ROWBACKGROUNDS', (0,0), (-1,-1), [bg]),
    ]))
    return t

def disease_block(num, name_en, name_hi, shloka, sref, symptoms, modern, border_col,
                  dosha_tags, name_col):
    items = []
    # Number badge
    num_style = S(f'num{num}', fontSize=8, textColor=WHITE, fontName='Helvetica-Bold',
                  backColor=border_col, leftIndent=2, borderPad=2)
    items.append(para(f'<b>{num:02d}</b>', num_style))

    en_style = S(f'en{num}', fontSize=11, textColor=name_col, fontName='Helvetica-Bold', spaceAfter=1)
    hi_style = S(f'hi{num}', fontSize=10, textColor=GOLD, fontName='Helvetica', spaceAfter=3)

    items.append(para(f'<b>{name_en}</b>', en_style))
    items.append(para(name_hi, hi_style))

    # Dosha tags as small text
    dosha_str = '  '.join(dosha_tags)
    dosha_style = S(f'd{num}', fontSize=7.5, textColor=GREY2, fontName='Helvetica',
                    backColor=BLUE_MID, leftIndent=2, borderPad=2, spaceAfter=3)
    items.append(para(dosha_str, dosha_style))

    # Shloka
    items.append(para(shloka, SHLOKA_S))
    items.append(para(sref, SREF_S))

    # Symptoms
    for s in symptoms:
        items.append(para(f'&#9658; {s}', SYMP_S))

    # Modern tag
    mod_s = S(f'm{num}', fontSize=8, textColor=name_col, fontName='Helvetica-Bold',
               backColor=colors.HexColor('#0a1428'), leftIndent=4, borderPad=3,
               spaceAfter=2, spaceBefore=2)
    items.append(para(f'≈ {modern}', mod_s))

    inner = Table([[item] for item in items],
                  colWidths=['100%'])
    inner.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#0f1b35')),
        ('LINEAFTER', (0,0), (0,-1), 0, colors.transparent),
        ('ROWBACKGROUNDS', (0,0), (-1,-1), [colors.HexColor('#0f1b35')]),
        ('TOPPADDING', (0,0), (-1,-1), 1),
        ('BOTTOMPADDING', (0,0), (-1,-1), 1),
        ('LEFTPADDING', (0,0), (-1,-1), 4),
        ('RIGHTPADDING', (0,0), (-1,-1), 4),
        ('LINEBEFORE', (0,0), (0,-1), 4, border_col),
        ('ROUNDEDCORNERS', [6, 6, 6, 6]),
    ]))
    return inner

def dosha_box(title, items_list, header_col, bg_col):
    rows = [[para(title, S('dh', fontSize=9, textColor=header_col,
                            fontName='Helvetica-Bold', spaceAfter=1, borderPad=2))]]
    for item in items_list:
        rows.append([para(f'• {item}',
                           S('di', fontSize=7.5, textColor=GREY2, fontName='Helvetica',
                             leftIndent=6, spaceAfter=1, leading=11))])
    t = Table(rows, colWidths=['100%'])
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), bg_col),
        ('TOPPADDING', (0,0), (-1,-1), 2),
        ('BOTTOMPADDING', (0,0), (-1,-1), 2),
        ('LEFTPADDING', (0,0), (-1,-1), 6),
        ('RIGHTPADDING', (0,0), (-1,-1), 4),
        ('LINEBELOW', (0,0), (0,0), 1, header_col),
        ('ROWBACKGROUNDS', (0,0), (-1,-1), [bg_col]),
    ]))
    return t

def chikitsa_item(icon, name, detail):
    rows = [[
        para(icon, S('icon', fontSize=12, textColor=GREEN_MID, fontName='Helvetica')),
        [para(name, CHIK_NAME_S), para(detail, CHIK_DET_S)]
    ]]
    t = Table(rows, colWidths=[18, '100%'])
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#061a0e')),
        ('VALIGN', (0,0), (-1,-1), 'TOP'),
        ('TOPPADDING', (0,0), (-1,-1), 3),
        ('BOTTOMPADDING', (0,0), (-1,-1), 3),
        ('LEFTPADDING', (0,0), (-1,-1), 4),
        ('RIGHTPADDING', (0,0), (-1,-1), 4),
        ('LINEBEFORE', (0,0), (0,-1), 2, GREEN_MID),
        ('ROWBACKGROUNDS', (0,0), (-1,-1), [colors.HexColor('#061a0e')]),
    ]))
    return t

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

# ═══════════════════════════════════════════════════════════════════════════════
# HEADER ROW
# ═══════════════════════════════════════════════════════════════════════════════
hdr_left = [
    para('<b>SHALAKYA TANTRA | शालाक्य तन्त्र</b>',
         S('b', fontSize=8, textColor=BG_DARK, fontName='Helvetica-Bold',
           alignment=TA_LEFT, backColor=GOLD, borderPad=3)),
    para('<b>KAPALGATA ROGA</b>',
         S('t', fontSize=26, textColor=WHITE, fontName='Helvetica-Bold', spaceAfter=2)),
    para('कपालगत रोग',
         S('h', fontSize=16, textColor=GOLD, fontName='Helvetica', spaceAfter=4)),
    para('Diseases of the Scalp (Shira-Kapala / Keshabhumi) | 6 Classical Diseases',
         S('s', fontSize=9, textColor=GREY, fontName='Helvetica')),
]
hdr_right = [
    para('<b>CLASSICAL REFERENCES</b>',
         S('r', fontSize=7, textColor=GOLD, fontName='Helvetica-Bold',
           alignment=TA_RIGHT, spaceAfter=3)),
    para('अ.हृ. उत्तरस्थान 23 (Ashtanga Hridayam)',
         S('r2', fontSize=8, textColor=GREY2, fontName='Helvetica', alignment=TA_RIGHT)),
    para('सु.चि. 26 (Sushruta Samhita Chikitsasthana)',
         S('r3', fontSize=8, textColor=GREY2, fontName='Helvetica', alignment=TA_RIGHT)),
    para('च.चि. 26 (Charaka Samhita Chikitsasthana)',
         S('r4', fontSize=8, textColor=GREY2, fontName='Helvetica', alignment=TA_RIGHT)),
    para('माधव निदान 58 | Madhava Nidana',
         S('r5', fontSize=8, textColor=GREY2, fontName='Helvetica', alignment=TA_RIGHT)),
]

hdr_table = Table([[hdr_left, hdr_right]], colWidths=['65%', '35%'])
hdr_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#0d1a4a')),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    ('TOPPADDING', (0,0), (-1,-1), 10),
    ('BOTTOMPADDING', (0,0), (-1,-1), 10),
    ('LEFTPADDING', (0,0), (-1,-1), 14),
    ('RIGHTPADDING', (0,0), (-1,-1), 14),
    ('LINEBELOW', (0,0), (-1,0), 3, GOLD),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [colors.HexColor('#0d1a4a')]),
]))
story.append(hdr_table)

# DEFINITION BAND
def_table = Table([[
    para('<b>DEFINITION</b>',
         S('dl', fontSize=8, textColor=GREEN_MID, fontName='Helvetica-Bold')),
    para('कपालगत रोग = Diseases occurring in <i>Shira-Kapala</i> (skull/scalp) — the region of '
         '<i>Keshabhumi</i> (hair-bearing scalp). Primarily disorders of <b>hair and scalp</b> '
         'caused by vitiated Doshas affecting hair follicles, scalp skin, and hair shaft.',
         S('db', fontSize=8.5, textColor=GREY2, fontName='Helvetica', leading=13))
]], colWidths=[80, '100%'])
def_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#1e2d0a')),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    ('TOPPADDING', (0,0), (-1,-1), 8),
    ('BOTTOMPADDING', (0,0), (-1,-1), 8),
    ('LEFTPADDING', (0,0), (0,0), 14),
    ('LEFTPADDING', (1,0), (1,0), 8),
    ('RIGHTPADDING', (0,0), (-1,-1), 8),
    ('LINEBEFORE', (0,0), (0,-1), 5, GREEN_MID),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [colors.HexColor('#1e2d0a')]),
]))
story.append(def_table)

# SHLOKA BAND
shloka_band = Table([[
    para('उपशीर्षकमरुंशिकां दारुणकं च इन्द्रलुप्तं खालित्यं पालित्यं च — कपालगताः षड् रोगाः ।\n'
         '<font size="7" color="#8ba3c7">षट् कपालगत रोग — अ.हृ. उत्तरस्थान 23 | Six diseases situated at Shira-Kapala</font>',
         S('sb', fontSize=9, textColor=GOLD_LIGHT, fontName='Helvetica', leading=15,
           leftIndent=6))
]], colWidths=['100%'])
shloka_band.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#0c1830')),
    ('LINEBEFORE', (0,0), (0,-1), 5, GOLD),
    ('TOPPADDING', (0,0), (-1,-1), 8),
    ('BOTTOMPADDING', (0,0), (-1,-1), 8),
    ('LEFTPADDING', (0,0), (-1,-1), 12),
    ('RIGHTPADDING', (0,0), (-1,-1), 8),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [colors.HexColor('#0c1830')]),
]))
story.append(shloka_band)

story.append(Spacer(1, 4))

# ═══════════════════════════════════════════════════════════════════════════════
# MAIN 3-COLUMN SECTION
# ═══════════════════════════════════════════════════════════════════════════════

# ─── LEFT: Diseases 1-3
left_items = []
left_header = Table([[para('6 KAPALGATA ROGA | षट् कपालगत रोग',
                            S('lh', fontSize=9, textColor=GOLD, fontName='Helvetica-Bold',
                              alignment=TA_CENTER))]],
                    colWidths=['100%'])
left_header.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#1a0a3d')),
    ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6),
    ('LEFTPADDING', (0,0), (-1,-1), 6), ('RIGHTPADDING', (0,0), (-1,-1), 6),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [colors.HexColor('#1a0a3d')]),
]))
left_items.append(left_header)
left_items.append(Spacer(1, 4))

left_items.append(disease_block(
    1, 'UPASHIRSHAKA', 'उपशीर्षक',
    'कपाले पवने दुष्टे गर्भस्थस्यापि जायते।\nसवर्णो नीरुजः शोफः स उपशीर्षक उच्यते॥',
    'अ.हृ.उ. 23/1 | Su.Ut. 16',
    ['Painless swelling on scalp / skull',
     'Can occur even in foetus (congenital)',
     'Same colour as skin (सवर्ण)',
     'No pain (नीरुज)'],
    'Cephalhaematoma / Scalp Cyst / Dermoid Cyst',
    RED, ['वात', 'कफ'], DRED
))
left_items.append(Spacer(1, 4))

left_items.append(disease_block(
    2, 'ARUNSHIKA', 'अरुंशिका',
    'शिरः कण्डूयते तीव्रं रक्तं स्रवति चापि च।\nपित्तोल्बणैः अरुंशिका बहुशः पिटिकाः।।',
    'अ.हृ.उ. 23/2 | Su. Nidana',
    ['Multiple small pustules (पिटिका) on scalp',
     'Severe itching (कण्डू)',
     'Bleeding on scratching',
     'Tridoshaja predominance'],
    'Folliculitis / Scalp Impetigo',
    ORANGE, ['वात', 'पित्त', 'कफ'], DORAN
))
left_items.append(Spacer(1, 4))

left_items.append(disease_block(
    3, 'DARUNAKA', 'दारुणक',
    'शिरः कण्डायते तीव्रमस्थीनीव च दारुणम्।\nकेशभूमिर्भवेत् रूक्षा स्फुटिता च सकण्डुका॥\nदारुणं तद्विदुर्व्याधिं दारुणाकृतितो बुधाः।।',
    'वा.उ. 23/15-16 | अ.हृ.उ. 23',
    ['Dry, rough, fissured scalp (रूक्ष, स्फुटिता)',
     'Intense itching (कण्डू)',
     'White scales / flakes on scalp',
     'Scalp hard like wood (दारु)'],
    'Dandruff / Seborrheic Dermatitis / Psoriasis',
    YELLOW, ['वात', 'कफ'], DYELL
))

# ─── MIDDLE: Nidana + Dosha + Samprapti
mid_items = []
mid_header = Table([[para('NIDANA & DOSHA | निदान और दोष',
                           S('mh', fontSize=9, textColor=BLUE_LIGHT, fontName='Helvetica-Bold',
                             alignment=TA_CENTER))]],
                   colWidths=['100%'])
mid_header.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), BLUE_DARK),
    ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6),
    ('LEFTPADDING', (0,0), (-1,-1), 6), ('RIGHTPADDING', (0,0), (-1,-1), 6),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [BLUE_DARK]),
]))
mid_items.append(mid_header)
mid_items.append(Spacer(1, 4))

mid_items.append(dosha_box('VATA DOSHA — वात दोष', [
    'Ruksha (dry) ahara-vihara causes dryness',
    'Hair loss, rough scalp texture',
    'Main in Darunaka, Khalitya',
    'Blocks hair follicle nourishment',
], BLUE_LIGHT, BG_VATA))
mid_items.append(Spacer(1, 3))

mid_items.append(dosha_box('PITTA DOSHA — पित्त दोष', [
    'Ushna ahara, anger, sun exposure',
    'Causes inflammation, follicle damage',
    'Main dosha in Indralupta, Palitya',
    'Burns hair root → premature grey/fall',
], colors.HexColor('#ff9944'), BG_PITTA))
mid_items.append(Spacer(1, 3))

mid_items.append(dosha_box('KAPHA DOSHA — कफ दोष', [
    'Guru, snigdha ahara, daytime sleep',
    'Blocks romakupa (hair follicle pores)',
    'Oily scalp, blocked follicles',
    'Secondary role in Indralupta',
], GREEN_MID, BG_KAPHA))
mid_items.append(Spacer(1, 3))

mid_items.append(dosha_box('RAKTA DUSHTI — रक्त दुष्टि', [
    'Vitiated Rakta reaches scalp vessels',
    'Causes redness, pustules in Arunshika',
    'Contributes to Indralupta with Pitta',
], colors.HexColor('#ff6666'), BG_RAKTA))
mid_items.append(Spacer(1, 5))

# Samprapti pathway (Indralupta)
path_title = para('SAMPRAPTI — INDRALUPTA',
                   S('pt', fontSize=8, textColor=GREY2, fontName='Helvetica-Bold',
                     alignment=TA_CENTER, backColor=SHLOKA_BG, borderPad=3))
path_rows = [
    [para('1. Pitta vitiation in Romakupa (hair follicles)',
           S('ps1', fontSize=8, textColor=DRED, fontName='Helvetica', leftIndent=6))],
    [para('        ↓', S('pa', fontSize=10, textColor=GOLD, fontName='Helvetica', alignment=TA_CENTER))],
    [para('2. Vata + Pitta → hair root loosening',
           S('ps2', fontSize=8, textColor=DORAN, fontName='Helvetica', leftIndent=6))],
    [para('        ↓', S('pa2', fontSize=10, textColor=GOLD, fontName='Helvetica', alignment=TA_CENTER))],
    [para('3. Hair falls off (केश-पात)',
           S('ps3', fontSize=8, textColor=DYELL, fontName='Helvetica', leftIndent=6))],
    [para('        ↓', S('pa3', fontSize=10, textColor=GOLD, fontName='Helvetica', alignment=TA_CENTER))],
    [para('4. Kapha + Rakta block Romakupa orifice',
           S('ps4', fontSize=8, textColor=DTEAL, fontName='Helvetica', leftIndent=6))],
    [para('        ↓', S('pa4', fontSize=10, textColor=GOLD, fontName='Helvetica', alignment=TA_CENTER))],
    [para('5. No new hair growth → INDRALUPTA',
           S('ps5', fontSize=8.5, textColor=DCYAN, fontName='Helvetica-Bold', leftIndent=6))],
]
path_table = Table(path_rows, colWidths=['100%'])
path_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#060e1e')),
    ('TOPPADDING', (0,0), (-1,-1), 2), ('BOTTOMPADDING', (0,0), (-1,-1), 2),
    ('LEFTPADDING', (0,0), (-1,-1), 4), ('RIGHTPADDING', (0,0), (-1,-1), 4),
    ('LINEBEFORE', (0,0), (0,-1), 1, GOLD),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [colors.HexColor('#060e1e')]),
]))
path_wrapper = Table([[path_title], [path_table]], colWidths=['100%'])
path_wrapper.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#060e1e')),
    ('TOPPADDING', (0,0), (-1,-1), 0), ('BOTTOMPADDING', (0,0), (-1,-1), 0),
    ('LEFTPADDING', (0,0), (-1,-1), 0), ('RIGHTPADDING', (0,0), (-1,-1), 0),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [colors.HexColor('#060e1e')]),
]))
mid_items.append(path_wrapper)
mid_items.append(Spacer(1, 5))

# Nidana list
nid_title = para('SAMANYA NIDANA — सामान्य निदान',
                  S('nt', fontSize=8, textColor=GOLD, fontName='Helvetica-Bold',
                    backColor=colors.HexColor('#1a1400'), borderPad=3))
nidanas = [
    'Excessive dust, smoke, sun exposure',
    'Ati-snana (hot water excessive bathing)',
    'Diwaswapna (day sleeping)',
    'Mithya-ahara (improper diet)',
    'Shiro-abhighata (head trauma)',
    'Krodha-shoka (anger, grief)',
    'Ati-vyayama (excessive exercise)',
    'Viruddha ahara (incompatible food)',
]
nid_rows = [[nid_title]]
for n in nidanas:
    nid_rows.append([para(f'→ {n}', NIDANA_S)])
nid_table = Table(nid_rows, colWidths=['100%'])
nid_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), BLUE_MID),
    ('TOPPADDING', (0,0), (-1,-1), 2), ('BOTTOMPADDING', (0,0), (-1,-1), 2),
    ('LEFTPADDING', (0,0), (-1,-1), 6), ('RIGHTPADDING', (0,0), (-1,-1), 4),
    ('LINEABOVE', (0,0), (-1,0), 3, GOLD),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [BLUE_MID]),
]))
mid_items.append(nid_table)

# ─── RIGHT: Diseases 4-6 + Chikitsa
right_items = []
right_header = Table([[para('DISEASES 4-6 | CHIKITSA — चिकित्सा',
                             S('rh', fontSize=9, textColor=GREEN_MID, fontName='Helvetica-Bold',
                               alignment=TA_CENTER))]],
                     colWidths=['100%'])
right_header.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), GREEN_DARK),
    ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6),
    ('LEFTPADDING', (0,0), (-1,-1), 6), ('RIGHTPADDING', (0,0), (-1,-1), 6),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [GREEN_DARK]),
]))
right_items.append(right_header)
right_items.append(Spacer(1, 4))

right_items.append(disease_block(
    4, 'INDRALUPTA', 'इन्द्रलुप्त',
    'रोमकूपानुगं पित्तं वातेन सह मूर्च्छितम्।\nप्रच्यावयति रोमाणि ततः श्लेष्मा सशोणितः।\nरोमकूपान् रुणद्ध्यस्य तेनान्येषामसम्भवः॥\nतदिन्द्रलुप्तं रुज्यां च प्राहुश्चाचेति चापरे।',
    'अ.हृ.उ. 23/24-25',
    ['Patchy hair loss on scalp',
     'Well-defined patches (खालित्य से भेद)',
     'No regrowth due to blocked follicles',
     'Also called "Ruja" or "Chace"'],
    'Alopecia Areata',
    TEAL, ['पित्त', 'वात', 'कफ', 'रक्त'], DTEAL
))
right_items.append(Spacer(1, 4))

right_items.append(disease_block(
    5, 'KHALITYA', 'खालित्य',
    'खलतेरपि जन्मैवं शातनं तत्र तु क्रमात्।।\nसा वाताद्भस्मसदृशा पित्तात्स्विन्नसिरावृता।\nकफाद्धनत्वग्वर्णा च दोषैः सर्वाकृतिः सर्वैः।\nदग्धाग्निनेव निर्लोमा सदाहा वा च जायते।।',
    'अ.हृ.उ. 23 | वा.उ.',
    ['Gradual diffuse hair fall (शातन)',
     'Vata: Ashy/dull scalp',
     'Pitta: Sweating + visible veins',
     'Kapha: Thick, discoloured skin'],
    'Androgenic Alopecia / Male Pattern Baldness',
    CYAN, ['वात', 'पित्त', 'कफ'], DCYAN
))
right_items.append(Spacer(1, 4))

right_items.append(disease_block(
    6, 'PALITYA', 'पालित्य',
    'भ्राजकः पित्तमासाद्य वायुना केशमूलगः।\nकेशान् पाचयते तेन पालित्यं समुपैति च।।',
    'च.चि. 26 | अ.हृ.उ. 23',
    ['Premature greying of hair',
     'Bhrajaka Pitta + Vata at hair root',
     'Pitta "cooks/burns" melanocytes',
     'Sahaja (congenital) or Kalaja type'],
    'Premature Canities / Poliosis',
    PURPLE, ['पित्त', 'वात'], DPURP
))
right_items.append(Spacer(1, 5))

# Chikitsa
chik_header = para('AYURVEDIC CHIKITSA | आयुर्वेदिक चिकित्सा',
                    S('ch', fontSize=8.5, textColor=GREEN_MID, fontName='Helvetica-Bold',
                      alignment=TA_CENTER, backColor=GREEN_DARK, borderPad=4))
right_items.append(chik_header)
right_items.append(Spacer(1, 3))
right_items.append(chikitsa_item('*', 'Siravedha — सिरावेध',
    'Bloodletting from forehead veins — for Darunaka, Indralupta'))
right_items.append(Spacer(1, 2))
right_items.append(chikitsa_item('*', 'Nasya Karma — नस्यकर्म',
    'Nasal instillation: Anu tailam, Shadbindu oil; clears Kapha'))
right_items.append(Spacer(1, 2))
right_items.append(chikitsa_item('*', 'Shirobasti — शिरोबस्ति',
    'Oil retention on head — Vata-type, Darunaka'))
right_items.append(Spacer(1, 2))
right_items.append(chikitsa_item('*', 'Shirolepa — शिरोलेप',
    'Herbal paste: Bhringaraj, Amalaki, Neeli'))
right_items.append(Spacer(1, 2))
right_items.append(chikitsa_item('*', 'Abhyanga — अभ्यंग',
    'Bhringaraj taila, Neelibhringadi taila, Coconut oil'))
right_items.append(Spacer(1, 2))
right_items.append(chikitsa_item('*', 'Shirodhara — शिरोधारा',
    'Continuous oil stream on forehead — Vata-Pitta pacification'))

# ASSEMBLE 3 COLUMNS
col_w = (W - 24*mm) / 3

main_left = Table([[item] for item in left_items], colWidths=['100%'])
main_left.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), BG_DARK),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [BG_DARK]),
    ('TOPPADDING', (0,0), (-1,-1), 0), ('BOTTOMPADDING', (0,0), (-1,-1), 0),
    ('LEFTPADDING', (0,0), (-1,-1), 0), ('RIGHTPADDING', (0,0), (-1,-1), 0),
]))

main_mid = Table([[item] for item in mid_items], colWidths=['100%'])
main_mid.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), BG_DARK),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [BG_DARK]),
    ('TOPPADDING', (0,0), (-1,-1), 0), ('BOTTOMPADDING', (0,0), (-1,-1), 0),
    ('LEFTPADDING', (0,0), (-1,-1), 0), ('RIGHTPADDING', (0,0), (-1,-1), 0),
]))

main_right = Table([[item] for item in right_items], colWidths=['100%'])
main_right.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), BG_DARK),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [BG_DARK]),
    ('TOPPADDING', (0,0), (-1,-1), 0), ('BOTTOMPADDING', (0,0), (-1,-1), 0),
    ('LEFTPADDING', (0,0), (-1,-1), 0), ('RIGHTPADDING', (0,0), (-1,-1), 0),
]))

three_col = Table([[main_left, main_mid, main_right]],
                  colWidths=[col_w, col_w, col_w])
three_col.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), BG_DARK),
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('TOPPADDING', (0,0), (-1,-1), 8),
    ('BOTTOMPADDING', (0,0), (-1,-1), 8),
    ('LEFTPADDING', (0,0), (-1,-1), 6),
    ('RIGHTPADDING', (0,0), (-1,-1), 6),
    ('LINEAFTER', (0,0), (1,-1), 1, colors.HexColor('#1e2d4a')),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [BG_DARK]),
]))
story.append(three_col)

# ═══════════════════════════════════════════════════════════════════════════════
# COMPARISON TABLE
# ═══════════════════════════════════════════════════════════════════════════════
story.append(Spacer(1, 4))
comp_title = para('AYURVEDA - MODERN CORRELATION | तुलनात्मक विवेचन',
                   S('ct', fontSize=10, textColor=GOLD, fontName='Helvetica-Bold',
                     alignment=TA_CENTER, backColor=BLUE_DARK, borderPad=5))
story.append(comp_title)
story.append(Spacer(1, 4))

TH = S('th', fontSize=8, textColor=GOLD, fontName='Helvetica-Bold', alignment=TA_CENTER)
TD = S('td', fontSize=8, textColor=GREY2, fontName='Helvetica', alignment=TA_LEFT, leading=11)
TS = S('ts', fontSize=7.5, textColor=GOLD_LIGHT, fontName='Helvetica', leading=12)
TM = S('tm', fontSize=8, textColor=DCYAN, fontName='Helvetica')
TK = S('tk', fontSize=8, textColor=colors.HexColor('#a0e8b8'), fontName='Helvetica')

comp_data = [
    [para('#', TH), para('Ayurvedic Name\nआयुर्वेदिक नाम', TH),
     para('Dosha\nदोष', TH), para('Key Shloka', TH),
     para('Modern Equivalent', TH), para('Key Treatment', TH)],

    [para('1', S('n1', fontSize=9, textColor=DRED, fontName='Helvetica-Bold', alignment=TA_CENTER)),
     para('उपशीर्षक\nUpashirshaka', S('a1', fontSize=8, textColor=GOLD, fontName='Helvetica')),
     para('वात + कफ', S('d1', fontSize=7.5, textColor=BLUE_LIGHT, fontName='Helvetica')),
     para('कपाले पवने दुष्टे गर्भस्थस्यापि जायते।\nसवर्णो नीरुजः शोफः...', TS),
     para('Cephalhaematoma\nDermoid Cyst\nScalp Abscess', TM),
     para('Lepa, surgical drainage', TK)],

    [para('2', S('n2', fontSize=9, textColor=DORAN, fontName='Helvetica-Bold', alignment=TA_CENTER)),
     para('अरुंशिका\nArunshika', S('a2', fontSize=8, textColor=GOLD, fontName='Helvetica')),
     para('वात + पित्त + कफ', S('d2', fontSize=7.5, textColor=BLUE_LIGHT, fontName='Helvetica')),
     para('शिरः कण्डूयते तीव्रं\nरक्तं स्रवति... बहुशः पिटिकाः', TS),
     para('Folliculitis capitis\nScalp Impetigo', TM),
     para('Antibiotics, Nasya, Lepa', TK)],

    [para('3', S('n3', fontSize=9, textColor=DYELL, fontName='Helvetica-Bold', alignment=TA_CENTER)),
     para('दारुणक\nDarunaka', S('a3', fontSize=8, textColor=GOLD, fontName='Helvetica')),
     para('वात + कफ', S('d3', fontSize=7.5, textColor=BLUE_LIGHT, fontName='Helvetica')),
     para('केशभूमिर्भवेत् रूक्षा\nस्फुटिता च सकण्डुका॥', TS),
     para('Dandruff\nSeborrheic Dermatitis\nScalp Psoriasis', TM),
     para('Ketoconazole, Shirobasti, Abhyanga', TK)],

    [para('4', S('n4', fontSize=9, textColor=DTEAL, fontName='Helvetica-Bold', alignment=TA_CENTER)),
     para('इन्द्रलुप्त\nIndralupta', S('a4', fontSize=8, textColor=GOLD, fontName='Helvetica')),
     para('पित्त+वात+कफ+रक्त', S('d4', fontSize=7.5, textColor=BLUE_LIGHT, fontName='Helvetica')),
     para('रोमकूपानुगं पित्तं\nवातेन सह मूर्च्छितम्...', TS),
     para('Alopecia Areata\nTinea Capitis', TM),
     para('Corticosteroids, JAK inhibitors, Nasya', TK)],

    [para('5', S('n5', fontSize=9, textColor=DCYAN, fontName='Helvetica-Bold', alignment=TA_CENTER)),
     para('खालित्य\nKhalitya', S('a5', fontSize=8, textColor=GOLD, fontName='Helvetica')),
     para('वात + पित्त + कफ', S('d5', fontSize=7.5, textColor=BLUE_LIGHT, fontName='Helvetica')),
     para('खलतेरपि जन्मैवं\nशातनं तत्र तु क्रमात्॥', TS),
     para('Androgenic Alopecia\nMale Pattern Baldness', TM),
     para('Minoxidil, Finasteride, Hair Transplant', TK)],

    [para('6', S('n6', fontSize=9, textColor=DPURP, fontName='Helvetica-Bold', alignment=TA_CENTER)),
     para('पालित्य\nPalitya', S('a6', fontSize=8, textColor=GOLD, fontName='Helvetica')),
     para('पित्त + वात', S('d6', fontSize=7.5, textColor=BLUE_LIGHT, fontName='Helvetica')),
     para('भ्राजकः पित्तमासाद्य\nवायुना केशमूलगः॥', TS),
     para('Premature Canities\nPoliosis', TM),
     para('B12, Biotin, Bhringaraj, Abhyanga', TK)],
]

comp_table = Table(comp_data, colWidths=[20, 90, 80, 180, 130, 150])
comp_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a2a3e')),
    ('BACKGROUND', (0,1), (-1,-1), BLUE_MID),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [BLUE_MID, colors.HexColor('#0a1428')]),
    ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#1e3050')),
    ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5),
    ('LEFTPADDING', (0,0), (-1,-1), 6), ('RIGHTPADDING', (0,0), (-1,-1), 6),
    ('ALIGN', (0,0), (0,-1), 'CENTER'),
]))
story.append(comp_table)
story.append(Spacer(1, 6))

# ═══════════════════════════════════════════════════════════════════════════════
# MNEMONIC BAR
# ═══════════════════════════════════════════════════════════════════════════════
mnem_pills = [
    ('U — Upashirshaka', DRED, colors.HexColor('#1a0808'), RED),
    ('A — Arunshika', DORAN, colors.HexColor('#1a0e08'), ORANGE),
    ('D — Darunaka', DYELL, colors.HexColor('#1a1608'), YELLOW),
    ('I — Indralupta', DTEAL, colors.HexColor('#081a0e'), TEAL),
    ('K — Khalitya', DCYAN, colors.HexColor('#08101a'), CYAN),
    ('P — Palitya', DPURP, colors.HexColor('#100816'), PURPLE),
]
pill_cells = []
for text, tc, bg, border in mnem_pills:
    ps = S(f'pill_{text[:2]}', fontSize=8.5, textColor=tc, fontName='Helvetica-Bold',
            alignment=TA_CENTER, backColor=bg, borderPad=4,
            borderColor=border, borderWidth=1)
    pill_cells.append(para(text, ps))

mnem_row = Table([pill_cells], colWidths=[None]*6)
mnem_row.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#1a0a3d')),
    ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ('LEFTPADDING', (0,0), (-1,-1), 6), ('RIGHTPADDING', (0,0), (-1,-1), 6),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [colors.HexColor('#1a0a3d')]),
]))

mnem_code = para('"U  A  D  I  K  P"',
                  S('mc', fontSize=14, textColor=GOLD, fontName='Helvetica-Bold',
                    alignment=TA_CENTER, letterSpacing=4))
mnem_hi = para('उपशीर्षक • अरुंशिका • दारुणक • इन्द्रलुप्त • खालित्य • पालित्य',
               S('mh2', fontSize=9, textColor=GOLD, fontName='Helvetica',
                 alignment=TA_CENTER))
mnem_ref = para('संदर्भ: अ.हृ. उत्तरस्थान 23 | Su.Ut.16 | Ch.Chi.26 | Madhava Nidana 58',
                S('mr', fontSize=8, textColor=GREY, fontName='Helvetica', alignment=TA_CENTER))

mnem_block = Table([
    [para('MNEMONIC | स्मरण सूत्र — 6 KAPALGATA ROGA',
          S('mt', fontSize=9, textColor=GOLD, fontName='Helvetica-Bold',
            alignment=TA_CENTER, spaceBefore=4, spaceAfter=4))],
    [mnem_row],
    [Spacer(1,4)],
    [mnem_code],
    [mnem_hi],
    [mnem_ref],
    [Spacer(1,4)],
], colWidths=['100%'])
mnem_block.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#1a0a3d')),
    ('LINEABOVE', (0,0), (-1,0), 2, GOLD),
    ('TOPPADDING', (0,0), (-1,-1), 2), ('BOTTOMPADDING', (0,0), (-1,-1), 2),
    ('LEFTPADDING', (0,0), (-1,-1), 0), ('RIGHTPADDING', (0,0), (-1,-1), 0),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [colors.HexColor('#1a0a3d')]),
]))
story.append(mnem_block)

# ═══════════════════════════════════════════════════════════════════════════════
# FOOTER
# ═══════════════════════════════════════════════════════════════════════════════
footer_data = [[
    para('<b>SHALAKYA TANTRA</b> — Visual Notes | Kapalgata Roga', FOOTER_S),
    para('Ref: अ.हृ.उ.23 | सु.चि.26 | च.चि.26 | मा.नि.58', FOOTER_S),
    para('<b>For Academic Use Only</b>', FOOTER_S),
]]
footer_table = Table(footer_data, colWidths=['33%', '34%', '33%'])
footer_table.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,-1), BG_DARKER),
    ('LINEABOVE', (0,0), (-1,0), 1, colors.HexColor('#1e2d4a')),
    ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6),
    ('LEFTPADDING', (0,0), (-1,-1), 14), ('RIGHTPADDING', (0,0), (-1,-1), 14),
    ('ROWBACKGROUNDS', (0,0), (-1,-1), [BG_DARKER]),
]))
story.append(footer_table)

# ─── PAGE BACKGROUND ────────────────────────────────────────────────────────────
def draw_bg(canvas, doc):
    canvas.saveState()
    canvas.setFillColor(BG_DARK)
    canvas.rect(0, 0, W, H, fill=1, stroke=0)
    canvas.restoreState()

doc.build(story, onFirstPage=draw_bg, onLaterPages=draw_bg)
print(f'PDF created: {OUT}')
print(f'File size: {os.path.getsize(OUT)/1024:.1f} KB')
Running Command

cd /tmp/workspace/kapalgata-roga && python3 generate_pdf.py 2>&1

Running Command

python3 -c " from reportlab.lib.pagesizes import A3, landscape, A2 W, H = landscape(A3) print(f'A3 landscape: {W:.1f} x {H:.1f} pts = {W/72*2.54:.1f} x {H/72*2.54:.1f} cm') W2, H2 = landscape(A2) print(f'A2 landscape: {W2:.1f} x {H2:.1f} pts = {W2/72*2.54:.1f} x {H2/72*2.54:.1f} cm') # Custom large page cW, cH = 1680, 1080 # pts print(f'Custom 1680x1080: {cW/72*2.54:.1f} x {cH/72*2.54:.1f} cm') "

Running Command

cd /tmp/workspace/kapalgata-roga && python3 -c " # Fix: use A2 landscape and reduce font sizes slightly import sys content = open('generate_pdf.py').read() # Change to A2 landscape content = content.replace('pagesize=landscape(A3)', 'pagesize=landscape(A2)') content = content.replace('W, H = landscape(A3)', 'W, H = landscape(A2)') # Reduce font sizes content = content.replace('fontSize=22', 'fontSize=18') content = content.replace('fontSize=26', 'fontSize=22') content = content.replace('fontSize=16', 'fontSize=14') content = content.replace('fontSize=14', 'fontSize=12') content = content.replace('fontSize=13', 'fontSize=11') content = content.replace('fontSize=11', 'fontSize=10') content = content.replace('fontSize=10,', 'fontSize=9,') content = content.replace('fontSize=9,', 'fontSize=8.5,') content = content.replace('fontSize=9)', 'fontSize=8.5)') content = content.replace('fontSize=8.5', 'fontSize=8') content = content.replace('fontSize=8,', 'fontSize=7.5,') content = content.replace('fontSize=8)', 'fontSize=7.5)') content = content.replace('fontSize=7.5,', 'fontSize=7,') content = content.replace('fontSize=7.5)', 'fontSize=7)') content = content.replace('fontSize=7,', 'fontSize=6.5,') # Save patched version with open('generate_pdf_a2.py', 'w') as f: f.write(content) print('Patched. Running...') " 2>&1 && python3 generate_pdf_a2.py 2>&1

Running Command

cd /tmp/workspace/kapalgata-roga && python3 -c " content = open('generate_pdf_a2.py').read() # Fix import content = content.replace('from reportlab.lib.pagesizes import A3, landscape, A4', 'from reportlab.lib.pagesizes import A3, A2, landscape, A4') with open('generate_pdf_a2.py', 'w') as f: f.write(content) print('Fixed import') " && python3 generate_pdf_a2.py 2>&1

Running Command

ls -lh /tmp/workspace/kapalgata-roga/

Your Kapalgata Roga Visual Notes are ready! Both a richly styled HTML and a PDF (A2 landscape) have been generated.

📥 Download Links

kapalgata roga visual notes

PDF Document · PDF

— A2 landscape PDF (best for printing / large screen)

kapalgata roga visual notes

HTML File · HTML

— Interactive HTML (open in browser for full dark-themed visual experience)

📋 What's Inside — Content Summary

🔷 Header + Definition + Shloka Band

  • Title with Devanagari, badge tag, all classical references
  • Definition of Keshabhumi / Shira-Kapala region
  • Opening master shloka with all 6 disease names

🟥 LEFT COLUMN — Diseases 1-3 (with Shlokas)

#RogaShloka SourceModern
1उपशीर्षक Upashirshakaअ.हृ.उ. 23/1Cephalhaematoma / Dermoid Cyst
2अरुंशिका Arunshikaअ.हृ.उ. 23/2Folliculitis / Scalp Impetigo
3दारुणक Darunakaवा.उ. 23/15-16Dandruff / Seborrheic Dermatitis

🟦 MIDDLE COLUMN — Nidana & Dosha

  • Vata, Pitta, Kapha, Rakta dushti boxes
  • Samprapti pathway for Indralupta (5-step chain)
  • Samanya Nidana list (8 causes)

🟩 RIGHT COLUMN — Diseases 4-6 + Chikitsa

#RogaShloka SourceModern
4इन्द्रलुप्त Indraluptaअ.हृ.उ. 23/24-25Alopecia Areata
5खालित्य Khalityaअ.हृ.उ. 23Androgenic Alopecia / MPB
6पालित्य Palityaच.चि. 26Premature Canities / Poliosis
Chikitsa: Siravedha, Nasya, Shirobasti, Shirolepa, Abhyanga, Shirodhara

📊 Correlation Table + 🧠 Mnemonic

Mnemonic: "U A D I K P"
Upashirshaka - Arunshika - Darunaka - Indralupta - Khalitya - Palitya उपशीर्षक • अरुंशिका • दारुणक • इन्द्रलुप्त • खालित्य • पालित्य

Reference: अ.हृ. उत्तरस्थान 23 | सु.चि. 26 | च.चि. 26 | माधव निदान 58
This is a shared conversation. Sign in to Orris to start your own chat.