hey...can you introduce yourself and how can i get best from you

Hey! I'm Orris, an AI assistant built to help you across a wide range of topics. Here's a quick rundown of who I am and how to get the most out of me:

What I Can Do

๐Ÿ“š Medical & Clinical Knowledge I have access to a library of authoritative medical textbooks covering pharmacology, pathology, anatomy, physiology, clinical medicine, nursing, and more. Ask me anything from drug mechanisms to diagnostic criteria.
๐Ÿ”ฌ Research & Evidence I can search PubMed for peer-reviewed studies, systematic reviews, RCTs, and current clinical guidelines - and even pull full-text papers for you.
๐ŸŒ Web Search I search the web in real time, so my answers aren't limited to training data. I can find current news, guidelines, product info, and more.
๐Ÿ“Š Taxation & Finance (India) I have specialized skills for Indian taxation - direct taxes (CA Bhanwar Borana's materials) and GST/indirect taxes (Navkar Institute materials). Great for CA/CMA exam prep.
๐Ÿ“ File Creation & Editing I can create and edit Word documents (.docx), Excel spreadsheets (.xlsx), PowerPoint presentations (.pptx), and PDFs - with proper formatting, tables, charts, and more.
๐Ÿ’ป Code & Data I can write, run, and debug code in a live sandbox environment. Python, shell scripts, data analysis, visualizations - all fair game.
๐Ÿ–ผ๏ธ Image Generation & Analysis I can generate original images/diagrams from descriptions, and analyze images you upload (OCR, visual description, medical imaging, etc.).

Tips to Get the Best From Me

TipExample
Be specific"Explain the mechanism of metformin in type 2 diabetes" beats "tell me about diabetes"
State your goal"I'm a medical student studying for finals" helps me calibrate depth
Ask for formats"Give me a comparison table" or "summarize in bullet points"
Request citations"With sources" triggers textbook/PubMed lookups
Attach filesUpload PDFs, images, spreadsheets - I can read and work with them
Ask follow-upsI remember context within our conversation, so dig deeper freely

What would you like to explore today? Whether it's a complex medical question, a study topic, a document to create, or something else entirely - I'm ready.

do you know about homeopathic materia medica yes or no

Yes.
I have solid knowledge of homeopathic materia medica from my training data โ€” covering remedies, their provings, keynote symptoms, constitutions, modalities, and clinical indications.
Some areas I can help with:
  • Remedy profiles (e.g., Sulphur, Nux Vomica, Pulsatilla, Arsenicum Album, Calcarea Carb, etc.)
  • Keynotes & characteristic symptoms
  • Miasms (Psora, Sycosis, Syphilis)
  • Repertory concepts (Kent, Boericke, Boger)
  • Materia Medica authors (Hahnemann, Kent, Boericke, Clarke, Allen, Nash)
  • Remedy comparisons & differentials
  • Potency selection & dosing principles
Go ahead and ask - what do you need?

so i want you to give me collective data from boericke and clarke materia medica for fever remedies

Asking for Preferences

sorry i forgot to tell you..i'll tell you name of the remedy ...first you will give me symptoms of differenet fever stages like chill heat sweat....then any particulars about fever...llike periodicity..concomittent..desire or any negative symptoms in fever stage and then for clinical purpose type of fever for that remedy and atblast differentiating symptom of that remedy from another.. do you understannd

Understood perfectly. Here's the exact template I'll follow for every remedy you name:

Template I'll Use

[REMEDY NAME] (Boericke + Clarke - Collective Data)

1. FEVER STAGES

๐Ÿฅถ Chill
  • Onset, time, character, location, modalities
๐Ÿ”ฅ Heat
  • Character, distribution, modalities, thirst/thirstless
๐Ÿ’ง Sweat
  • Time, character, parts affected, relief/aggravation

2. FEVER PARTICULARS

  • Periodicity - daily/tertian/quartan/irregular
  • Concomitants - symptoms accompanying fever
  • Desires/Aversions - during fever stage
  • Keynote negatives - what is absent (e.g. thirstless during heat, no sweat, etc.)

3. CLINICAL FEVER TYPES

  • e.g. Intermittent fever, Typhoid, Remittent, Septic, Hectic, Malarial, etc.

4. DIFFERENTIATING SYMPTOMS

  • Key points that separate this remedy from similar fever remedies

Ready. Give me the first remedy name and I'll get to work.

aconite napwllus

Searching the Web

Aconite Napellus fever chill heat sweat Boericke materia medica

Searching the Web

Aconite Napellus fever Clarke materia medica periodicity concomitants

Reading Web Page

http://www.homeoint.org/books/boericmm/a/acon.htm

I have solid data from both sources. Here is your complete Aconite fever profile:

ACONITUM NAPELLUS

(Boericke + Clarke - Collective Fever Data)

1. FEVER STAGES

๐Ÿฅถ CHILL

  • Onset: Sudden, violent, comes on rapidly - often after exposure to dry cold wind or sudden chilling
  • Character: Intense, shaking chill; one-sided chill possible; chilly if uncovered or touched (Boericke)
  • Concomitant in chill: Great anxiety, fear, restlessness from the very start of the chill
  • Warmth aggravates chill - warm room makes it worse (Clarke)
  • Rigors worse at night and during rest (Clarke)
  • The chill stage itself is the PRIMARY trigger - Clarke notes: "the reaction from the primary effect of chill gives the characteristic Aconite fever"

๐Ÿ”ฅ HEAT

  • Character: Dry, burning heat - skin hot and dry, NO perspiration during heat stage initially
  • Face: Red, flushed - or alternately red and pale (Allen/Boericke) - a very characteristic sign
  • Bed is intolerable during fever - patient wants to throw off covers, uncover (Clarke)
  • Thirst: INTENSE thirst for large quantities of cold water - a KEYNOTE (Boericke)
  • Mental state during heat: Intense anxiety, fear of death, restlessness, tossing about in agony - becomes intolerable towards evening and on going to sleep
  • Time of aggravation: Night, especially around midnight (Clarke)
  • Extreme sensitivity to light, sound, and all sensations including pain during heat

๐Ÿ’ง SWEAT

  • Character: Profuse, general sweat follows the heat stage
  • Sweat brings relief - once sweating begins, the fever starts to resolve
  • Sweat on affected or covered parts (Clarke)
  • The cheek lain on sweats - a peculiar Clarke symptom
  • After sweat: marked weakness and prostration

2. FEVER PARTICULARS

ParameterDetails
PeriodicityNO periodicity - Boericke explicitly states: "action is brief and shows NO periodicity" - this is a KEYNOTE NEGATIVE
OnsetAlways sudden and violent - never gradual
CausationDry cold wind, fright, checked perspiration, surgical operation, injury, exposure to very hot sun
TimeWorse at night, midnight; worse towards evening
Concomitants- Intense anxiety and fear of death - Restlessness and constant tossing - Prediction of exact hour of death - Clairvoyance / mental exaltation - Great thirst for cold water - Intolerance of pain - Sensitive to noise, light, touch
Desires in feverCold water in large quantities
ModalitiesWorse: warm room, being covered, wine/stimulants, any liquid, night, music / Better: open air, uncovering, rest (except night)

3. CLINICAL FEVER TYPES

Fever TypeDetails
Inflammatory feversFirst remedy in all acute inflammatory fevers - the "gatekeeper" remedy
Catarrhal feverAfter exposure to dry cold wind
Traumatic feverAfter injuries, operations, fright
Puerperal feverEarly stage, with intense anxiety
Remittent feverEarly stage only (Clarke's therapeutics)
Dengue feverListed by Clarke
Catheter fever / Urethral feverClarke
Sunstroke / heat feverFever from sun exposure (Clarke)
ScarlatinaInflammatory onset stage
HyperpyrexiaHigh fever with intense restlessness
NOT indicated in:Malarial fevers, typhoid (Boericke: "nearly always injurious in first stages of typhoid"), hectic fever, pyemic conditions, or any fever where pathological tissue change has already occurred

4. DIFFERENTIATING SYMPTOMS

Aconite vs. Belladonna

FeatureAconiteBelladonna
FearIntense fear of death, predicts hourNo marked fear
RestlessnessExtreme tossing, can't stay stillLess restless
ThirstIntense, for cold waterMay be thirstless or moderate
FaceRed or alternately red/paleDeep red, congested, hot
SweatProfuse sweat after heatOften dry
PupilsNormalDilated
DeliriumAnxious, fearfulWild, violent, biting
CausationCold dry wind, frightSun, heat

Aconite vs. Bryonia

FeatureAconiteBryonia
OnsetSudden, violentGradual
RestlessnessMarked, tosses aboutWants absolute rest
ThirstFrequent small sips to large gulps coldLarge quantities, infrequent
IrritabilityFrom fear/anxietyFrom being disturbed

Aconite vs. Ferrum Phos

FeatureAconiteFerrum Phos
Mental stateIntense fear, anxietyRelatively calm
StageEarly violent onsetSlow, insidious onset
PeriodicityNoneMay have some

THE MASTER KEY OF ACONITE FEVER

Sudden onset + Dry burning heat + Intense thirst for cold water + Fear of death with restlessness + After cold dry wind or fright + NO periodicity = ACONITE
If the patient is calm and patient despite fever - Aconite is NOT the remedy (Clarke's guiding principle).

Ready for your next remedy. Just name it!

Next fever remedy for detailed analysis 15 remedies for fever therapeutics..and i think your contetnt is too large for the therapeutics ...it is good for learning purpose but i think one page or slide for each remedy should be very much preferable for me

Asking for Preferences
Go ahead - type the 14 remedy names. I'll compile all 15 (including Aconite) into a PowerPoint with one slide per remedy, using the same structured format:
  1. Chill / Heat / Sweat stages
  2. Fever particulars (periodicity, concomitants, desires, keynote negatives)
  3. Clinical fever types
  4. Differentiating symptoms
Type the names whenever you're ready!

othe rthan aconite...

Please type the 14 remedy names you want covered (other than Aconite). Just list them one by one or comma-separated - whatever is easiest for you!

belladone, ferrum phos, bryonia, gelsemium, rhus tox, bapticia tincoa, eupatorium, arsenic alb, nux vomica, pulsatilla, chamomilla, hepar sulph,merc sol, phosphorus

general-purpose

Research homeopathic fever data for 7 remedies from Boericke and Clarke Materia Medica. For each remedy, extract the following specific fever information: 1. CHILL stage - onset, character, time, location, modalities 2. HEAT stage - character, thirst (present/absent, type), face, skin, modalities 3. SWEAT stage - time, character, parts, relief/aggravation 4. FEVER PARTICULARS - periodicity, concomitants (mental + physical symptoms during fever), desires/aversions, keynote negatives (what is ABSENT) 5. CLINICAL FEVER TYPES - which fevers this remedy is indicated for 6. DIFFERENTIATING SYMPTOMS - what sets this remedy apart from similar fever remedies The 7 remedies are: 1. Belladonna 2. Ferrum Phosphoricum 3. Bryonia Alba 4. Gelsemium Sempervirens 5. Rhus Toxicodendron 6. Baptisia Tinctoria 7. Eupatorium Perfoliatum Search homeoint.org for Boericke data (e.g. http://www.homeoint.org/books/boericmm/b/bell.htm for Belladonna) and Clarke data (e.g. http://www.homeoint.org/clarke/b/bell.htm). Also search web for any additional fever-specific details. Return a structured summary for each remedy with all the above sections filled in with specific, accurate details from Boericke and Clarke. Be detailed enough to fill one PowerPoint slide per remedy.

general-purpose

Research homeopathic fever data for 7 remedies from Boericke and Clarke Materia Medica. For each remedy, extract the following specific fever information: 1. CHILL stage - onset, character, time, location, modalities 2. HEAT stage - character, thirst (present/absent, type), face, skin, modalities 3. SWEAT stage - time, character, parts, relief/aggravation 4. FEVER PARTICULARS - periodicity, concomitants (mental + physical symptoms during fever), desires/aversions, keynote negatives (what is ABSENT) 5. CLINICAL FEVER TYPES - which fevers this remedy is indicated for 6. DIFFERENTIATING SYMPTOMS - what sets this remedy apart from similar fever remedies The 7 remedies are: 1. Arsenicum Album 2. Nux Vomica 3. Pulsatilla Nigricans 4. Chamomilla 5. Hepar Sulphuris Calcareum 6. Mercurius Solubilis 7. Phosphorus Search homeoint.org for Boericke data and Clarke data: - Boericke base URL: http://www.homeoint.org/books/boericmm/ - Clarke base URL: http://www.homeoint.org/clarke/ Also search the web for additional fever-specific details from both authors. Return a structured summary for each remedy with all the above sections filled in with specific, accurate details from Boericke and Clarke. Be detailed enough to fill one PowerPoint slide per remedy.

Reading Web Page

http://www.homeoint.org/books/boericmm/b/bell.htm

Reading Web Page

http://www.homeoint.org/books/boericmm/f/ferp.htm

Reading Web Page

http://www.homeoint.org/books/boericmm/b/bry.htm

Reading Web Page

http://www.homeoint.org/books/boericmm/a/ars.htm

Reading Web Page

http://www.homeoint.org/books/boericmm/n/nux-v.htm

Reading Web Page

http://www.homeoint.org/books/boericmm/p/puls.htm

Reading Web Page

http://www.homeoint.org/books/boericmm/c/cham.htm

Reading Web Page

http://www.homeoint.org/books/boericmm/g/gels.htm

Reading Web Page

http://www.homeoint.org/books/boericmm/b/bapt.htm

Searching the Web

Belladonna fever chill heat sweat Boericke materia medica homeopathy complete

Reading Web Page

http://www.homeoint.org/books/boericmm/h/hep.htm

Reading Web Page

http://www.homeoint.org/books/boericmm/m/merc.htm

Reading Web Page

http://www.homeoint.org/books/boericmm/p/phos.htm

Reading Web Page

http://www.homeoint.org/books/boericmm/a/ars.htm

Reading Web Page

http://www.homeoint.org/books/boericmm/p/puls.htm

Reading Web Page

http://www.homeoint.org/books/boericmm/h/hep.htm

Searching the Web

Belladonna fever section "no thirst" chill heat sweat Clarke homeopathic materia medica fever particulars

Searching the Web

Ferrum phosphoricum fever homeopathy Boericke Clarke chill heat sweat thirst materia medica

Searching the Web

Gelsemium fever chill heat sweat thirst "no thirst" Boericke Clarke materia medica complete

Searching the Web

Boericke materia medica Arsenicum Album fever chill heat sweat "without thirst" "periodicity" site:homeoint.org OR site:homeoint.org/books

Searching the Web

Boericke materia medica "Nux Vomica" fever "chill" "cannot get warm" "covered" sweat heat site:homeoint.org OR "boericke"

Searching the Web

Clarke materia medica Arsenicum Album fever chill heat sweat "intermittent" periodicity site:homeoint.org/clarke

Reading Web Page

https://www.materiamedica.info/en/materia-medica/william-boeโ€ฆ

Searching the Web

Rhus toxicodendron fever chill restlessness heat sweat Boericke materia medica complete fever section

Searching the Web

Eupatorium perfoliatum fever "bone pains" chill sweat thirst "vomiting of bile" Boericke materia medica

Reading Web Page

http://www.homeoint.org/clarke/a/ars.htm

Reading Web Page

http://www.homeoint.org/clarke/p/puls.htm

Reading Web Page

http://www.homeoint.org/clarke/h/hep.htm

Reading Web Page

https://www.materiamedica.info/en/materia-medica/william-boeโ€ฆ

Reading Web Page

https://www.materiamedica.info/en/materia-medica/william-boeโ€ฆ

Searching the Web

Boericke "Arsenicum Album" fever "chill" "heat" "sweat" "cold sweats" "great heat about 3 am" "without thirst" homeopathy materia medica

Searching the Web

Boericke "Nux Vomica" fever chill "cannot get warm" "covered" "external heat" sweat homeopathy materia medica complete text

Searching the Web

Clarke "Arsenicum Album" fever "27. Fever" chill heat sweat "intermittent" materia medica dictionary

Reading Web Page

https://www.materiamedica.info/en/materia-medica/john-henry-โ€ฆ

Reading Web Page

https://www.materiamedica.info/en/materia-medica/john-henry-โ€ฆ

Reading Web Page

https://www.materiamedica.info/en/materia-medica/john-henry-โ€ฆ

Reading Web Page

https://ccrhindia.ayush.gov.in/sites/default/files/2023-06/Jโ€ฆ

Searching the Web

Clarke "Nux Vomica" "27. Fever" chill "must be covered" heat sweat chilliness "intermittent" materia medica

Searching the Web

Boericke Hepar Sulphur fever "chilliness" "chill" "heat" "sweat" "without thirst" homeopathy materia medica text

Reading Web Page

https://www.materiamedica.info/en/materia-medica/john-henry-โ€ฆ

Searching the Web

Bryonia fever "thirst for large quantities" "thirst for large draughts" chill sweat Clarke homeopathy materia medica

Searching the Web

Baptisia tinctoria fever delirium confusion putrid sepsis typhoid sweat homeopathy Boericke Clarke materia medica

Reading Web Page

https://aafiyahealthcare.com/wp-content/uploads/2017/05/willโ€ฆ

Searching the Web

Boericke materia medica Mercurius Solubilis fever "chill" "heat" "sweat" "thirst" "night aggravation" complete text

Searching the Web

Boericke Phosphorus fever "chill" "heat" "sweat" "thirst" "hectic" "typhoid" full text materia medica

Searching the Web

Rhus toxicodendron fever Clarke "restlessness" "dry cough" "chill" "typhoid" "urticaria" complete fever section

Searching the Web

Ferrum phosphoricum fever Clarke "first stage" "chill" "1pm" "soft pulse" "no modalities" distinguishing from Bell Acon Gels

Reading Web Page

https://www.vithoulkas.com/learning-tools/materia-medica-claโ€ฆ

Searching the Web

Gelsemium fever Clarke materia medica "chill" "heat" "thirstless" "prostration" "dumb ague" complete fever section

Reading Web Page

https://www.materiamedica.info/en/materia-medica/william-boeโ€ฆ

Reading Web Page

https://www.materiamedica.info/en/materia-medica/william-boeโ€ฆ

Reading Web Page

https://www.materiamedica.info/en/materia-medica/william-boeโ€ฆ

Reading Web Page

https://www.materiamedica.info/en/materia-medica/william-boeโ€ฆ

Searching the Web

Boericke Chamomilla fever "chill" "heat" "sweat" "one cheek red" thirst full text materia medica

Searching the Web

Boericke "Pulsatilla" fever "chilliness" "thirstlessness" "no thirst" heat sweat "one-sided" full materia medica text

Reading Web Page

https://www.materiamedica.info/en/materia-medica/john-henry-โ€ฆ

Reading Web Page

https://www.materiamedica.info/en/materia-medica/john-henry-โ€ฆ

Reading Web Page

https://www.materiamedica.info/en/materia-medica/john-henry-โ€ฆ

Reading Web Page

https://www.materiamedica.info/en/materia-medica/john-henry-โ€ฆ

Searching the Web

Clarke "Hepar Sulphuris" OR "Hepar Sulphur" "27. Fever" chill heat sweat "profuse" materia medica fever section text

Searching the Web

Clarke Mercurius fever "27. Fever" "profuse perspiration" "night sweat" "chilliness" "chill" materia medica text

Searching the Web

Clarke Phosphorus "27. Fever" "hectic" "chill" "sweat" "thirst" "typhoid" materia medica text

Reading Web Page

https://www.materiamedica.info/en/materia-medica/john-henry-โ€ฆ

Reading Web Page

https://www.materiamedica.info/en/materia-medica/john-henry-โ€ฆ

Searching the Web

Clarke Mercurius fever section "creeping chilliness" "profuse night sweats" "shuddering" "alternately" symptoms complete text

Reading Web Page

https://homeopathybooks.in/dictionary-of-practical-materia-mโ€ฆ

Searching the Web

Clarke "Hepar Sulphuris" fever "sweating" "chilly" "perspiration" "shivering" section 27 materia medica complete

Searching the Web

Clarke Pulsatilla "27. Fever" chill heat sweat thirstless "one-sided" "4 pm" complete text materia medica

Searching the Web

Boericke Chamomilla fever section "souring perspiration" "hot sweat" "chilly" "thirst" "one cheek" "bitter" text

Searching the Web

Clarke Hepar Sulphuris fever "chilly" "perspiration" "sweat" "sour" "offensive" section 27 "Hepar sulph" text

Searching the Web

Clarke Hepar sulphuris "27 Fever" OR "section fever" "chilliness" "profuse perspiration" "sour sweat" full text materia medica vithoulkas site

Reading File
Reading File
Running Command

ls -la /tmp/workspace/ 2>/dev/null || echo "workspace not found"

Running Command

mkdir -p /tmp/workspace/homeopathy-fever-pptx

complile all in one ppt that is aesthetic yet academic suited and editabele

Writing File

~/homeopathy-fever-pptx/build_pptx.py

from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.util import Inches, Pt
import copy

# โ”€โ”€ Colour Palette โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
NAVY       = RGBColor(0x0D, 0x2B, 0x55)   # deep navy
TEAL       = RGBColor(0x1A, 0x7A, 0x8A)   # academic teal
GOLD       = RGBColor(0xD4, 0xA0, 0x17)   # warm gold accent
LIGHT_BG   = RGBColor(0xF4, 0xF7, 0xFA)   # off-white slide BG
WHITE      = RGBColor(0xFF, 0xFF, 0xFF)
DARK_TEXT  = RGBColor(0x1C, 0x1C, 0x2E)
MID_GREY   = RGBColor(0x55, 0x65, 0x78)
CHILL_COL  = RGBColor(0x1A, 0x5A, 0x9A)   # blue for chill
HEAT_COL   = RGBColor(0xC0, 0x39, 0x2B)   # red for heat
SWEAT_COL  = RGBColor(0x27, 0x7A, 0x46)   # green for sweat
PART_COL   = RGBColor(0x7D, 0x3C, 0x98)   # purple for particulars
CLIN_COL   = RGBColor(0xD4, 0x6A, 0x17)   # orange for clinical
DIFF_COL   = RGBColor(0x0D, 0x2B, 0x55)   # navy for differentials

prs = Presentation()
prs.slide_width  = Inches(13.333)
prs.slide_height = Inches(7.5)
blank = prs.slide_layouts[6]

# โ”€โ”€ helpers โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
def bg_rect(slide, x, y, w, h, color):
    from pptx.util import Inches
    shape = slide.shapes.add_shape(1, Inches(x), Inches(y), Inches(w), Inches(h))
    shape.fill.solid()
    shape.fill.fore_color.rgb = color
    shape.line.fill.background()
    return shape

def add_tb(slide, x, y, w, h, text, size, bold=False, color=DARK_TEXT,
           align=PP_ALIGN.LEFT, wrap=True, italic=False, font="Calibri"):
    tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
    tf = tb.text_frame
    tf.word_wrap = wrap
    tf.margin_left = Pt(2); tf.margin_right = Pt(2)
    tf.margin_top = Pt(1);  tf.margin_bottom = Pt(1)
    p = tf.paragraphs[0]
    p.alignment = align
    run = p.add_run()
    run.text = text
    run.font.name = font
    run.font.size = Pt(size)
    run.font.bold = bold
    run.font.italic = italic
    run.font.color.rgb = color
    return tb

def add_section_header(slide, x, y, w, label, color):
    """Coloured pill header for each section."""
    bg_rect(slide, x, y, w, 0.28, color)
    add_tb(slide, x+0.05, y, w-0.1, 0.28, label, 8, bold=True,
           color=WHITE, align=PP_ALIGN.LEFT)

def add_bullet_box(slide, x, y, w, h, lines, size=7.5, color=DARK_TEXT):
    tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
    tf = tb.text_frame
    tf.word_wrap = True
    tf.margin_left = Pt(3); tf.margin_right = Pt(2)
    tf.margin_top = Pt(1);  tf.margin_bottom = Pt(1)
    first = True
    for line in lines:
        if first:
            p = tf.paragraphs[0]; first = False
        else:
            p = tf.add_paragraph()
        p.space_before = Pt(1)
        run = p.add_run()
        run.text = line
        run.font.name = "Calibri"
        run.font.size = Pt(size)
        run.font.color.rgb = color
    return tb

def divider(slide, x, y, w, color=GOLD):
    ln = slide.shapes.add_shape(1, Inches(x), Inches(y), Inches(w), Inches(0.02))
    ln.fill.solid(); ln.fill.fore_color.rgb = color
    ln.line.fill.background()

# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# TITLE SLIDE
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
def make_title_slide(prs):
    slide = prs.slides.add_slide(blank)
    # full bg
    bg_rect(slide, 0, 0, 13.333, 7.5, NAVY)
    # gold accent bar left
    bg_rect(slide, 0, 0, 0.18, 7.5, GOLD)
    # teal band bottom
    bg_rect(slide, 0, 6.0, 13.333, 1.5, TEAL)

    add_tb(slide, 0.5, 1.2, 12.3, 1.0,
           "HOMEOPATHIC FEVER REMEDIES", 38, bold=True,
           color=WHITE, align=PP_ALIGN.CENTER, font="Calibri")
    add_tb(slide, 0.5, 2.25, 12.3, 0.6,
           "A Comprehensive Materia Medica Reference", 20,
           color=GOLD, align=PP_ALIGN.CENTER, italic=True)
    divider(slide, 1.5, 3.0, 10.333, WHITE)
    add_tb(slide, 0.5, 3.15, 12.3, 0.5,
           "Sources: Boericke's Pocket Manual  โ€ข  Clarke's Dictionary of Practical Materia Medica", 13,
           color=RGBColor(0xCC,0xDD,0xEE), align=PP_ALIGN.CENTER)

    remedies = [
        "1. Aconite Napellus", "2. Belladonna", "3. Ferrum Phosphoricum",
        "4. Bryonia Alba", "5. Gelsemium", "6. Rhus Toxicodendron",
        "7. Baptisia Tinctoria", "8. Eupatorium Perfoliatum", "9. Arsenicum Album",
        "10. Nux Vomica", "11. Pulsatilla", "12. Chamomilla",
        "13. Hepar Sulphuris", "14. Mercurius Solubilis", "15. Phosphorus"
    ]
    col1 = remedies[:8]
    col2 = remedies[8:]
    add_bullet_box(slide, 1.0, 3.8, 5.5, 3.0, col1, size=10, color=WHITE)
    add_bullet_box(slide, 7.0, 3.8, 5.5, 3.0, col2, size=10, color=WHITE)

    add_tb(slide, 0.5, 6.15, 12.3, 0.5,
           "Fever Analysis: Stages  โ€ข  Particulars  โ€ข  Clinical Types  โ€ข  Differentials", 11,
           color=WHITE, align=PP_ALIGN.CENTER)

# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# REMEDY SLIDE BUILDER
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
def make_remedy_slide(prs, num, name, latin, chill, heat, sweat, particulars, clinical, differentials, master_key):
    slide = prs.slides.add_slide(blank)

    # Background
    bg_rect(slide, 0, 0, 13.333, 7.5, LIGHT_BG)

    # โ”€โ”€ TOP HEADER BAR โ”€โ”€
    bg_rect(slide, 0, 0, 13.333, 1.0, NAVY)
    bg_rect(slide, 0, 0, 0.12, 1.0, GOLD)   # left gold strip
    # Remedy number badge
    bg_rect(slide, 0.18, 0.1, 0.55, 0.8, TEAL)
    add_tb(slide, 0.18, 0.1, 0.55, 0.8, str(num), 22, bold=True,
           color=WHITE, align=PP_ALIGN.CENTER)
    # Remedy name
    add_tb(slide, 0.82, 0.05, 8.0, 0.55, name.upper(), 22, bold=True,
           color=WHITE, align=PP_ALIGN.LEFT, font="Calibri")
    add_tb(slide, 0.82, 0.58, 6.0, 0.38, latin, 11, italic=True,
           color=GOLD, align=PP_ALIGN.LEFT)
    # Source tag top right
    add_tb(slide, 10.0, 0.1, 3.2, 0.4,
           "Boericke  โ€ข  Clarke", 9, color=RGBColor(0xAA,0xCC,0xEE),
           align=PP_ALIGN.RIGHT)
    add_tb(slide, 10.0, 0.5, 3.2, 0.35,
           "Materia Medica Reference", 8, italic=True,
           color=RGBColor(0x88,0xAA,0xCC), align=PP_ALIGN.RIGHT)

    # โ”€โ”€ ROW 1: CHILL | HEAT | SWEAT  (3 equal columns) โ”€โ”€
    col_w = 4.1
    col_gap = 0.12
    row1_y = 1.08
    row1_h = 2.18

    for i, (label, col_color, items) in enumerate([
        ("๐Ÿฅถ  CHILL STAGE", CHILL_COL, chill),
        ("๐Ÿ”ฅ  HEAT STAGE",  HEAT_COL,  heat),
        ("๐Ÿ’ง  SWEAT STAGE", SWEAT_COL, sweat),
    ]):
        cx = 0.12 + i * (col_w + col_gap)
        bg_rect(slide, cx, row1_y, col_w, row1_h, WHITE)
        # coloured top strip
        bg_rect(slide, cx, row1_y, col_w, 0.27, col_color)
        add_tb(slide, cx+0.08, row1_y, col_w-0.1, 0.27, label, 8.5,
               bold=True, color=WHITE)
        add_bullet_box(slide, cx+0.08, row1_y+0.3, col_w-0.16,
                       row1_h-0.35, items, size=7.5)

    # โ”€โ”€ ROW 2: PARTICULARS | CLINICAL | DIFFERENTIALS โ”€โ”€
    row2_y = 3.38
    row2_h = 2.35

    sections = [
        ("โšก  FEVER PARTICULARS",    PART_COL, particulars, 4.1),
        ("๐Ÿฅ  CLINICAL FEVER TYPES", CLIN_COL, clinical,    3.85),
        ("๐ŸŽฏ  DIFFERENTIATING SX",   DIFF_COL, differentials, 4.35),
    ]
    xs = [0.12, 4.35, 8.33]

    for (label, col_color, items, w), cx in zip(sections, xs):
        bg_rect(slide, cx, row2_y, w, row2_h, WHITE)
        bg_rect(slide, cx, row2_y, w, 0.27, col_color)
        add_tb(slide, cx+0.08, row2_y, w-0.1, 0.27, label, 8.5,
               bold=True, color=WHITE)
        add_bullet_box(slide, cx+0.08, row2_y+0.3, w-0.16,
                       row2_h-0.35, items, size=7.5)

    # โ”€โ”€ MASTER KEY FOOTER โ”€โ”€
    bg_rect(slide, 0, 5.85, 13.333, 0.52, NAVY)
    add_tb(slide, 0.2, 5.87, 13.0, 0.46,
           "๐Ÿ”‘  " + master_key, 8.5, bold=False,
           color=GOLD, align=PP_ALIGN.LEFT)

    # โ”€โ”€ PAGE NUMBER โ”€โ”€
    add_tb(slide, 12.5, 7.1, 0.7, 0.3, str(num), 8,
           color=MID_GREY, align=PP_ALIGN.RIGHT)

# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# REMEDY DATA
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
remedies_data = [
    dict(
        num=1, name="Aconite Napellus", latin="Aconitum napellus  (Monkshood)",
        chill=[
            "โ€ข Sudden, violent onset after dry cold wind",
            "โ€ข Intense shaking chill; chilly if uncovered/touched",
            "โ€ข Anxiety and fear from the very start of chill",
            "โ€ข Warm room aggravates chill",
            "โ€ข Rigors worse at night and during rest",
        ],
        heat=[
            "โ€ข Dry, burning heat โ€” skin hot and dry initially",
            "โ€ข Face: RED or alternately red and pale (keynote)",
            "โ€ข Bed is INTOLERABLE โ€” wants to uncover",
            "โ€ข INTENSE thirst for large quantities of cold water",
            "โ€ข Worse: night, midnight; Better: open air",
            "โ€ข Extreme sensitivity to light, sound and pain",
        ],
        sweat=[
            "โ€ข Profuse general sweat follows heat stage",
            "โ€ข Sweat RELIEVES โ€” fever begins to resolve",
            "โ€ข Sweat on affected/covered parts (Clarke)",
            "โ€ข The cheek lain on sweats โ€” peculiar sign",
            "โ€ข Marked weakness after sweat",
        ],
        particulars=[
            "Periodicity: NO periodicity (Boericke keynote)",
            "Onset: Always sudden and violent โ€” never gradual",
            "Cause: Dry cold wind, fright, checked perspiration",
            "Time: Worse night, midnight; worse toward evening",
            "Concomitants: Fear of death, predicts exact hour",
            "Clairvoyance; tossing; intolerance of pain",
            "Desire: Cold water in large quantities",
            "Negative: No periodicity; no tissue change",
        ],
        clinical=[
            "โœฆ Inflammatory fevers โ€” FIRST remedy (gatekeeper)",
            "โœฆ Catarrhal fever after dry cold wind",
            "โœฆ Traumatic fever โ€” injuries, operations, fright",
            "โœฆ Puerperal fever (early, intense anxiety)",
            "โœฆ Dengue; Catheter fever; Sunstroke",
            "โœฆ Scarlatina; Hyperpyrexia",
            "โœ— NOT: Malarial, typhoid, hectic, pyemic fevers",
            "โœ— NOT when tissue change has already occurred",
        ],
        differentials=[
            "vs. Belladonna: Acon has fear/anxiety; Bell has delirium",
            "  Bell face deep red; Acon red-pale alternating",
            "vs. Bryonia: Acon sudden; Bry gradual onset",
            "  Bry > rest; Acon restless throughout",
            "vs. Ferr-phos: Acon violent, anxious; Ferr calm",
            "  Ferr gradual, soft pulse, no modalities",
            "KEY: Sudden + dry heat + cold water thirst",
            "      + fear of death + NO periodicity = ACON",
        ],
        master_key="Sudden violent onset โ€ข Dry burning heat โ€ข Alternating red-pale face โ€ข Intense cold water thirst โ€ข Fear of death/predicts hour โ€ข Restlessness โ€ข NO periodicity"
    ),
    dict(
        num=2, name="Belladonna", latin="Atropa belladonna  (Deadly Nightshade)",
        chill=[
            "โ€ข Sudden, violent, congestive type",
            "โ€ข Shivering with yawning and stretching",
            "โ€ข ~3 PM afternoon onset; evening",
            "โ€ข Hot cheeks WITH cold extremities",
            "โ€ข Chill begins with violent frontal headache",
            "โ€ข Dilated pupils, dread of light and noise in chill",
        ],
        heat=[
            "โ€ข Burning, PUNGENT, STEAMING heat โ€” radiated at distance",
            "โ€ข Face: BRIGHT red, flushed, bloated, throbbing carotids",
            "โ€ข NO THIRST despite dry mouth (keynote negative!)",
            "โ€ข Icy cold feet WITH burning hot head",
            "โ€ข Worse: touch, jar, noise, draft, afternoon",
            "โ€ข Better: semi-erect position",
        ],
        sweat=[
            "โ€ข SWEAT ONLY ON HEAD โ€” body remains DRY (keynote!)",
            "โ€ข Copious sweat on head during night/morning",
            "โ€ข Covered parts may sweat; body dry",
            "โ€ข Head remains hot even after sweating",
            "โ€ข Sweat brings partial relief only",
        ],
        particulars=[
            "Periodicity: Quotidian/double quotidian/tertian; evening",
            "Mental: VIOLENT delirium โ€” biting, striking, screaming",
            "  Hallucinations of frightening imagery; hypersthesia",
            "Physical: Throbbing headache; cold feet/hot head",
            "  Convulsive twitchings; dry mouth WITHOUT thirst",
            "Desires: Lemon/lemonade; AVERSION to water",
            "Negatives: NO thirst; NO body sweat; NO toxaemia",
            "  NO anxiety (cf. Aconite)",
        ],
        clinical=[
            "โœฆ Scarlet fever โ€” PREMIER remedy (prophylactic + curative)",
            "โœฆ High inflammatory fever โ€” sudden onset",
            "โœฆ Meningitic fever with convulsions",
            "โœฆ Children's fevers โ€” #1 remedy (ABC: A-B-C)",
            "โœฆ Sunstroke / Hyperthermia",
            "โœฆ Septic fevers in early congestive stage",
            "โœฆ Intermittent fevers (quotidian/tertian)",
        ],
        differentials=[
            "vs. Aconite: Bell = delirium; Acon = fear/anxiety",
            "  Bell face uniformly deep red; Acon red-pale alternating",
            "vs. Ferr-phos: Ferr gradual, soft pulse; Bell sudden/violent",
            "vs. Gelsemium: Gels drowsy/dusky; Bell bright red/violent",
            "vs. Chamomilla: Cham ONE cheek red; Bell BOTH cheeks red",
            "KEY: Burning radiated heat + NO thirst + Sweat only head",
            "      + Icy feet/hot head + Violent delirium = BELL",
        ],
        master_key="Sudden pungent heat felt at a distance โ€ข NO thirst despite dry mouth โ€ข Sweat ONLY on head โ€ข Icy cold feet + burning hot head โ€ข Violent delirium โ€ข Bright red face"
    ),
    dict(
        num=3, name="Ferrum Phosphoricum", latin="Ferrum phosphoricum  (Iron Phosphate โ€” Biochemic Salt #4)",
        chill=[
            "โ€ข GRADUAL, insidious onset โ€” not sudden",
            "โ€ข Chill daily at 1 PM (specific clock time โ€” keynote)",
            "โ€ข Chilliness over whole back; palms hot",
            "โ€ข Also worse 4โ€“6 PM",
            "โ€ข Shivering without violent rigors",
        ],
        heat=[
            "โ€ข Moderate heat; NOT intense steaming like Bell",
            "โ€ข Face alternates pale THEN red (never dusky)",
            "โ€ข GREAT THIRST for much cold water (Clarke)",
            "โ€ข Thirsty even during chill โ€” paradoxical",
            "โ€ข Soft, flowing pulse (not hard bounding like Bell)",
            "โ€ข Better: cold applications; Worse: touch, motion, right side",
        ],
        sweat=[
            "โ€ข Night sweats โ€” exhausting, anaemic type",
            "โ€ข Palms hot and sweating",
            "โ€ข Profuse morning sweat with nausea (Clarke)",
            "โ€ข Little relief from sweating",
            "โ€ข Symptoms persist through sweat stage",
        ],
        particulars=[
            "Periodicity: Chill at 1 PM; worse 4โ€“6 PM",
            "  First stage of ALL inflammatory fevers",
            "Mental: PAUCITY of symptoms โ€” mild, changeable mood",
            "  Sensitivity to noise; no clear mental keynote",
            "Physical: Rapid but SOFT pulse; haemorrhages (bright red)",
            "  Hard dry cough; tonsillitis; earache",
            "Desires: Lemon/lemonade; averse to meat, milk, eggs",
            "Negative: NO anxious restlessness; NO clear modalities",
        ],
        clinical=[
            "โœฆ FIRST STAGE of ALL inflammatory/catarrhal fevers",
            "โœฆ Before localisation/exudation sets in",
            "โœฆ Bronchitis of young children (first stage)",
            "โœฆ Anaemic/constitutionally weak subjects",
            "โœฆ Pneumonia first stage (with haemoptysis)",
            "โœฆ Rheumatic fever first stage",
            "โœฆ Congestion fevers from sun/mechanical injuries",
            "Use when NO clear indicating symptoms yet",
        ],
        differentials=[
            "vs. Aconite: Acon violent/anxious/sudden; Ferr gradual/calm",
            "vs. Belladonna: Bell hard bounding pulse + delirium; Ferr soft pulse",
            "vs. Gelsemium: Gels adynamic/dusky; Ferr flushed (never dusky)",
            "Ferr โ†’ Bell when symptoms become more violent/definite",
            "Ferr โ†’ Gels when more adynamic/prostrated",
            "KEY: First-stage remedy โ€ข Gradual onset โ€ข 1 PM chill",
            "      โ€ข Soft pulse โ€ข No clear modalities = FERR-PHOS",
        ],
        master_key="FIRST STAGE remedy โ€ข Gradual onset โ€ข Chill at 1 PM โ€ข Soft flowing pulse โ€ข NO anxious restlessness โ€ข NO clear modalities โ€” prescribed when symptoms undeclared"
    ),
    dict(
        num=4, name="Bryonia Alba", latin="Bryonia alba  (White Bryony)",
        chill=[
            "โ€ข Gradual, slow development; preceded by vertigo",
            "โ€ข Chilliness in evenings; worse 3โ€“4 PM",
            "โ€ข Dry cough WITH STITCHES during chill",
            "โ€ข Chilliness in room > open air (wants outside)",
            "โ€ข Heat in head/red face during chill stage",
        ],
        heat=[
            "โ€ข Dry, burning internal heat โ€” blood burning in veins",
            "โ€ข GREAT THIRST โ€” large quantities at LONG INTERVALS",
            "โ€ข Wants cold water only; averse warm drinks",
            "โ€ข Pulse: full, hard, tense and quick",
            "โ€ข Worse: ANY motion, warmth, morning, eating",
            "โ€ข Better: lying on PAINFUL SIDE, pressure, rest, cold",
        ],
        sweat=[
            "โ€ข SOUR-smelling, profuse perspiration",
            "โ€ข Cold sweat on forehead and head",
            "โ€ข Sweat from least exertion/motion",
            "โ€ข Even sweating is WORSE by motion",
            "โ€ข Oily; eventually brings relief",
        ],
        particulars=[
            "Periodicity: Tertian/quotidian; gastro-hepatic complications",
            "Mental: Talks BUSINESS in delirium โ€” wants to go HOME",
            "  Irritable; refuses to be disturbed/spoken to",
            "Physical: DRYNESS everywhere โ€” lips cracked, tongue dry",
            "  CONSTIPATION with dry hard stool (not diarrhoea!)",
            "  Stitching pains in chest/pleura; hepatic congestion",
            "Desires: Cold water (large amounts, infrequently)",
            "Negatives: NO violent delirium; NO rest relieves motion",
        ],
        clinical=[
            "โœฆ Rheumatic fever with gastro-hepatic complications",
            "โœฆ Typhoid fever โ€” early, with constipation/gastric sx",
            "โœฆ Pleuritic / Pneumonic fever โ€” stitching chest pains",
            "โœฆ Bilious fever โ€” bitter taste, constipation",
            "โœฆ Milk fever post-partum (hot, hard, engorged breasts)",
            "โœฆ Yellow fever (Clarke)",
            "โœฆ Gastric fever with hepatic congestion",
        ],
        differentials=[
            "vs. Gelsemium: Gels NO thirst + prostration + spinal chills",
            "  Bry GREAT thirst + dryness + motion aggravation",
            "vs. Rhus-tox: EXACT OPPOSITE modalities!",
            "  Bry: < motion, > rest  |  Rhus: < rest, > motion",
            "  (Bry and Rhus = complementary pair in fever)",
            "vs. Arsenicum: Bry thirsty big gulps; Ars sips frequently",
            "KEY: Greatest thirst MM + Stillness + Dryness",
            "      + Constipation + Business delirium = BRY",
        ],
        master_key="GREATEST thirst โ€” large quantities, long intervals โ€ข Absolute desire for rest (any motion aggravates ALL symptoms) โ€ข Dryness everywhere โ€ข Constipation โ€ข Business delirium"
    ),
    dict(
        num=5, name="Gelsemium Sempervirens", latin="Gelsemium sempervirens  (Yellow Jasmine)",
        chill=[
            "โ€ข Gradual, insidious; slow onset over days",
            "โ€ข SPINAL CHILLS โ€” wave-like, sacrum โ†’ occiput (keynote)",
            "โ€ข Trembling; wants to be HELD (shakes so much)",
            "โ€ข Worse: damp/foggy weather, before thunderstorm",
            "โ€ข Worse: 10 AM; from emotion/bad news",
            "โ€ข Better: profuse urination, open air",
        ],
        heat=[
            "โ€ข Moderate heat; DROWSINESS predominates",
            "โ€ข NO THIRST โ€” thirstless, prostrated (cardinal keynote)",
            "โ€ข Face: full, dusky-red, expressionless (not bright red)",
            "โ€ข Chin trembles; great muscular weakness",
            "โ€ข Slow, full, soft, compressible pulse",
            "โ€ข Better: profuse urination (relieves headache uniquely)",
        ],
        sweat=[
            "โ€ข Heat and sweat stages long and exhausting",
            "โ€ข PROFUSE URINATION may SUBSTITUTE for sweat",
            "โ€ข Urination relieves headache โ€” unique keynote",
            "โ€ข Sweating is exhausting; not necessarily profuse",
            "โ€ข General fatigue after slightest exertion",
        ],
        particulars=[
            "Periodicity: Dumb ague (no clear periodicity); bilious remittent",
            "Mental: 4 Ds โ€” Dullness, Drowsiness, Dizziness, Drooping",
            "  Profound APATHY โ€” wants to be left alone",
            "  Emotional CAUSE triggers illness (fright, bad news)",
            "  Falls asleep WHILE being addressed",
            "Physical: Great muscular weakness; trembling; heavy head/limbs",
            "  Diplopia; band-like headache; ptosis of eyelids",
            "Negatives: NO thirst; NO anxiety/fear; NO violent delirium",
        ],
        clinical=[
            "โœฆ INFLUENZA โ€” #1 remedy (successful in 1918 pandemic)",
            "โœฆ Malarial / bilious remittent fever โ€” dumb ague",
            "โœฆ Typhoid fever โ€” stuporous/adynamic stage",
            "โœฆ Scarlet fever with stupor and flushed face",
            "โœฆ Measles โ€” brings out eruption; catarrhal symptoms",
            "โœฆ Nervous/anticipatory fever โ€” from fright, emotion",
            "โœฆ Cerebro-spinal fever โ€” muscular weakness/rigidity",
        ],
        differentials=[
            "vs. Belladonna: Bell burning/bright red/delirium; Gels drowsy/dusky",
            "vs. Bryonia: Bry great thirst + dryness; Gels no thirst + weakness",
            "vs. Ferr-phos: Ferr first stage/mild; Gels adynamic/prostrated",
            "vs. Baptisia: Bapt fetid secretions + split personality; Gels just weak",
            "vs. Eupatorium: Eup intense bone pain + thirst; Gels no thirst + flaccid",
            "KEY: 4 Ds + Spinal chills + NO thirst + Trembling",
            "      + Urination relieves headache = GELS",
        ],
        master_key="4 Ds: Dullness + Drowsiness + Dizziness + Drooping eyelids โ€ข Spinal wave chills (sacrumโ†’occiput) โ€ข NO thirst โ€ข Wants to be held โ€ข Urination relieves headache"
    ),
    dict(
        num=6, name="Rhus Toxicodendron", latin="Rhus toxicodendron  (Poison Ivy)",
        chill=[
            "โ€ข Evening onset; as if dashed with ice-cold water",
            "โ€ข DRY TEASING COUGH during chill (not during heat!)",
            "โ€ข Chill begins in BACK or right thigh โ†’ spreads",
            "โ€ข Great bodily RESTLESSNESS with chill",
            "โ€ข Chill INCREASES on drinking (cold water aggravates)",
            "โ€ข Worse: at night; 3 AM; at rest",
        ],
        heat=[
            "โ€ข Heat as if hot water thrown over body",
            "โ€ข Adynamic; trembling; restless during heat",
            "โ€ข THIRST โ€” especially for COLD MILK at night (keynote)",
            "โ€ข Face: livid during heat; circumscribed cheek redness",
            "โ€ข URTICARIA breaks out over body during heat stage",
            "โ€ข Better: warmth, dry weather, continued gentle motion",
        ],
        sweat=[
            "โ€ข Profuse, SOUR-smelling sweat toward 3โ€“4 AM",
            "โ€ข General sweat; NOT on face (characteristic!)",
            "โ€ข Sweat RELIEVES โ€” heat โ†’ sweat = amelioration",
            "โ€ข Sour, morning perspiration",
            "โ€ข Occurs during heat then persists after",
        ],
        particulars=[
            "Periodicity: Tertian/quotidian/intermittent โ€” marked adynamia",
            "Mental: Great RESTLESSNESS โ€” must constantly change position",
            "  Restlessness from PHYSICAL DISCOMFORT (not anxiety)",
            "  Weeping without cause; anxiety at night; superstitious",
            "Physical: TRIANGULAR RED TIP of tongue (typhoid keynote!)",
            "  Stiffness: < first motion, > continued motion",
            "  Sordes on teeth; bone/muscle soreness; urticaria",
            "Desires: Cold milk at night; warm drinks generally",
        ],
        clinical=[
            "โœฆ TYPHOID fever โ€” restless, triangular red tongue, sordes",
            "โœฆ Intermittent/malarial fever โ€” tertian; urticaria in heat",
            "โœฆ INFLUENZA with stiffness, soreness, bone aches",
            "โœฆ Rheumatic fever โ€” stiffness + restlessness",
            "โœฆ Septic/adynamic fevers with trembling",
            "โœฆ Scarlet fever with erysipelas-like skin",
            "โœฆ Meningitis in exanthematous fevers",
        ],
        differentials=[
            "vs. Bryonia: EXACT OPPOSITE modalities!",
            "  Bry: < motion, > rest  |  Rhus: < rest, > motion",
            "vs. Arsenicum: Both restless; Ars = anxiety-driven;",
            "  Rhus = physical discomfort-driven; Ars has burning",
            "vs. Gelsemium: Gels exhausted/still; Rhus must move",
            "vs. Baptisia: Both typhoid; Bapt fetid + split self;",
            "  Rhus restless + triangular red tongue",
            "KEY: Urticaria in heat + Dry cough in chill + Triangle tongue",
        ],
        master_key="Restlessness from physical discomfort โ€ข Urticaria during heat stage โ€ข Dry teasing cough during CHILL โ€ข Triangular red tip of tongue โ€ข Sour morning sweat relieves โ€ข < rest, > motion"
    ),
    dict(
        num=7, name="Baptisia Tinctoria", latin="Baptisia tinctoria  (Wild Indigo)",
        chill=[
            "โ€ข Gradual progression into septic state",
            "โ€ข Chill at ~11 AM (Boericke specific time)",
            "โ€ข Chills with rheumatic soreness all over body",
            "โ€ข Chills over back and lower limbs",
            "โ€ข 3 AM: chills with flashes of heat",
        ],
        heat=[
            "โ€ข Face: DARK, BESOTTED, DUSKY โ€” drunken appearance",
            "โ€ข Dark reddish-purple; expressionless look",
            "โ€ข Whole surface hot and dry; livid spots on body",
            "โ€ข Thirst present; offensive mouth",
            "โ€ข Worse: humid heat, fog, indoors",
            "โ€ข Better: open air",
        ],
        sweat=[
            "โ€ข FETID, OFFENSIVE sweat (all secretions offensive)",
            "โ€ข Critical sweat โ€” forehead and face (typhus)",
            "โ€ข Sweat BREAKS OUT and RELIEVES in typhus",
            "โ€ข General fetid perspiration",
            "โ€ข Rapid exhaustion after sweating",
        ],
        particulars=[
            "Periodicity: Continuous/remittent; rapid descent to sepsis",
            "Mental: ILLUSION OF DIVIDED PERSONALITY (pathognomonic!)",
            "  'I am in two pieces, cannot find my parts'",
            "  Falls asleep MID-SENTENCE while answering",
            "  Muttering delirium; perfect indifference; stupor",
            "Physical: ALL SECRETIONS OFFENSIVE (breath, sweat, stool, urine)",
            "  PAINLESS prostration; decubitus forms rapidly",
            "  Can only swallow LIQUIDS; aversion to food",
        ],
        clinical=[
            "โœฆ TYPHOID fever โ€” #1 remedy (besotted, fetid, dissociation)",
            "โœฆ Typhus fever โ€” nervous symptoms predominate early",
            "โœฆ Shipboard/epidemic fever from overcrowding",
            "โœฆ Septicaemia โ€” blood poisoning, septic fevers",
            "โœฆ Influenza โ€” epidemic, extreme prostration + fetid secretions",
            "โœฆ Malarial poisoning โ€” adynamic type",
            "โœฆ Relapsing fever",
        ],
        differentials=[
            "vs. Arnica: Both bruised soreness; Bapt more putrid/confused;",
            "  Arn patients DENY being sick; Bapt dissociates",
            "vs. Rhus-tox: Both typhoid; Rhus restless + triangle tongue;",
            "  Bapt stuporous + fetid + illusion of duality",
            "vs. Gelsemium: Gels muscle weakness/trembling; Bapt putrid + split",
            "vs. Muriatic Acid: Both typhoid stupor; MurAc more extreme prostration",
            "KEY: Besotted face + ALL secretions fetid + Divided self",
            "      + Falls asleep mid-sentence = BAPT",
        ],
        master_key="'Besotted' drunken expression โ€ข ALL secretions OFFENSIVE โ€ข Illusion of divided personality โ€ข Falls asleep mid-sentence โ€ข Painless prostration โ€ข Rapid putrefaction tendency"
    ),
    dict(
        num=8, name="Eupatorium Perfoliatum", latin="Eupatorium perfoliatum  (Boneset / Thoroughwort)",
        chill=[
            "โ€ข Chill at 7โ€“9 AM (specific clock time โ€” keynote)",
            "โ€ข THIRST BEFORE CHILL โ€” patient knows it is coming",
            "โ€ข Cold water HASTENS/WORSENS chill (paradoxical!)",
            "โ€ข Intense BONE ACHING with moaning during chill",
            "โ€ข Nausea and vomiting from least motion in chill",
            "โ€ข More shivering than degree of coldness warrants",
        ],
        heat=[
            "โ€ข Heat with throbbing headache; nausea + vomiting of bile",
            "โ€ข THIRST THROUGHOUT โ€” before, during, and after chill",
            "โ€ข Insatiable thirst; drinks cold water (worsens chill)",
            "โ€ข Face flushed; yellow tinge in bilious cases",
            "โ€ข Jaundiced tinge in liver/bilious involvement",
            "โ€ข Better: conversation; getting on hands and knees",
        ],
        sweat=[
            "โ€ข Perspiration RELIEVES ALL symptoms EXCEPT headache",
            "โ€ข Headache persists through sweat (unique keynote!)",
            "โ€ข Nocturnal perspiration; coldness during sweat",
            "โ€ข General perspiration after heat stage",
            "โ€ข Cold water before chill doesn't help and hastens chill",
        ],
        particulars=[
            "Periodicity: MARKED โ€” tertian/quotidian; 3rd and 7th day headache",
            "  Paroxysm begins 7โ€“9 AM; anticipates",
            "Mental: Restlessness; moaning; anxiety during fever",
            "  No specific mental keynotes beyond suffering",
            "Physical: BONE PAINS as if BONES WOULD BREAK โ€” most extreme in MM",
            "  Soreness of flesh + ALL bones; vomiting of bile at chill's close",
            "  Throbbing headache all stages; soreness of eyeballs",
            "Negatives: Sweat does NOT relieve headache; cold water worsens",
        ],
        clinical=[
            "โœฆ INTERMITTENT MALARIAL fever โ€” bone-aching malaria",
            "โœฆ DENGUE fever / Breakbone fever โ€” extreme bone pain",
            "โœฆ INFLUENZA with soreness of muscles AND bones",
            "โœฆ Bilious remittent fever โ€” vomiting of bile",
            "โœฆ Typhoid fever โ€” gastro-hepatic type",
            "โœฆ Old chronic bilious intermittents with cachexia",
        ],
        differentials=[
            "vs. China: Both periodicity + bone aching; China debilitated",
            "  from fluid loss (painless); Eup-per most intense bone pain in MM",
            "vs. Bryonia: Both thirst + liver; Bry < motion; Eup no relief from rest/motion",
            "vs. Gelsemium: Both influenza; Gels NO thirst + weakness + spinal chills;",
            "  Eup-per INTENSE thirst + bone-breaking pain + 7โ€“9 AM chill",
            "vs. Arnica: Both bruised/sore; Arn superficial soreness; Eup deep bone pain",
            "KEY: Breakbone pains + Thirst BEFORE chill + Cold water worsens chill",
            "      + Sweat relieves ALL EXCEPT headache = EUP-PER",
        ],
        master_key="Breakbone pains โ€” MOST intense bone pain in Materia Medica โ€ข Thirst BEFORE chill (knows chill is coming) โ€ข Cold water WORSENS chill โ€ข Sweat relieves everything EXCEPT headache โ€ข 7โ€“9 AM chill"
    ),
    dict(
        num=9, name="Arsenicum Album", latin="Arsenicum album  (Arsenic Trioxide)",
        chill=[
            "โ€ข Anticipates โ€” comes EARLIER each paroxysm",
            "โ€ข After midnight (1โ€“2 AM); periodic โ€” every 3โ€“4 days",
            "โ€ข Intense, persistent chilliness; icy cold body",
            "โ€ข Worse: cold, cold drinks, cold air, seashore",
            "โ€ข BETTER: warmth (loves warmth in ALL stages)",
            "โ€ข Cold, viscid sweat WITH chill",
        ],
        heat=[
            "โ€ข Great burning heat principally at NIGHT (3 AM)",
            "โ€ข THIRST: small sips, FREQUENTLY repeated (keynote!)",
            "โ€ข Wants cold water but rejects it once it warms",
            "โ€ข Face: puffed, earthy, sunken; anxious expression",
            "โ€ข Internal burning; better from external warmth",
            "โ€ข Worse: uncovering, cold, after midnight",
        ],
        sweat=[
            "โ€ข Cold, CLAMMY, VISCID sweats (pathognomonic quality)",
            "โ€ข Imparts YELLOW colour to linen",
            "โ€ข Offensive or sour-smelling; night and morning",
            "โ€ข Sweat does NOT RELIEVE โ€” all symptoms persist",
            "โ€ข Unquenchable thirst DURING perspiration",
            "โ€ข Trembling of limbs and buzzing in ears during sweat",
        ],
        particulars=[
            "Periodicity: GREAT periodic โ€” daily, 3rdโ€“4th day, fortnightly, 6 weeks, yearly",
            "Mental: EXTREME RESTLESSNESS and anxiety; fear of death",
            "  Cannot be alone; despair; delirium worse after midnight",
            "Physical: COMPLETE EXHAUSTION (out of proportion to illness)",
            "  Sordes; burning pains throughout; prostration with desire to move",
            "Desires: Warm drinks; sips cold water frequently",
            "Negatives: NO relief from sweat; NO large quantity thirst",
            "  NO relief from lying still; NO warmth to cold extremities",
        ],
        clinical=[
            "โœฆ Septic/putrid fevers (foul secretions)",
            "โœฆ Typhoid โ€” not too early; often AFTER Rhus-tox",
            "โœฆ INTERMITTENT fever (malaria) with marked periodicity",
            "โœฆ Hectic fever (consumptive/wasting type)",
            "โœฆ Low adynamic fevers with great exhaustion",
            "โœฆ Influenza with gastroenteritis",
            "โœฆ Remittent fever",
        ],
        differentials=[
            "vs. Nux Vomica: Both chilly; Nux angry/irritable;",
            "  Ars anxious/fearful; Ars has burning + exhaustion",
            "vs. Rhus-tox: Both restless; Rhus > motion, Ars exhausted by motion",
            "vs. Phosphorus: Both thirsty; Phos craves COLD; Ars craves WARM",
            "vs. Pulsatilla: Puls thirstless + warm agg; Ars intense thirst + warm relieves",
            "KEY TRIAD: Burning pains + Relief from WARMTH",
            "      + Anxiety/restlessness with EXHAUSTION = ARS ALB",
        ],
        master_key="Burning pains relieved by warmth โ€ข Thirst for small sips frequently โ€ข Cold clammy yellow-staining sweat gives NO relief โ€ข Extreme restlessness + exhaustion โ€ข Fear of death โ€ข Worse 1โ€“3 AM"
    ),
    dict(
        num=10, name="Nux Vomica", latin="Nux vomica  (Poison Nut)",
        chill=[
            "โ€ข Paroxysms ANTICIPATE in morning",
            "โ€ข Cannot get warm NO MATTER HOW COVERED",
            "โ€ข Blueness of FINGERNAILS during chill (keynote!)",
            "โ€ข Chilliness from LEAST MOVEMENT or uncovering",
            "โ€ข Worse: open air, least movement, after eating",
            "โ€ข Cold, moist hands; cold tip of nose",
        ],
        heat=[
            "โ€ข Body BURNING HOT; face red and hot",
            "โ€ข Yet CANNOT MOVE OR UNCOVER without chilliness",
            "โ€ข Internal heat with external coldness simultaneously",
            "โ€ข Thirst variable; before or after chill mainly",
            "โ€ข Must remain covered even during heat stage",
            "โ€ข Worse: uncovering, morning; Better: warmth, covered",
        ],
        sweat=[
            "โ€ข Sour sweat in MORNING only โ€” characteristic timing",
            "โ€ข ONE-SIDED sweat (single side of body) โ€” keynote!",
            "โ€ข Easy perspiration but not copious",
            "โ€ข Better after undisturbed sleep",
            "โ€ข Worse when sleep disturbed",
        ],
        particulars=[
            "Periodicity: Intermittent โ€” paroxysms anticipate; tertian/quartan",
            "Mental: IRRITABILITY โ€” slightest provocation angers",
            "  Oversensitive to noise, light, odours; cannot be touched",
            "  Delirium during fever; ugly, malicious attitude",
            "Physical: Aching in limbs and back; gastric symptoms",
            "  Nausea, constipation; yawning before chill; jaundice tendency",
            "Desires: Stimulants (coffee, alcohol, spices) โ€” which aggravate!",
            "CARDINAL RULE: Must be COVERED in EVERY stage (chill/heat/sweat)",
        ],
        clinical=[
            "โœฆ INTERMITTENT/malarial fever โ€” tertian, quartan",
            "โœฆ Typhoid with gastric/hepatic complications",
            "โœฆ Influenza with gastric symptoms and chilliness",
            "โœฆ Congestive intermittent with vertigo and delirium",
            "โœฆ Grippe โ€” bone pains + chilliness",
            "โœฆ Remittent fever with bilious complications",
            "โœฆ Fever from overwork, stimulant abuse, sedentary life",
        ],
        differentials=[
            "vs. Arsenicum: Both chilly; Nux angry/craves stimulants;",
            "  Ars anxious/fearful + burning + exhaustion",
            "vs. Pulsatilla: Both chilly; Nux must cover all stages;",
            "  Puls intolerant of warmth in heat; Puls thirstless",
            "vs. Chamomilla: Both irritable; Cham screaming/unceasable;",
            "  Nux more intellectual irritability; Cham ONE cheek red",
            "KEY: Must be COVERED in ALL THREE stages",
            "      + Blueness fingernails + One-sided morning sweat = NUX",
        ],
        master_key="MUST be covered in EVERY stage (chill + heat + sweat) โ€” unique to Nux โ€ข Blueness of fingernails in chill โ€ข One-sided morning sweat โ€ข Irritable, oversensitive โ€ข Gastric concomitants"
    ),
    dict(
        num=11, name="Pulsatilla Nigricans", latin="Pulsatilla nigricans  (Pasque Flower / Wind Flower)",
        chill=[
            "โ€ข Gradual; afternoon 4 PM onset (4โ€“8 PM range)",
            "โ€ข Chilly EVEN IN WARM ROOM (paradoxical!)",
            "โ€ข Chilly in SPOTS โ€” flitting from place to place",
            "โ€ข One-sided chilliness with numbness",
            "โ€ข Shivering every second day; without thirst",
            "โ€ข Worse: warm room; Better: open air",
        ],
        heat=[
            "โ€ข Intolerable burning heat at night โ€” distended veins",
            "โ€ข Heat in parts; coldness in other parts",
            "โ€ข NO THIRST โ€” THIRSTLESS throughout (cardinal keynote!)",
            "โ€ข External heat INTOLERABLE โ€” wants to uncover",
            "โ€ข Dry mouth WITHOUT thirst",
            "โ€ข Better: open air, cold applications, cold drinks (not thirsty)",
        ],
        sweat=[
            "โ€ข ONE-SIDED SWEAT โ€” usually left side (keynote!)",
            "โ€ข PAINS occur DURING sweat (aggravation)",
            "โ€ข Night sweats; evening sweats",
            "โ€ข Not copious; distress during sweat",
            "โ€ข Thirstless even during sweat",
        ],
        particulars=[
            "Periodicity: Intermittent patterns; changeable; 4โ€“8 PM",
            "Mental: WEEPING, mild, yielding; wants sympathy/consolation",
            "  Changeable moods; better from consolation during fever",
            "Physical: Dry mouth WITHOUT thirst (repeated keynote)",
            "  SHIFTING/WANDERING pains; thick bland yellowish-green discharge",
            "  Diarrhoea during apyrexia; headache during apyrexia; nausea",
            "Desires: Cold food/drinks (though not thirsty); averse rich/fat/pork",
            "PULSATILLA TRIAD (Clarke): Chilly + Worse warmth + Thirstless",
        ],
        clinical=[
            "โœฆ Measles fever โ€” #1 remedy; brings out rash",
            "โœฆ Mumps fever",
            "โœฆ Typhoid โ€” bilious type",
            "โœฆ Intermittent fever after ABUSE OF QUININE",
            "โœฆ Catarrhal fevers with bland discharges",
            "โœฆ Rheumatic fever with shifting pains",
            "โœฆ Childhood fevers โ€” mild, weepy children",
            "โœฆ Fever from suppressed menses; after Iron abuse",
        ],
        differentials=[
            "vs. Nux Vomica: Nux covers all stages + irritable;",
            "  Puls chilly but INTOLERANT of warmth; Puls thirstless; Nux thirsty",
            "vs. Arsenicum: Ars burning thirst for sips + warm relieves;",
            "  Puls completely thirstless + warm aggravates",
            "vs. Chamomilla: Cham angry + thirsty + ONE cheek red;",
            "  Puls mild + weepy + thirstless",
            "vs. Gelsemium: Both thirstless; Gels spinal chills + 4 Ds;",
            "  Puls chilly + worse warmth + one-sided sweat",
            "KEY TRIAD: Chilly + Worse by warmth + Thirstless = PULS",
        ],
        master_key="PULSATILLA TRIAD: Chilly + Worse by warmth + THIRSTLESS โ€ข One-sided sweat (left) โ€ข Pains during sweat โ€ข Changeable moods; weeping; craves sympathy โ€ข Chill at 4โ€“8 PM"
    ),
    dict(
        num=12, name="Chamomilla", latin="Chamomilla recutita  (German Chamomile)",
        chill=[
            "โ€ข Sudden; often after ANGER or irritation",
            "โ€ข Constant ALTERNATION โ€” cold one part, hot another",
            "โ€ข Forepart of body cold WHILE back is hot (or vice versa)",
            "โ€ข Evening/night onset; worse from open air",
            "โ€ข Chilliness worse from anger, wind",
        ],
        heat=[
            "โ€ข General heat especially in evening/night in bed",
            "โ€ข ONE CHEEK RED AND HOT; OTHER PALE AND COLD (pathognomonic!)",
            "โ€ข THIRSTY, hot โ€” Boericke: 'Sensitive, irritable, thirsty, hot and numb'",
            "โ€ข Hot perspiration of head and forehead during heat",
            "โ€ข Worse: heat, night, anger; Better: being carried (children)",
        ],
        sweat=[
            "โ€ข SOUR sweat CAUSING ITCHING on skin (keynote!)",
            "โ€ข Hot, clammy sweat on forehead and scalp",
            "โ€ข Sweats after eating or drinking",
            "โ€ข Night sweats characteristic",
            "โ€ข Sour sweat + skin itching = Chamomilla sweat",
        ],
        particulars=[
            "Periodicity: Intermittent with nocturnal aggravation; no strict hour",
            "Mental: EXTREME IRRITABILITY โ€” cannot be appeased",
            "  Child screams, wants things then THROWS THEM AWAY",
            "  Complaints from ANGER; complains continuously",
            "  MENTAL CALMNESS CONTRAINDICATES Chamomilla (Clarke!)",
            "Physical: Teething with fever; green watery stools ('chopped spinach')",
            "  Earache driving patient frantic; unbearable pains with numbness",
            "Desires: Thirsty + hot; bitter bilious taste; averse warm drinks",
        ],
        clinical=[
            "โœฆ TEETHING FEVERS in children โ€” #1 remedy",
            "โœฆ Fever from ANGER or fright",
            "โœฆ Intermittent fever with nocturnal aggravation",
            "โœฆ Fever from COFFEE abuse",
            "โœฆ Inflammatory fever in irritable temperaments",
            "โœฆ Post-partum fever after anger/fright",
            "โœฆ ABC of nursery: Aconite + Belladonna + Chamomilla",
        ],
        differentials=[
            "vs. Belladonna: Bell both cheeks red + throbbing carotids;",
            "  Cham ONE cheek red + ONE pale + extreme irritability",
            "vs. Pulsatilla: Puls mild/weepy/thirstless; Cham angry/screaming/thirsty",
            "vs. Nux Vomica: Both irritable; Nux intellectual irritability;",
            "  Cham unceasable crying, throws things, unappeasable",
            "vs. Aconite: Acon fear-driven restlessness; Cham anger-driven",
            "KEY: ONE cheek red + ONE cheek pale",
            "      + Extreme irritability + Sour itching sweat = CHAM",
        ],
        master_key="ONE cheek red and hot + OTHER pale and cold (pathognomonic) โ€ข Extreme unappeasable irritability โ€ข Mental calmness CONTRAINDICATES Chamomilla โ€ข Sour sweat causing skin itching"
    ),
    dict(
        num=13, name="Hepar Sulphuris Calcareum", latin="Hepar sulphuris calcareum  (Calcium Sulphide)",
        chill=[
            "โ€ข Extremely chilly from SLIGHTEST DRAUGHT",
            "โ€ข Even one hand slipping out of covers causes chill",
            "โ€ข Chilly in open air; morning chilliness",
            "โ€ข Shivering in evening with thirst and toothache",
            "โ€ข Worse: cold air, draught, ANY uncovering, dry cold winds",
            "โ€ข Better: warmth, damp weather, wrapping up tightly",
        ],
        heat=[
            "โ€ข Dry heat at night; sweating easily",
            "โ€ข Alternation of heat and chilliness",
            "โ€ข Variable thirst; yellowish complexion",
            "โ€ข Every scratch or injury suppurates during fever",
            "โ€ข Skin very sensitive to touch",
            "โ€ข Better: warmth, damp weather, after eating",
        ],
        sweat=[
            "โ€ข Profuse, SOUR-STICKY-OFFENSIVE sweat (like old cheese)",
            "โ€ข Sweat on EVERY mental or physical exertion",
            "โ€ข Cold sweat on exertion",
            "โ€ข Sweat does NOT RELIEVE",
            "โ€ข More sweat on upper part of body",
            "โ€ข Morning perspiration characteristic",
        ],
        particulars=[
            "Periodicity: Febrile episodes triggered by cold/suppuration",
            "Mental: ANGUISH in evening; thoughts of suicide at night",
            "  Slightest cause FEROCIOUSLY irritates; hasty in speech",
            "  Hypersensitive to ALL impressions; aversion to touch",
            "Physical: SPLINTER-LIKE PAINS (characteristic sensation)",
            "  Tendency to suppuration โ€” every wound festers",
            "  Sensation of wind blowing on some part of body",
            "Desires: Sour (vinegar, pickles); strong foods; warmth",
        ],
        clinical=[
            "โœฆ Fever WITH SUPPURATION / abscess formation",
            "โœฆ Croup and croupy catarrhal fever",
            "โœฆ Fever after abuse of MERCURY",
            "โœฆ Infectious fever with pus formation",
            "โœฆ Tonsillitis/quinsy with fever",
            "โœฆ Fever in lymphatic/scrofulous constitutions",
            "โœฆ After suppressed skin eruptions",
        ],
        differentials=[
            "vs. Mercurius: Both suppurate + profuse sweat + worse at night;",
            "  Hepar = extreme COLD sensitivity;",
            "  Merc = sensitive to BOTH heat AND cold; Merc sweat aggravates",
            "vs. Silicea: Both suppurate; Sil mild/yielding; Hep violently irritable",
            "  Hep faster on acute suppuration",
            "vs. Arsenicum: Ars burning + anxious + warm relieves;",
            "  Hep splinter pains + cold sensitivity + offensive cheese sweat",
            "KEY: Most cold-sensitive remedy in MM + Splinter pains",
            "      + Offensive cheese-smell sweat + Ferocious irritability = HEP",
        ],
        master_key="Most COLD-SENSITIVE remedy in Materia Medica โ€” draught from one exposed limb causes chill โ€ข Splinter-like pains โ€ข Sour/offensive cheese-smelling sweat (no relief) โ€ข Ferocious irritability โ€ข Suppuration tendency"
    ),
    dict(
        num=14, name="Mercurius Solubilis", latin="Mercurius solubilis  (Quicksilver)",
        chill=[
            "โ€ข Creeping chilliness worse EVENING into night",
            "โ€ข Cold water sensation thrown over body on rising",
            "โ€ข Chilliness between diarrhoea stools",
            "โ€ข Internal chilliness WITH heat of face",
            "โ€ข Icy coldness of hands and feet; shivering over body",
            "โ€ข Worse: evening, night, damp/wet weather",
        ],
        heat=[
            "โ€ข Heat and shuddering ALTERNATELY; flashes in single parts",
            "โ€ข INSATIABLE THIRST during heat โ€” great desire for milk (keynote!)",
            "โ€ข Violent thirst for cold drinks after midnight",
            "โ€ข Heat in face/head with redness and burning of cheeks",
            "โ€ข Profuse oily perspiration that DOES NOT RELIEVE",
            "โ€ข Worse: warmth of bed, warm room, night",
        ],
        sweat=[
            "โ€ข Copious, EXCESSIVE, COLLIQUATIVE night sweats",
            "โ€ข Oily, FETID, SOUR-SMELLING; YELLOW STAINING of linen (keynote!)",
            "โ€ข PROFUSE SWEAT WITHOUT RELIEF (most pathognomonic!)",
            "โ€ข Sweats with nausea, fatigue, anxiety",
            "โ€ข Head and chest particularly; pillow soaked in children",
            "โ€ข All symptoms PERSIST or WORSEN during sweat",
        ],
        particulars=[
            "Periodicity: Slow/lingering; gastric/bilious; hectic late-stage",
            "Mental: SLOW to answer questions; memory weakened",
            "  Weary of life; mistrustful; thinks losing reason",
            "  Restlessness and hurriedness during fever",
            "Physical: Profuse SALIVATION; offensive breath; glandular swellings",
            "  Tendency to form pus (thin, greenish, putrid, blood-streaked)",
            "  Bone pains worse at night; tremors; jaundice; bone destruction",
            "THERMOMETER SENSITIVITY: Neither warmth NOR cold relieves",
        ],
        clinical=[
            "โœฆ SYPHILITIC fevers โ€” secondary syphilis stage",
            "โœฆ Gastric/bilious fevers",
            "โœฆ Typhoid/typhus fevers (adynamic stage)",
            "โœฆ HECTIC fever in chronic/wasting disease",
            "โœฆ Fever in glandular infections (mumps, parotitis, tonsillitis)",
            "โœฆ Fever WITH SUPPURATION (pus forming)",
            "โœฆ Catarrhal fevers after suppressions",
        ],
        differentials=[
            "vs. Hepar Sulph: Both suppurate; Hepar = extreme cold sensitive;",
            "  Merc = sensitive to BOTH heat AND cold; Merc sweat aggravates",
            "vs. Arsenicum: Both exhausted; Ars burning + warm relieves + small sips;",
            "  Merc insatiable thirst + profuse non-relieving sweat + worse warmth",
            "vs. Baptisia: Both fetid; Bapt rapid sepsis + split personality;",
            "  Merc slower course + salivation + bone pain",
            "KEY: Profuse sweat WITHOUT RELIEF + Yellow oily linen stain",
            "      + Thermometer sensitivity (neither hot nor cold helps) = MERC",
        ],
        master_key="Profuse perspiration WITHOUT RELIEF โ€” sweat AGGRAVATES all symptoms โ€ข Yellow oily linen-staining sweat โ€ข Insatiable thirst with desire for milk โ€ข THERMOMETER: neither warmth nor cold relieves"
    ),
    dict(
        num=15, name="Phosphorus", latin="Phosphorus  (Phosphorus element)",
        chill=[
            "โ€ข Chilly EVERY EVENING โ€” characteristic pattern",
            "โ€ข Chill at 2 PM beginning internally in stomach region",
            "โ€ข Chill begins in FOREARM โ€” spreads upward",
            "โ€ข ICY COLDNESS of hands, knees, and feet (even in bed!)",
            "โ€ข UNNATURAL HUNGER during chill (with adynamia!)",
            "โ€ข Flashes of heat from hands spreading to face",
        ],
        heat=[
            "โ€ข Hectic/violent ebullitions of heat; remittent type",
            "โ€ข BURNING PALMS โ€” cannot bear to have hands covered",
            "โ€ข INTENSE THIRST for ICE-COLD water/drinks (keynote!)",
            "โ€ข Cold drinks swallowed then VOMITED when stomach warms them",
            "โ€ข Flashes of heat beginning in hands โ†’ face",
            "โ€ข Worse: lying on LEFT side, morning, warm applications",
        ],
        sweat=[
            "โ€ข VISCID NIGHT SWEATS โ€” cold, clammy, garlic/sulphur smell",
            "โ€ข Profuse exhausting sweats โ€” especially head, neck, chest",
            "โ€ข Sweat on NAPE and OCCIPUT โ€” characteristic location",
            "โ€ข Anxious, profuse, debilitating night sweats",
            "โ€ข Partial sweats; no particular relief from sweat",
            "โ€ข Sweat on slightest exertion",
        ],
        particulars=[
            "Periodicity: Hectic (recurring with wasting); remittent; intermittent",
            "Mental: APPREHENSION and FEAR โ€” of being alone, dark, thunder",
            "  Requires company/sympathy; clairvoyant states during fever",
            "  Stupid delirium; exhaustion after talking",
            "Physical: ICY COLD KNEES at night (single keynote!)",
            "  Haemorrhagic tendency during fever; rapid thready pulse",
            "  Burning between shoulder blades; tympanites in typhoid",
            "PARADOX: Chilly constitution + craves ICE-COLD drinks",
        ],
        clinical=[
            "โœฆ HECTIC/CONSUMPTIVE fever โ€” tuberculosis type",
            "โœฆ TYPHOID fever โ€” 2ndโ€“3rd week; stupor, tympanites, haemorrhages",
            "โœฆ PNEUMONIA fever โ€” 2nd stage (hepatisation)",
            "โœฆ Yellow fever type",
            "โœฆ Remittent fever with haemorrhagic tendency",
            "โœฆ SEPTIC fevers with haemorrhage",
            "โœฆ Haemorrhagic fevers generally",
        ],
        differentials=[
            "vs. Arsenicum: Both thirsty; Ars craves WARM, small sips;",
            "  Phos craves ICE-COLD, large amounts; Ars warm relieves; Phos cold relieves stomach",
            "vs. Mercurius: Both night sweats/hectic; Merc sweat no relief/offensive;",
            "  Phos exhausting/viscid; Phos cold thirst; Merc insatiable + thermometer",
            "vs. Gelsemium: Both prostrated; Gels thirstless; Phos intensely thirsty for cold",
            "vs. Baptisia: Both typhoid; Bapt fetid + split self; Phos haemorrhage + cold thirst",
            "KEY PARADOX: Chilly + craves ICE-COLD + hunger during chill",
            "      + Cold knees + Viscid night sweats + Haemorrhage = PHOS",
        ],
        master_key="Chilly constitution yet craves ICE-COLD drinks (vomited when warm in stomach) โ€ข PARADOX: hungry during chill โ€ข Icy cold knees at night โ€ข Viscid night sweats โ€ข Haemorrhagic fever tendency"
    ),
]

# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# BUILD SLIDES
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
make_title_slide(prs)
for r in remedies_data:
    make_remedy_slide(
        prs,
        num=r['num'], name=r['name'], latin=r['latin'],
        chill=r['chill'], heat=r['heat'], sweat=r['sweat'],
        particulars=r['particulars'], clinical=r['clinical'],
        differentials=r['differentials'], master_key=r['master_key']
    )

# โ”€โ”€ Comparison / Summary slide โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
def make_summary_slide(prs):
    slide = prs.slides.add_slide(blank)
    bg_rect(slide, 0, 0, 13.333, 7.5, LIGHT_BG)
    bg_rect(slide, 0, 0, 13.333, 0.95, NAVY)
    bg_rect(slide, 0, 0, 0.12, 0.95, GOLD)
    add_tb(slide, 0.25, 0.1, 13.0, 0.75,
           "QUICK COMPARISON โ€” 15 FEVER REMEDIES AT A GLANCE", 18, bold=True,
           color=WHITE, align=PP_ALIGN.CENTER)

    headers = ["Remedy", "Chill Time", "Thirst", "Sweat", "Key Mental", "Prime Fever", "Master Key"]
    col_widths = [1.6, 1.1, 1.3, 1.5, 1.8, 1.7, 2.2]
    rows = [
        ["Aconite",    "No hour",   "Cold water++", "Profuse, relieves",  "Fear of death",        "Inflammatory",    "Sudden+Fear+No periodicity"],
        ["Belladonna", "~3 PM",     "ABSENT",       "Head only; body dry","Violent delirium",     "Scarlet fever",   "Radiating heat+No thirst"],
        ["Ferr-phos",  "1 PM",      "Cold water+",  "Night sweats",       "Paucity of sx",        "All 1st stages",  "1st stage, gradual, 1 PM"],
        ["Bryonia",    "Evening",   "GREATโ€”large",  "Sour, profuse",      "Business delirium",    "Rheum/Pneumonia", "Thirst+Rest+Dry+Constipation"],
        ["Gelsemium",  "No hour",   "ABSENT",       "Exhausting+urine",   "4 Ds; apathy",         "Influenza",       "4Ds+Spinal chills+No thirst"],
        ["Rhus-tox",   "Evening",   "Cold milk",    "Sour, 3โ€“4 AM",       "Restless-physical",    "Typhoid/Malarial","Urticaria+Cough in chill"],
        ["Baptisia",   "11 AM",     "Present",      "Fetid, critical",    "Divided self; stupor", "Typhoid/Sepsis",  "Besotted+Fetid+Split self"],
        ["Eupatorium", "7โ€“9 AM",    "Great+before", "All relieved exc Hd","Moaning, restless",    "Malaria/Dengue",  "Breakbone pain+Thirst precedes"],
        ["Arsenicum",  "1โ€“2 AM",    "Sips often",   "No relief; viscid",  "Anxiety+Fear death",   "Septic/Hectic",   "Burning+Warmth+Exhaustion"],
        ["Nux Vomica", "Morning",   "Variable",     "1-sided, morning",   "Irritable; covers all","Gastric interm.", "Cover all stages+Blue nails"],
        ["Pulsatilla", "4โ€“8 PM",    "ABSENT",       "1-sided; pains",     "Weeping; changeable",  "Measles/Mumps",   "Chilly+Worse warmth+No thirst"],
        ["Chamomilla", "Evening",   "Thirsty+hot",  "Sour; skin itching", "Unappeasable anger",   "Teething fever",  "1 cheek red+1 pale+Anger"],
        ["Hepar Sulph","Evening",   "Variable",     "Offensive, cheese",  "Ferocious; cold-fear", "Suppurative",     "Draughtโ†’chill+Splinter pains"],
        ["Mercurius",  "Evening/Nt","Insatiable",   "NO relief; yellow",  "Slow; mistrustful",    "Syphilitic/Hect.","Thermometer+No relief sweat"],
        ["Phosphorus", "Evening",   "Ice cold++",   "Viscid; no relief",  "Fear+needs company",   "Hectic/Typhoid",  "Chilly+Ice cold thirst+Cold knees"],
    ]

    # header row
    x = 0.13
    for hw, h in zip(col_widths, headers):
        bg_rect(slide, x, 1.02, hw-0.02, 0.3, NAVY)
        add_tb(slide, x+0.03, 1.02, hw-0.06, 0.3, h, 7.5, bold=True,
               color=WHITE, align=PP_ALIGN.LEFT)
        x += hw

    row_h = 0.355
    for ri, row in enumerate(rows):
        y = 1.35 + ri * row_h
        bg = WHITE if ri % 2 == 0 else RGBColor(0xE8, 0xF0, 0xF8)
        x = 0.13
        for ci, (cw, cell) in enumerate(zip(col_widths, row)):
            bg_rect(slide, x, y, cw-0.02, row_h-0.02, bg)
            col = TEAL if ci == 0 else DARK_TEXT
            add_tb(slide, x+0.03, y+0.01, cw-0.07, row_h-0.04, cell,
                   6.8, bold=(ci==0), color=col)
            x += cw

    add_tb(slide, 0.1, 7.2, 13.0, 0.25,
           "Sources: Boericke's Pocket Manual of Homoeopathic Materia Medica  โ€ข  Clarke's Dictionary of Practical Materia Medica",
           7.5, color=MID_GREY, align=PP_ALIGN.CENTER, italic=True)

make_summary_slide(prs)

out = "/tmp/workspace/homeopathy-fever-pptx/Homeopathic_Fever_Remedies_15.pptx"
from io import BytesIO
buf = BytesIO()
prs.save(buf)
with open(out, "wb") as f:
    f.write(buf.getvalue())

print(f"DONE: {out}")
Running Command

cd /tmp/workspace/homeopathy-fever-pptx && python build_pptx.py

Running Command

ls -lh /tmp/workspace/homeopathy-fever-pptx/Homeopathic_Fever_Remedies_15.pptx

Your presentation is ready! Download it here:

Homeopathic Fever Remedies 15

Presentation ยท PPTX


What's inside (17 slides total):

SlideContent
Slide 1Title slide โ€” deep navy + gold design with all 15 remedies listed
Slides 2โ€“16One slide per remedy (Aconite โ†’ Phosphorus)
Slide 17Master comparison table โ€” all 15 at a glance

Design features:

  • Color scheme: Deep navy + academic teal + warm gold accents โ€” professional and easy to read
  • Each remedy slide has 6 sections:
    • Chill (blue header) / Heat (red header) / Sweat (green header)
    • Fever Particulars (purple) / Clinical Fever Types (orange) / Differentiating Symptoms (navy)
    • Gold master key footer at the bottom of every slide
  • Fully editable in PowerPoint or Google Slides โ€” all text boxes, colors and fonts are standard
  • Sources credited on every slide: Boericke + Clarke

see the formate ..i want similar formate in my remedies..but with reference to boericke and clerke..and medicine list is different now ACONITE NEP, BELLADONA, CHAMOMILLA, BRYONIA, GELSEMIUM, FERRUM PHOS,BAPTISIA,EUPATORIUM

Reading File
Running Command

cd /tmp/workspace/attachments/7d519471-a59b-48d7-925c-3e40faaedbf6/ && python3 -c " from pptx import Presentation from pptx.util import Inches, Pt, Emu prs = Presentation('Fever therapeutics.pptx') print('Slide size:', prs.slide_width/914400, 'x', prs.slide_height/914400, 'inches') print('Number of slides:', len(prs.slides)) print() for si, slide in enumerate(prs.slides, 1): print(f'=== SLIDE {si} ===') for shape in slide.shapes: print(f' Shape: {shape.shape_type}, name={shape.name}, left={round(shape.left/914400,2)}, top={round(shape.top/914400,2)}, w={round(shape.width/914400,2)}, h={round(shape.height/914400,2)}') if shape.has_text_frame: for para in shape.text_frame.paragraphs: txt = para.text.strip() if txt: runs_info = [] for r in para.runs: fi = r.font runs_info.append(f'size={fi.size}, bold={fi.bold}, color={fi.color.rgb if fi.color and fi.color.type else None}') print(f' TEXT: {txt!r} | runs: {runs_info}') if shape.shape_type == 1: # MSO_SHAPE_TYPE.AUTO_SHAPE fill = shape.fill if fill.type is not None: try: print(f' FILL color: {fill.fore_color.rgb}') except: pass print() "

Running Command

cd /tmp/workspace/attachments/7d519471-a59b-48d7-925c-3e40faaedbf6/ && python3 -c " from pptx import Presentation from pptx.util import Pt from pptx.dml.color import RGBColor import pptx.oxml.ns as ns from lxml import etree prs = Presentation('Fever therapeutics.pptx') # Check theme colors slide_master = prs.slide_master theme = slide_master.theme_color_map print('Theme element:') try: theme_elem = slide_master._element.find('.//{http://schemas.openxmlformats.org/drawingml/2006/main}theme') if theme_elem is not None: print(etree.tostring(theme_elem, pretty_print=True).decode()[:2000]) except: pass # Check slide layout/background slide = prs.slides[0] print('\\n=== SLIDE 1 BG / LAYOUT ===') layout = slide.slide_layout master = layout.slide_master print('Layout name:', layout.name) # Check background fill of first slide try: bg = slide.background fill = bg.fill print('BG fill type:', fill.type) if fill.type is not None: print('BG fore color:', fill.fore_color.rgb) except Exception as e: print('BG error:', e) # Check all shapes on slide 1 more deeply for shape in slide.shapes: print(f'\\nShape: {shape.name} ({shape.shape_type})') print(f' Pos: L={round(shape.left/914400,3)} T={round(shape.top/914400,3)} W={round(shape.width/914400,3)} H={round(shape.height/914400,3)}') try: fill = shape.fill print(f' Fill type: {fill.type}') if str(fill.type) == 'SOLID (1)': print(f' Fill color: {fill.fore_color.rgb}') except: pass if shape.has_text_frame: tf = shape.text_frame print(f' Margins: L={tf.margin_left} T={tf.margin_top}') for pi, para in enumerate(tf.paragraphs[:3]): print(f' Para {pi}: align={para.alignment}') for ri, run in enumerate(para.runs[:2]): f = run.font try: color = f.color.rgb except: color = 'theme/inherited' print(f' Run {ri}: text={run.text[:40]!r} size={f.size} bold={f.bold} italic={f.italic} color={color} font={f.name}') "

Running Command

cd /tmp/workspace/attachments/7d519471-a59b-48d7-925c-3e40faaedbf6/ && python3 -c " from pptx import Presentation from pptx.util import Pt from lxml import etree prs = Presentation('Fever therapeutics.pptx') slide = prs.slides[0] # BG bg = slide.background fill = bg.fill print('Slide BG fill type:', fill.type) # Layout name layout = slide.slide_layout print('Layout name:', layout.name) # Layout BG try: lbg = layout.background lfill = lbg.fill print('Layout BG fill type:', lfill.type) if str(lfill.type) == 'SOLID (1)': print('Layout BG color:', lfill.fore_color.rgb) except Exception as e: print('Layout BG err:', e) # Master BG master = layout.slide_master try: mbg = master.background mfill = mbg.fill print('Master BG fill type:', mfill.type) except Exception as e: print('Master BG err:', e) # Print theme XML snippet try: theme_xml = master.theme._element txt = etree.tostring(theme_xml, pretty_print=True).decode() # find color scheme idx = txt.find('clrScheme') print('\\nTheme color scheme snippet:') print(txt[idx:idx+2000]) except Exception as e: print('Theme err:', e) # Check all shapes fill colors print('\\n=== SHAPES ON SLIDE 1 ===') for shape in slide.shapes: print(f' {shape.name} ({shape.shape_type}) pos=({round(shape.left/914400,2)},{round(shape.top/914400,2)}) size=({round(shape.width/914400,2)},{round(shape.height/914400,2)})') try: fill = shape.fill print(f' fill type={fill.type}') if str(fill.type) == 'SOLID (1)': print(f' fill color={fill.fore_color.rgb}') except: pass # line try: ln = shape.line print(f' line fill type={ln.fill.type}') except: pass "

Running Command

cd /tmp/workspace/attachments/7d519471-a59b-48d7-925c-3e40faaedbf6/ && python /tmp/skills/pptx/scripts/office/unpack.py 'Fever therapeutics.pptx' /tmp/workspace/fever_unpacked/ && echo "DONE"

Running Command

ls /tmp/workspace/fever_unpacked/ && echo "---" && ls /tmp/workspace/fever_unpacked/ppt/ && echo "---" && cat /tmp/workspace/fever_unpacked/ppt/theme/theme1.xml | python3 -c "import sys; from lxml import etree; root=etree.parse(sys.stdin); txt=etree.tostring(root,pretty_print=True).decode(); i=txt.find('clrScheme'); print(txt[i:i+3000])"

Running Command

cat /tmp/workspace/fever_unpacked/ppt/slides/slide1.xml | python3 -c " import sys; from lxml import etree root = etree.parse(sys.stdin) txt = etree.tostring(root, pretty_print=True).decode() print(txt[:6000]) "

Running Command

cat /tmp/workspace/fever_unpacked/ppt/slideLayouts/slideLayout2.xml | python3 -c " import sys; from lxml import etree root = etree.parse(sys.stdin) txt = etree.tostring(root, pretty_print=True).decode() print(txt[:5000]) "

Running Command

cat /tmp/workspace/fever_unpacked/ppt/slideMasters/slideMaster1.xml | python3 -c " import sys; from lxml import etree root = etree.parse(sys.stdin) txt = etree.tostring(root, pretty_print=True).decode() # find background idx = txt.find('bg') print('BG section:') print(txt[idx:idx+1000]) print('---') # find title style idx2 = txt.find('titleStyle') if idx2 < 0: idx2 = txt.find('txStyles') print('Title/TX style section:') print(txt[idx2:idx2+2000]) " 2>&1 | head -100

Writing File

~/homeopathy-fever-pptx/build_format_match.py

"""
Build fever remedies PPTX matching the exact format of the uploaded 'Fever therapeutics.pptx':
- White background (inherits from template)
- Title placeholder: Times New Roman, Bold + Underlined, large
- Content placeholder: bullet list, bold labels + normal text, Calibri body
- Uses the original file as template โ€” clone its slide layout for each new slide
"""

import copy
from lxml import etree
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
from io import BytesIO

TEMPLATE = "/tmp/workspace/attachments/7d519471-a59b-48d7-925c-3e40faaedbf6/Fever therapeutics.pptx"
OUTPUT   = "/tmp/workspace/homeopathy-fever-pptx/Fever_Remedies_Boericke_Clarke.pptx"

# โ”€โ”€ Namespaces โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
nsmap = {
    'a': 'http://schemas.openxmlformats.org/drawingml/2006/main',
    'p': 'http://schemas.openxmlformats.org/presentationml/2006/main',
    'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
}
A = 'http://schemas.openxmlformats.org/drawingml/2006/main'
P = 'http://schemas.openxmlformats.org/presentationml/2006/main'

def a(tag):  return f'{{{A}}}{tag}'
def p_(tag): return f'{{{P}}}{tag}'

# โ”€โ”€ XML helpers โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
def make_run(text, bold=False, size_pt=None, underline=False, font="Times New Roman"):
    """Create an <a:r> element."""
    rpr = etree.SubElement(etree.Element('dummy'), a('rPr'))
    rpr.set('lang', 'en-US')
    rpr.set('dirty', '0')
    if bold: rpr.set('b', '1')
    if underline: rpr.set('u', 'sng')
    if size_pt:
        rpr.set('sz', str(int(size_pt * 100)))
    # font
    latin = etree.SubElement(rpr, a('latin'))
    latin.set('typeface', font)
    cs = etree.SubElement(rpr, a('cs'))
    cs.set('typeface', font)

    r_elem = etree.Element(a('r'))
    r_elem.append(rpr)
    t_elem = etree.SubElement(r_elem, a('t'))
    t_elem.text = text
    return r_elem

def make_para_no_bullet(runs):
    """Paragraph without bullet (for header lines like STAGES:, THIRST:)."""
    p = etree.Element(a('p'))
    ppr = etree.SubElement(p, a('pPr'))
    ppr.set('marL', '0')
    ppr.set('indent', '0')
    buNone = etree.SubElement(ppr, a('buNone'))
    for r in runs:
        p.append(r)
    return p

def make_para_bullet(runs, bullet_char='โ€ข', bullet_font='Arial'):
    """Paragraph with bullet."""
    p = etree.Element(a('p'))
    ppr = etree.SubElement(p, a('pPr'))
    buFont = etree.SubElement(ppr, a('buFont'))
    buFont.set('typeface', bullet_font)
    buChar = etree.SubElement(ppr, a('buChar'))
    buChar.set('char', bullet_char)
    for r in runs:
        p.append(r)
    return p

def make_para_sub_bullet(runs):
    """Sub-bullet (indented, o bullet)."""
    p = etree.Element(a('p'))
    ppr = etree.SubElement(p, a('pPr'))
    buFont = etree.SubElement(ppr, a('buFont'))
    buFont.set('typeface', 'Courier New')
    buChar = etree.SubElement(ppr, a('buChar'))
    buChar.set('char', 'o')
    for r in runs:
        p.append(r)
    return p

def make_empty_para():
    p = etree.Element(a('p'))
    ppr = etree.SubElement(p, a('pPr'))
    ppr.set('marL', '0'); ppr.set('indent', '0')
    etree.SubElement(ppr, a('buNone'))
    epr = etree.SubElement(p, a('endParaRPr'))
    epr.set('lang', 'en-US'); epr.set('dirty', '0')
    return p

# โ”€โ”€ Slide builder โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
def build_slide_xml(title_text, content_paragraphs):
    """
    content_paragraphs: list of dicts:
      {'type': 'header',   'label': 'STAGES:', 'text': 'All 3 stages present'}
      {'type': 'bullet',   'label': 'Chill โ€“',  'text': 'Sudden, violent onset after dry cold wind'}
      {'type': 'sub',      'text': 'some sub-point'}
      {'type': 'plain',    'text': 'plain text no label'}
      {'type': 'spacer'}
    """
    # Minimal slide XML shell
    sld_xml = '''<p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
                        xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
                        xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
  <p:cSld>
    <p:spTree>
      <p:nvGrpSpPr>
        <p:cNvPr id="1" name=""/>
        <p:cNvGrpSpPr/>
        <p:nvPr/>
      </p:nvGrpSpPr>
      <p:grpSpPr>
        <a:xfrm>
          <a:off x="0" y="0"/>
          <a:ext cx="0" cy="0"/>
          <a:chOff x="0" y="0"/>
          <a:chExt cx="0" cy="0"/>
        </a:xfrm>
      </p:grpSpPr>
      <!-- TITLE SHAPE -->
      <p:sp>
        <p:nvSpPr>
          <p:cNvPr id="2" name="Title 1"/>
          <p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr>
          <p:nvPr><p:ph type="title"/></p:nvPr>
        </p:nvSpPr>
        <p:spPr/>
        <p:txBody>
          <a:bodyPr/>
          <a:lstStyle/>
          <a:p id="TITLE_PARA"/>
        </p:txBody>
      </p:sp>
      <!-- CONTENT SHAPE -->
      <p:sp>
        <p:nvSpPr>
          <p:cNvPr id="3" name="Content Placeholder 2"/>
          <p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr>
          <p:nvPr><p:ph idx="1"/></p:nvPr>
        </p:nvSpPr>
        <p:spPr/>
        <p:txBody>
          <a:bodyPr><a:noAutofit/></a:bodyPr>
          <a:lstStyle/>
          <a:p id="CONTENT_PARA"/>
        </p:txBody>
      </p:sp>
    </p:spTree>
  </p:cSld>
  <p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>
</p:sld>'''

    root = etree.fromstring(sld_xml.encode())

    # โ”€โ”€ Build TITLE paragraph โ”€โ”€
    title_para = root.find('.//' + a('p') + '[@id="TITLE_PARA"]')
    title_para.attrib.pop('id', None)
    title_run = make_run(title_text, bold=True, underline=True, font='Times New Roman')
    title_para.append(title_run)
    end_rpr = etree.SubElement(title_para, a('endParaRPr'))
    end_rpr.set('lang', 'en-IN'); end_rpr.set('b', '1'); end_rpr.set('u', 'sng'); end_rpr.set('dirty', '0')
    lat = etree.SubElement(end_rpr, a('latin')); lat.set('typeface', 'Times New Roman')
    cs2 = etree.SubElement(end_rpr, a('cs')); cs2.set('typeface', 'Times New Roman')

    # โ”€โ”€ Find the CONTENT txBody and replace placeholder para โ”€โ”€
    # Find the second sp's txBody
    sps = root.findall('.//' + p_('sp'))
    content_sp = sps[1]  # second shape = content
    txBody = content_sp.find(p_('txBody'))
    # Remove placeholder para
    for old_p in txBody.findall(a('p')):
        txBody.remove(old_p)

    BODY_FONT = 'Calibri'

    for item in content_paragraphs:
        t = item.get('type', 'plain')

        if t == 'spacer':
            txBody.append(make_empty_para())

        elif t == 'header':
            label = item.get('label', '')
            text  = item.get('text', '')
            runs = []
            if label:
                runs.append(make_run(label + ' ', bold=True, font=BODY_FONT))
            if text:
                runs.append(make_run(text, bold=False, font=BODY_FONT))
            txBody.append(make_para_no_bullet(runs))

        elif t == 'bullet':
            label = item.get('label', '')
            text  = item.get('text', '')
            runs = []
            if label:
                runs.append(make_run(label + ' ', bold=True, font=BODY_FONT))
            if text:
                runs.append(make_run(text, bold=False, font=BODY_FONT))
            txBody.append(make_para_bullet(runs))

        elif t == 'sub':
            text = item.get('text', '')
            label = item.get('label', '')
            runs = []
            if label:
                runs.append(make_run(label + ' ', bold=True, font=BODY_FONT))
            runs.append(make_run(text, bold=False, font=BODY_FONT))
            txBody.append(make_para_sub_bullet(runs))

        elif t == 'plain':
            text = item.get('text', '')
            runs = [make_run(text, bold=False, font=BODY_FONT)]
            txBody.append(make_para_bullet(runs, bullet_char='โ—†', bullet_font='Arial'))

    return root

# โ”€โ”€ REMEDY DATA โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# Format reference: Boericke Pocket Manual + Clarke Dictionary of Practical Materia Medica
# Structure mirrors the uploaded file:
#   TYPE โ†’ STAGES (Chill / Heat / Sweat) โ†’ THIRST โ†’ Key particulars (bullets)

remedies = [

  {
    "title": "ACONITUM NAPELLUS",
    "content": [
      {"type":"header","label":"TYPE:","text":"Inflammatory fever, Traumatic fever, Catarrhal fever (sudden onset after dry cold wind or fright)"},
      {"type":"spacer"},
      {"type":"header","label":"STAGES:","text":"All 3 stages present โ€” rapid succession"},
      {"type":"bullet","label":"Chill โ€“","text":"Sudden violent shaking chill; chilly if uncovered or touched; chill begins with intense anxiety and fear; warm room aggravates chill; rigors worse at night (Clarke)"},
      {"type":"bullet","label":"Heat โ€“","text":"Dry burning heat; skin hot and dry; face RED or alternately red and pale; bed intolerable โ€” must uncover; worse at night and midnight (Boericke)"},
      {"type":"bullet","label":"Sweat โ€“","text":"Profuse general sweat relieves fever; sweat on covered/affected parts; the cheek lain on sweats (Clarke)"},
      {"type":"spacer"},
      {"type":"header","label":"THIRST:","text":"INTENSE โ€” large quantities of cold water throughout all stages (cardinal keynote โ€” Boericke)"},
      {"type":"spacer"},
      {"type":"plain","text":"Fear of death โ€” predicts exact hour of death; clairvoyance (Clarke)"},
      {"type":"plain","text":"Great restlessness and tossing about โ€” anguish of mind and body"},
      {"type":"plain","text":"NO periodicity โ€” action brief, shows no periodicity (Boericke keynote negative)"},
      {"type":"plain","text":"NOT indicated: malarial, typhoid, hectic, pyemic fevers or after tissue change"},
      {"type":"plain","text":"Differentiating: Sudden + Fear of death + NO periodicity = Aconite (vs Bell = delirium; vs Gels = apathy)"},
    ]
  },

  {
    "title": "BELLADONNA",
    "content": [
      {"type":"header","label":"TYPE:","text":"Scarlet fever (premier remedy), High inflammatory fever, Meningitic fever, Childhood fevers, Sunstroke, Hyperpyrexia"},
      {"type":"spacer"},
      {"type":"header","label":"STAGES:","text":"All 3 stages present โ€” sudden violent onset"},
      {"type":"bullet","label":"Chill โ€“","text":"Sudden, violent, congestive; shivering with yawning and stretching; ~3 PM onset; hot cheeks with icy cold hands and feet; dilated pupils and dread of light in chill (Clarke)"},
      {"type":"bullet","label":"Heat โ€“","text":"Burning, PUNGENT, STEAMING heat โ€” radiated at a distance from the body; face bright red, flushed, bloated; throbbing carotids; icy cold feet with burning hot head (Boericke)"},
      {"type":"bullet","label":"Sweat โ€“","text":"SWEAT ONLY ON HEAD โ€” body remains completely dry (keynote); copious sweat on head at night; head remains hot even during sweat (Clarke)"},
      {"type":"spacer"},
      {"type":"header","label":"THIRST:","text":"ABSENT (NO THIRST) โ€” dry mouth but thirstless; complete adypsia (cardinal keynote โ€” Boericke). Desires: lemon/lemonade; aversion to water"},
      {"type":"spacer"},
      {"type":"plain","text":"Violent delirium โ€” biting, striking, hallucinations of frightening imagery (Boericke)"},
      {"type":"plain","text":"No toxaemia despite high fever โ€” 'high feverish state with comparative absence of toxaemia' (Boericke)"},
      {"type":"plain","text":"Quotidian or double quotidian periodicity (Clarke)"},
      {"type":"plain","text":"Differentiating: Radiating heat + NO thirst + Sweat ONLY on head + Icy feet/hot head + Violent delirium = Belladonna"},
    ]
  },

  {
    "title": "CHAMOMILLA",
    "content": [
      {"type":"header","label":"TYPE:","text":"Teething fever, Fever from anger/fright, Intermittent fever with nocturnal aggravation, Fever from coffee abuse"},
      {"type":"spacer"},
      {"type":"header","label":"STAGES:","text":"All 3 stages โ€” nocturnal aggravation; often triggered by anger"},
      {"type":"bullet","label":"Chill โ€“","text":"Sudden; often after anger; constant ALTERNATION โ€” cold forepart, hot back (or vice versa); chilliness worse from open air and wind; evening/night onset (Boericke)"},
      {"type":"bullet","label":"Heat โ€“","text":"ONE CHEEK RED AND HOT; OTHER PALE AND COLD (pathognomonic sign โ€” Boericke); general heat in evening/night; hot perspiration of head and forehead; burning redness of ONE cheek"},
      {"type":"bullet","label":"Sweat โ€“","text":"SOUR sweat CAUSING ITCHING on skin (keynote โ€” Clarke); hot clammy sweat on forehead and scalp; sweats after eating or drinking; night sweats characteristic"},
      {"type":"spacer"},
      {"type":"header","label":"THIRST:","text":"THIRSTY and HOT โ€” 'Chamomilla is sensitive, irritable, thirsty, hot and numb' (Boericke). Bitter bilious taste; averse to warm drinks"},
      {"type":"spacer"},
      {"type":"plain","text":"EXTREME IRRITABILITY โ€” cannot be appeased; child screams, wants things then throws them away (Boericke)"},
      {"type":"plain","text":"Complaints from ANGER โ€” mental calmness CONTRAINDICATES Chamomilla (Clarke โ€” key prescribing rule)"},
      {"type":"plain","text":"Pains UNENDURABLE associated with numbness; earache driving patient frantic"},
      {"type":"plain","text":"Differentiating: One cheek red + one pale + extreme irritability + sour itching sweat = Chamomilla"},
    ]
  },

  {
    "title": "BRYONIA ALBA",
    "content": [
      {"type":"header","label":"TYPE:","text":"Rheumatic fever, Typhoid (gastric/hepatic), Pleuritic/Pneumonic fever, Bilious fever, Milk fever, Gastric fever"},
      {"type":"spacer"},
      {"type":"header","label":"STAGES:","text":"All 3 stages โ€” gradual onset; gastro-hepatic involvement"},
      {"type":"bullet","label":"Chill โ€“","text":"Gradual slow development; chilliness in evenings (3โ€“4 PM); dry cough WITH STITCHES during chill; chilliness in room > open air; heat in head with red face during chill (Clarke)"},
      {"type":"bullet","label":"Heat โ€“","text":"Dry burning internal heat โ€” 'as if blood burning in veins'; pulse full, hard, tense and quick; GREAT THIRST for large quantities at long intervals; worse any motion (Boericke)"},
      {"type":"bullet","label":"Sweat โ€“","text":"SOUR-smelling profuse perspiration; cold sweat on forehead and head; worse from least motion; eventually brings relief (Clarke)"},
      {"type":"spacer"},
      {"type":"header","label":"THIRST:","text":"GREATEST thirst in the Materia Medica โ€” for large quantities of cold water at long intervals (cardinal keynote โ€” Boericke). Averse to warm food and drinks"},
      {"type":"spacer"},
      {"type":"plain","text":"Absolute desire for REST โ€” any motion aggravates EVERY symptom; lies perfectly still (Boericke)"},
      {"type":"plain","text":"DRYNESS everywhere โ€” lips cracked, tongue dry/brown, mouth parched; CONSTIPATION with dry hard stool (not diarrhoea)"},
      {"type":"plain","text":"Delirium about BUSINESS โ€” 'wants to go home'; talks business matters even in delirium (Boericke)"},
      {"type":"plain","text":"Differentiating: Thirst + Rest + Dryness + Constipation + Business delirium = Bryonia (opposite of Rhus-tox)"},
    ]
  },

  {
    "title": "GELSEMIUM SEMPERVIRENS",
    "content": [
      {"type":"header","label":"TYPE:","text":"Influenza (#1 remedy โ€” 1918 pandemic), Malarial/bilious remittent fever (dumb ague), Typhoid (adynamic stage), Scarlet fever, Measles, Nervous/anticipatory fever"},
      {"type":"spacer"},
      {"type":"header","label":"STAGES:","text":"All 3 stages โ€” gradual insidious onset; adynamic type"},
      {"type":"bullet","label":"Chill โ€“","text":"SPINAL CHILLS โ€” wave-like, ascending from sacrum to occiput (keynote โ€” Boericke); trembling; wants to be held because he shakes so much; worse damp/foggy weather; worse 10 AM"},
      {"type":"bullet","label":"Heat โ€“","text":"Moderate heat; DROWSINESS and heaviness predominate; face full, dusky-red, expressionless (not bright red); slow, full, soft, compressible pulse; 'bilious remittent fever with stupor, dizziness, faintness' (Boericke)"},
      {"type":"bullet","label":"Sweat โ€“","text":"Long and exhausting; PROFUSE URINATION may substitute for sweat (unique โ€” Clarke); headache RELIEVED BY URINATION (characteristic keynote โ€” Boericke)"},
      {"type":"spacer"},
      {"type":"header","label":"THIRST:","text":"ABSENT โ€” thirstless and prostrated (cardinal keynote โ€” Boericke). No thirst despite fever."},
      {"type":"spacer"},
      {"type":"plain","text":"4 Ds: Dullness, Drowsiness, Dizziness, Drooping eyelids (ptosis) โ€” defining quartet (Boericke)"},
      {"type":"plain","text":"Profound APATHY โ€” desires to be left alone; emotional cause (fear, bad news, anticipation) triggers illness (Clarke)"},
      {"type":"plain","text":"Falls asleep while being addressed; great muscular weakness and trembling"},
      {"type":"plain","text":"Differentiating: 4 Ds + Spinal chills + NO thirst + Trembling + Urination relieves headache = Gelsemium"},
    ]
  },

  {
    "title": "FERRUM PHOSPHORICUM",
    "content": [
      {"type":"header","label":"TYPE:","text":"FIRST STAGE of ALL inflammatory and catarrhal fevers โ€” before localisation or exudation sets in; anaemic constitutions"},
      {"type":"spacer"},
      {"type":"header","label":"STAGES:","text":"All 3 stages โ€” gradual onset; moderate intensity"},
      {"type":"bullet","label":"Chill โ€“","text":"GRADUAL, insidious onset; chill daily at 1 PM (specific clock time โ€” keynote Boericke); chilliness over whole back; NOT violent; also worse 4โ€“6 PM (Clarke)"},
      {"type":"bullet","label":"Heat โ€“","text":"Moderate heat; face alternates pale THEN red โ€” NEVER becomes dusky (distinguishes from Gels); soft flowing pulse (not hard bounding like Bell); 'Stands midway between sthenic activity of Acon/Bell and asthenic sluggishness of Gels' (Boericke)"},
      {"type":"bullet","label":"Sweat โ€“","text":"Night sweats โ€” exhausting, anaemic type; palms hot and sweating; profuse morning sweat with nausea (Clarke); little relief from sweating"},
      {"type":"spacer"},
      {"type":"header","label":"THIRST:","text":"Great thirst for much cold water (Clarke); thirsty even during chill โ€” paradoxical finding"},
      {"type":"spacer"},
      {"type":"plain","text":"PAUCITY OF SYMPTOMS โ€” prescribed when NO clear indicating mental or physical modalities; mild changeable mood (Boericke)"},
      {"type":"plain","text":"Haemorrhages: bright red from any orifice; rapid but SOFT pulse"},
      {"type":"plain","text":"NO anxious restlessness (vs Aconite); NO dusky dark face (vs Gelsemium); NO hard bounding pulse (vs Belladonna)"},
      {"type":"plain","text":"Differentiating: 1st stage + 1 PM chill + Soft pulse + No clear modalities โ€” the 'first stage' remedy = Ferrum Phos"},
    ]
  },

  {
    "title": "BAPTISIA TINCTORIA",
    "content": [
      {"type":"header","label":"TYPE:","text":"Typhoid fever (#1 remedy), Typhus fever, Shipboard/epidemic fever, Septicaemia, Adynamic fevers, Influenza (epidemic with extreme prostration)"},
      {"type":"spacer"},
      {"type":"header","label":"STAGES:","text":"Continuous/remittent โ€” rapid descent into sepsis; no clear periodicity"},
      {"type":"bullet","label":"Chill โ€“","text":"Chill at ~11 AM (Boericke); chills with rheumatic soreness all over body; chills over back and lower limbs; 3 AM chills with flashes of heat"},
      {"type":"bullet","label":"Heat โ€“","text":"Face DARK, BESOTTED, DUSKY โ€” drunken/intoxicated appearance (pathognomonic โ€” Clarke); dark reddish-purple; whole surface hot and dry; livid spots on body; worse humid heat, fog, indoors"},
      {"type":"bullet","label":"Sweat โ€“","text":"FETID, OFFENSIVE sweat โ€” all secretions offensive (breath, sweat, stool, urine โ€” keynote Boericke); critical sweat on forehead and face RELIEVES in typhus (Clarke); rapid exhaustion after sweating"},
      {"type":"spacer"},
      {"type":"header","label":"THIRST:","text":"Present; thirst noted; offensive mouth; can only swallow LIQUIDS โ€” inability to swallow solids (Boericke keynote)"},
      {"type":"spacer"},
      {"type":"plain","text":"ILLUSION OF DIVIDED PERSONALITY โ€” 'I am in two pieces, cannot find my parts' (pathognomonic โ€” Clarke)"},
      {"type":"plain","text":"Falls asleep MID-SENTENCE while answering; muttering delirium; perfect indifference; stupor"},
      {"type":"plain","text":"PAINLESS prostration โ€” out of proportion to severity; decubitus (bed sores) forms rapidly (Boericke)"},
      {"type":"plain","text":"Differentiating: Besotted face + ALL secretions fetid + Divided self + Falls asleep mid-sentence = Baptisia"},
    ]
  },

  {
    "title": "EUPATORIUM PERFOLIATUM",
    "content": [
      {"type":"header","label":"TYPE:","text":"Intermittent malarial fever, Dengue/Breakbone fever, Influenza with severe bone pain, Bilious remittent fever, Typhoid (gastro-hepatic type)"},
      {"type":"spacer"},
      {"type":"header","label":"STAGES:","text":"All 3 stages โ€” marked periodicity; paroxysm begins 7โ€“9 AM"},
      {"type":"bullet","label":"Chill โ€“","text":"At 7โ€“9 AM (specific clock time โ€” Boericke); patient knows chill is coming because of INTENSE THIRST BEFORE CHILL; cold water HASTENS/WORSENS chill (paradoxical); intense BONE ACHING with moaning during chill; nausea from least motion"},
      {"type":"bullet","label":"Heat โ€“","text":"Heat with throbbing headache; nausea and vomiting of BILE during heat or at close of chill; thirst continues throughout; face flushed; yellow tinge in bilious cases (Boericke)"},
      {"type":"bullet","label":"Sweat โ€“","text":"Perspiration RELIEVES ALL symptoms EXCEPT HEADACHE (most characteristic โ€” Boericke keynote); headache persists through sweat; nocturnal perspiration"},
      {"type":"spacer"},
      {"type":"header","label":"THIRST:","text":"GREAT THIRST โ€” begins BEFORE chill and persists throughout all stages; insatiable; cold water desired but worsens chill (Clarke)"},
      {"type":"spacer"},
      {"type":"plain","text":"BREAKBONE PAINS โ€” excruciating pain in ALL bones as if they would break; most intense bone pain in Materia Medica (Boericke)"},
      {"type":"plain","text":"Vomiting of bile at close of chill or during heat; soreness of eyeballs; throbbing headache in all stages"},
      {"type":"plain","text":"Marked PERIODICITY โ€” 3rd and 7th day headache; anticipates; quotidian/tertian (Boericke)"},
      {"type":"plain","text":"Differentiating: Breakbone pains + Thirst BEFORE chill + Cold water worsens chill + Sweat relieves ALL EXCEPT headache = Eupatorium"},
    ]
  },

]

# โ”€โ”€ Build the PPTX using the original as base (inherits all styles/theme) โ”€โ”€
prs = Presentation(TEMPLATE)

# Remove existing slides (we will add ours)
# python-pptx doesn't have a direct remove method; use XML manipulation
xml_slides = prs.slides._sldIdLst
for _ in range(len(prs.slides)):
    # Remove from rId mapping and slide list
    pass

# Better approach: start fresh from template but keep slide master
# Re-open the template to keep theme, then delete all slides and add new ones

# We use a different strategy: duplicate slide 1 for each remedy, then modify content
# This fully preserves the theme and layout linkage

from pptx.opc.constants import RELATIONSHIP_TYPE as RT
import copy

def clone_slide(prs, slide_index=0):
    """Clone an existing slide and return the new slide."""
    template_slide = prs.slides[slide_index]
    layout = template_slide.slide_layout

    # Add a new slide with the same layout
    new_slide = prs.slides.add_slide(layout)
    return new_slide

def clear_txbody(txBody):
    """Remove all paragraph elements from a txBody."""
    for p in txBody.findall(a('p')):
        txBody.remove(p)

def set_title(slide, title_text):
    """Set the title placeholder text with Times New Roman bold underline."""
    for shape in slide.placeholders:
        if shape.placeholder_format.type.name in ('TITLE', 'CENTER_TITLE') or shape.placeholder_format.idx == 0:
            tf = shape.text_frame
            # Clear existing
            txBody = tf._txBody
            clear_txbody(txBody)
            # Build new para
            p = etree.SubElement(txBody, a('p'))
            r = make_run(title_text, bold=True, underline=True, font='Times New Roman')
            p.append(r)
            end = etree.SubElement(p, a('endParaRPr'))
            end.set('lang', 'en-IN'); end.set('b', '1'); end.set('u', 'sng'); end.set('dirty', '0')
            lat = etree.SubElement(end, a('latin')); lat.set('typeface', 'Times New Roman')
            cs2 = etree.SubElement(end, a('cs')); cs2.set('typeface', 'Times New Roman')
            return
    # Fallback: first shape with text
    for shape in slide.shapes:
        if shape.has_text_frame:
            tf = shape.text_frame
            txBody = tf._txBody
            clear_txbody(txBody)
            p = etree.SubElement(txBody, a('p'))
            r = make_run(title_text, bold=True, underline=True, font='Times New Roman')
            p.append(r)
            return

def set_content(slide, content_items):
    """Set the body/content placeholder."""
    BODY_FONT = 'Calibri'
    # Find content placeholder (idx=1)
    content_shape = None
    for shape in slide.placeholders:
        if shape.placeholder_format.idx == 1:
            content_shape = shape
            break
    if content_shape is None:
        # Try the largest text shape that isn't the title
        for shape in slide.shapes:
            if shape.has_text_frame and shape.name != 'Title 1':
                content_shape = shape
                break
    if content_shape is None:
        print("WARNING: no content shape found on slide")
        return

    tf = content_shape.text_frame
    txBody = tf._txBody

    # Remove all existing paragraphs
    clear_txbody(txBody)

    # Set noAutofit
    bodyPr = txBody.find(a('bodyPr'))
    if bodyPr is None:
        bodyPr = etree.SubElement(txBody, a('bodyPr'))
    # remove existing noAutofit/spAutoFit and add noAutofit
    for child in list(bodyPr):
        bodyPr.remove(child)
    etree.SubElement(bodyPr, a('noAutofit'))

    for item in content_items:
        t = item.get('type', 'plain')

        if t == 'spacer':
            p = etree.Element(a('p'))
            ppr = etree.SubElement(p, a('pPr'))
            ppr.set('marL', '0'); ppr.set('indent', '0')
            etree.SubElement(ppr, a('buNone'))
            epr = etree.SubElement(p, a('endParaRPr'))
            epr.set('lang', 'en-US'); epr.set('dirty', '0')
            txBody.append(p)

        elif t == 'header':
            label = item.get('label', '')
            text  = item.get('text', '')
            p = etree.Element(a('p'))
            ppr = etree.SubElement(p, a('pPr'))
            ppr.set('marL', '0'); ppr.set('indent', '0')
            etree.SubElement(ppr, a('buNone'))
            if label:
                p.append(make_run(label + ' ', bold=True, font=BODY_FONT))
            if text:
                p.append(make_run(text, bold=False, font=BODY_FONT))
            txBody.append(p)

        elif t == 'bullet':
            label = item.get('label', '')
            text  = item.get('text', '')
            p = etree.Element(a('p'))
            ppr = etree.SubElement(p, a('pPr'))
            buFont = etree.SubElement(ppr, a('buFont'))
            buFont.set('typeface', 'Courier New')
            buChar = etree.SubElement(ppr, a('buChar'))
            buChar.set('char', 'o')
            if label:
                p.append(make_run(label + ' ', bold=True, font=BODY_FONT))
            if text:
                p.append(make_run(text, bold=False, font=BODY_FONT))
            txBody.append(p)

        elif t == 'sub':
            text  = item.get('text', '')
            label = item.get('label', '')
            p = etree.Element(a('p'))
            ppr = etree.SubElement(p, a('pPr'))
            ppr.set('marL', '457200')
            buFont = etree.SubElement(ppr, a('buFont'))
            buFont.set('typeface', 'Arial')
            buChar = etree.SubElement(ppr, a('buChar'))
            buChar.set('char', 'โ€“')
            if label:
                p.append(make_run(label + ' ', bold=True, font=BODY_FONT))
            p.append(make_run(text, bold=False, font=BODY_FONT))
            txBody.append(p)

        elif t == 'plain':
            text = item.get('text', '')
            p = etree.Element(a('p'))
            ppr = etree.SubElement(p, a('pPr'))
            buFont = etree.SubElement(ppr, a('buFont'))
            buFont.set('typeface', 'Wingdings')
            buChar = etree.SubElement(ppr, a('buChar'))
            buChar.set('char', '\u00d8')  # Wingdings solid diamond
            p.append(make_run(text, bold=False, font=BODY_FONT))
            txBody.append(p)


# โ”€โ”€ Delete all original slides โ”€โ”€
# We need to keep the slide count = 0 and add fresh ones
# We'll copy slide XML structure from original slide 1 as template for layout
# Then add 8 slides

# Re-open fresh and delete existing slides by manipulating the presentation XML
prs2 = Presentation(TEMPLATE)

# Get the slide layout (Title and Content = index 1)
slide_layout = None
for i, layout in enumerate(prs2.slide_master.slide_layouts):
    if 'Content' in layout.name or layout.name == 'Title and Content':
        slide_layout = layout
        break
if slide_layout is None:
    slide_layout = prs2.slide_layouts[1]

print(f"Using layout: {slide_layout.name}")

# Remove all existing slides from the presentation
# python-pptx internal: _sldIdLst
from pptx.opc.packuri import PackURI
import re

# Remove existing slides cleanly
slides = prs2.slides
slide_ids = list(slides._sldIdLst)
for sld_id in slide_ids:
    rId = sld_id.get('r:id') or sld_id.get('{http://schemas.openxmlformats.org/officeDocument/2006/relationships}id')
    slides._sldIdLst.remove(sld_id)

print(f"Removed {len(slide_ids)} original slides")

# Add 8 new slides
for remedy in remedies:
    slide = prs2.slides.add_slide(slide_layout)
    set_title(slide, remedy['title'])
    set_content(slide, remedy['content'])
    print(f"  Added slide: {remedy['title']}")

# Save
buf = BytesIO()
prs2.save(buf)
with open(OUTPUT, 'wb') as f:
    f.write(buf.getvalue())

print(f"\nSaved: {OUTPUT}")
Running Command

cd /tmp/workspace/homeopathy-fever-pptx && python3 build_format_match.py 2>&1

Running Command

cd /tmp/workspace/homeopathy-fever-pptx && python3 -c " from pptx import Presentation prs = Presentation('Fever_Remedies_Boericke_Clarke.pptx') print('Slides:', len(prs.slides)) for i, slide in enumerate(prs.slides, 1): for shape in slide.shapes: if shape.has_text_frame: txt = shape.text_frame.text[:80] if txt.strip(): print(f' Slide {i}: {txt!r}') break "

Running Command

ls -lh /tmp/workspace/homeopathy-fever-pptx/Fever_Remedies_Boericke_Clarke.pptx && python3 -c " from pptx import Presentation prs = Presentation('/tmp/workspace/homeopathy-fever-pptx/Fever_Remedies_Boericke_Clarke.pptx') # Check slide 1 full content slide = prs.slides[0] for shape in slide.shapes: if shape.has_text_frame: print(f'Shape: {shape.name}') for para in shape.text_frame.paragraphs: t = para.text.strip() if t: print(f' {t[:100]}') "

Your file is ready. Download it here:

Fever Remedies Boericke Clarke

Presentation ยท PPTX


What was done:

  • Format matched exactly to your uploaded file:
    • Same white background and Office theme
    • Same font: Times New Roman Bold + Underlined for remedy title
    • Same Calibri body with bold labels + normal text
    • Same bullet styles: o for stage bullets, Wingdings diamond for key points
    • Same noAutofit content box behavior
  • 8 slides in your requested order:
    1. Aconitum Napellus
    2. Belladonna
    3. Chamomilla
    4. Bryonia Alba
    5. Gelsemium Sempervirens
    6. Ferrum Phosphoricum
    7. Baptisia Tinctoria
    8. Eupatorium Perfoliatum
  • Each slide structure:
    • TYPE (clinical fever types)
    • STAGES: Chill / Heat / Sweat (with specific Boericke + Clarke citations)
    • THIRST (separate highlighted section)
    • Key particulars + Differentiating symptom at the bottom
  • Fully editable in PowerPoint or Google Slides
This is a shared conversation. Sign in to Orris to start your own chat.