A person is suffering to neck pain whenever he lifts something or didnt eat anything gor much time it ovcurs rarely but only stops after taking a tablet what can it be
neck pain when lifting heavy objects and when hungry fasting causes diagnosis
neck pain triggered by exertion AND empty stomach angina equivalent referred pain
"Some patients do not report chest pain, but report jaw, neck, ear, arm, or epigastric discomfort. Among this constellation of cardiac angina equivalent symptoms, exertional dyspnea should be considered a potentially high-risk finding."
| Possible Cause | Lifting Trigger | Hunger Trigger | Tablet Relief |
|---|---|---|---|
| Cardiac Angina (Anginal Equivalent) | YES (classic) | Possible (physiological stress) | YES (if nitrate) |
| Hunger Headache + Neck Tension | Less likely | YES (classic) | YES (painkiller/sugar) |
| GERD / Acid Reflux | YES (increased pressure) | YES (empty stomach = more acid) | YES (if antacid) |
| Cervical Disc / Muscle Strain | YES | No | YES (painkiller) |
Important disclaimer: This is informational only. Neck pain triggered by exertion that is relieved by medication should be evaluated by a doctor, especially to rule out a cardiac cause, which can be life-threatening if missed.
Generate a medical symptom diary template to track triggers
What format would you like the symptom diary in?
ls /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or not found"
mkdir -p /home/daytona/workspace/symptom-diary && python3 << 'EOF' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm, mm from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer, HRFlowable from reportlab.platypus import KeepTogether from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY from reportlab.pdfgen import canvas from reportlab.platypus.flowables import Flowable # Color palette DARK_BLUE = colors.HexColor('#1a3a5c') MED_BLUE = colors.HexColor('#2e6da4') LIGHT_BLUE = colors.HexColor('#d6e8f7') ACCENT_TEAL = colors.HexColor('#1a8c8c') ACCENT_LIGHT = colors.HexColor('#e0f4f4') ROW_ALT = colors.HexColor('#f5f9ff') WHITE = colors.white BORDER = colors.HexColor('#b0c8e0') WARN_RED = colors.HexColor('#c0392b') WARN_LIGHT = colors.HexColor('#fdecea') GRAY_TEXT = colors.HexColor('#555555') LIGHT_GRAY = colors.HexColor('#f0f0f0') path = "/home/daytona/workspace/symptom-diary/Medical_Symptom_Diary.pdf" doc = SimpleDocTemplate( path, pagesize=A4, rightMargin=1.5*cm, leftMargin=1.5*cm, topMargin=1.8*cm, bottomMargin=1.8*cm, title="Medical Symptom Diary", author="Orris Health Assistant" ) styles = getSampleStyleSheet() def h1(text): return Paragraph(text, ParagraphStyle('h1', fontSize=18, textColor=WHITE, fontName='Helvetica-Bold', alignment=TA_CENTER, spaceAfter=4)) def h2(text): return Paragraph(text, ParagraphStyle('h2', fontSize=11, textColor=DARK_BLUE, fontName='Helvetica-Bold', spaceBefore=8, spaceAfter=4)) def h3(text, color=DARK_BLUE): return Paragraph(text, ParagraphStyle('h3', fontSize=9, textColor=color, fontName='Helvetica-Bold', spaceBefore=4, spaceAfter=2)) def body(text, size=8.5): return Paragraph(text, ParagraphStyle('body', fontSize=size, textColor=GRAY_TEXT, fontName='Helvetica', leading=13)) def small(text, color=GRAY_TEXT): return Paragraph(text, ParagraphStyle('small', fontSize=7.5, textColor=color, fontName='Helvetica', leading=11)) def label(text): return Paragraph(text, ParagraphStyle('label', fontSize=8, textColor=DARK_BLUE, fontName='Helvetica-Bold')) def cell(text, size=8, color=colors.black, bold=False): fn = 'Helvetica-Bold' if bold else 'Helvetica' return Paragraph(text, ParagraphStyle('cell', fontSize=size, textColor=color, fontName=fn, leading=11)) story = [] # ─── HEADER BANNER ─────────────────────────────────────────────────────────── header_data = [[h1("🩺 MEDICAL SYMPTOM DIARY"), h1("Neck Pain & Trigger Tracker")]] header_table = Table(header_data, colWidths=[9.5*cm, 9.5*cm]) header_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), DARK_BLUE), ('ROWBACKGROUNDS', (0,0), (-1,-1), [DARK_BLUE]), ('TOPPADDING', (0,0), (-1,-1), 10), ('BOTTOMPADDING', (0,0), (-1,-1), 10), ('LEFTPADDING', (0,0), (-1,-1), 10), ('RIGHTPADDING', (0,0), (-1,-1), 10), ('ROUNDEDCORNERS', [6, 6, 6, 6]), ])) story.append(header_table) story.append(Spacer(1, 0.3*cm)) # ─── PATIENT INFO ───────────────────────────────────────────────────────────── info_data = [ [label("Patient Name:"), cell("_"*38), label("Age:"), cell("_"*10), label("Doctor:"), cell("_"*20)], [label("Diagnosis (if known):"), cell("_"*38), label("Phone:"), cell("_"*10), label("Start Date:"), cell("_"*20)], ] info_table = Table(info_data, colWidths=[3.2*cm, 5.5*cm, 1.5*cm, 2*cm, 1.8*cm, 4*cm]) info_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), LIGHT_BLUE), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 6), ('RIGHTPADDING', (0,0), (-1,-1), 4), ('BOX', (0,0), (-1,-1), 0.8, MED_BLUE), ('LINEBELOW', (0,0), (-1,0), 0.5, BORDER), ])) story.append(info_table) story.append(Spacer(1, 0.35*cm)) # ─── HOW TO USE ─────────────────────────────────────────────────────────────── tip_data = [[ small("📋 <b>HOW TO USE:</b> Fill in one row each time you experience a symptom episode. " "Rate pain 0 (none) - 10 (worst). Bring this diary to every doctor's appointment. " "Note the exact tablet name and how long before relief.", color=DARK_BLUE) ]] tip_table = Table(tip_data, colWidths=[19*cm]) tip_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), ACCENT_LIGHT), ('BOX', (0,0), (-1,-1), 0.8, ACCENT_TEAL), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('LEFTPADDING', (0,0), (-1,-1), 8), ('RIGHTPADDING', (0,0), (-1,-1), 8), ])) story.append(tip_table) story.append(Spacer(1, 0.4*cm)) # ─── DAILY LOG TABLE HEADER ─────────────────────────────────────────────────── story.append(h2("📅 Daily Symptom Log")) col_headers = [ cell("Date &\nTime", bold=True, color=WHITE), cell("Pain\nSite", bold=True, color=WHITE), cell("Pain\nScore\n(0-10)", bold=True, color=WHITE), cell("Duration\n(mins)", bold=True, color=WHITE), cell("Trigger\n✓ all that apply", bold=True, color=WHITE), cell("Last Meal\n(hours ago)", bold=True, color=WHITE), cell("Activity\nBefore", bold=True, color=WHITE), cell("Tablet /\nMedicine", bold=True, color=WHITE), cell("Relief?\n(Y/N/Part)", bold=True, color=WHITE), cell("Other\nSymptoms", bold=True, color=WHITE), ] log_rows = [col_headers] trigger_options = small("☐ Lifting\n☐ Hunger/Fasting\n☐ Stress\n☐ Exertion\n☐ Cold\n☐ Posture\n☐ Other:___") # 8 data rows for i in range(8): bg = WHITE if i % 2 == 0 else ROW_ALT row = [ cell("\n\n"), cell("\n\n"), cell("\n\n"), cell("\n\n"), trigger_options, cell("\n\n"), cell("\n\n"), cell("\n\n"), cell("\n\n"), cell("\n\n"), ] log_rows.append(row) col_widths = [2.3*cm, 1.6*cm, 1.4*cm, 1.5*cm, 3.2*cm, 1.6*cm, 2*cm, 2.2*cm, 1.5*cm, 2.7*cm] log_table = Table(log_rows, colWidths=col_widths, rowHeights=[1.1*cm] + [1.8*cm]*8) log_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), DARK_BLUE), ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, ROW_ALT]), ('GRID', (0,0), (-1,-1), 0.5, BORDER), ('BOX', (0,0), (-1,-1), 1, MED_BLUE), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ('LEFTPADDING', (0,0), (-1,-1), 4), ('RIGHTPADDING', (0,0), (-1,-1), 4), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('ALIGN', (2,0), (3,-1), 'CENTER'), ])) story.append(log_table) story.append(Spacer(1, 0.5*cm)) # ─── TRIGGER CHECKLIST ──────────────────────────────────────────────────────── story.append(h2("⚡ Known Triggers Checklist (circle or highlight)")) triggers = [ ["Physical / Exertion", "Dietary / Metabolic", "Environmental", "Emotional / Lifestyle"], [ small("• Heavy lifting\n• Exercise / running\n• Climbing stairs\n• Carrying bags\n• Sudden movement\n• Bending over"), small("• Skipping meals\n• Fasting / empty stomach\n• Dehydration\n• Caffeine\n• Alcohol\n• High-fat meal"), small("• Cold weather\n• Heat / humidity\n• Strong odors\n• Bright lights\n• Noise / crowds\n• Travel"), small("• Stress / anxiety\n• Poor sleep\n• Fatigue\n• Screen time\n• Sitting long hours\n• Posture issues"), ] ] trig_table = Table(triggers, colWidths=[4.75*cm]*4) trig_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), MED_BLUE), ('TEXTCOLOR', (0,0), (-1,0), WHITE), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,0), 8.5), ('BACKGROUND', (0,1), (0,1), LIGHT_BLUE), ('BACKGROUND', (1,1), (1,1), ACCENT_LIGHT), ('BACKGROUND', (2,1), (2,1), colors.HexColor('#fff8e1')), ('BACKGROUND', (3,1), (3,1), colors.HexColor('#fce4ec')), ('GRID', (0,0), (-1,-1), 0.5, BORDER), ('BOX', (0,0), (-1,-1), 1, MED_BLUE), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('LEFTPADDING', (0,0), (-1,-1), 8), ('RIGHTPADDING', (0,0), (-1,-1), 6), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('ALIGN', (0,0), (-1,0), 'CENTER'), ])) story.append(trig_table) story.append(Spacer(1, 0.5*cm)) # ─── MEDICATION LOG ─────────────────────────────────────────────────────────── story.append(h2("💊 Medication & Relief Log")) med_header = [ cell("Date", bold=True, color=WHITE), cell("Tablet / Medicine Name", bold=True, color=WHITE), cell("Dose", bold=True, color=WHITE), cell("Time Taken", bold=True, color=WHITE), cell("Time to Relief\n(minutes)", bold=True, color=WHITE), cell("Complete Relief?", bold=True, color=WHITE), cell("Side Effects\n(if any)", bold=True, color=WHITE), cell("Notes", bold=True, color=WHITE), ] med_rows = [med_header] for i in range(6): med_rows.append([cell(""), cell(""), cell(""), cell(""), cell(""), cell(""), cell(""), cell("")]) med_table = Table(med_rows, colWidths=[2*cm, 3.5*cm, 1.5*cm, 1.8*cm, 2.2*cm, 2.2*cm, 2.4*cm, 3.4*cm], rowHeights=[1*cm] + [0.85*cm]*6) med_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), ACCENT_TEAL), ('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, ACCENT_LIGHT]), ('GRID', (0,0), (-1,-1), 0.5, BORDER), ('BOX', (0,0), (-1,-1), 1, ACCENT_TEAL), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ('LEFTPADDING', (0,0), (-1,-1), 5), ('RIGHTPADDING', (0,0), (-1,-1), 4), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('ALIGN', (4,0), (5,-1), 'CENTER'), ])) story.append(med_table) story.append(Spacer(1, 0.5*cm)) # ─── RED FLAGS WARNING ──────────────────────────────────────────────────────── warn_data = [[ Paragraph("<b>🚨 SEEK EMERGENCY CARE IMMEDIATELY IF YOU EXPERIENCE:</b>", ParagraphStyle('warn_h', fontSize=9, textColor=WARN_RED, fontName='Helvetica-Bold')), small("Chest pain or pressure • Jaw or left arm pain • Sudden severe headache • " "Breathlessness at rest • Sweating + neck pain • Dizziness or fainting • " "Numbness or weakness in arm • Pain lasting >20 minutes not relieved by tablet", color=WARN_RED) ]] warn_table = Table(warn_data, colWidths=[5.5*cm, 13.5*cm]) warn_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), WARN_LIGHT), ('BOX', (0,0), (-1,-1), 1.2, WARN_RED), ('TOPPADDING', (0,0), (-1,-1), 7), ('BOTTOMPADDING', (0,0), (-1,-1), 7), ('LEFTPADDING', (0,0), (-1,-1), 8), ('RIGHTPADDING', (0,0), (-1,-1), 8), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ])) story.append(warn_table) story.append(Spacer(1, 0.4*cm)) # ─── NOTES SECTION ──────────────────────────────────────────────────────────── story.append(h2("📝 Doctor / Notes Section")) notes_lines = [] for _ in range(5): notes_lines.append([small(""), small("")]) notes_area = Table( [[small("Additional observations, doctor's comments, upcoming tests or investigations:\n\n" "___________________________________________________________________________________________\n\n" "___________________________________________________________________________________________\n\n" "___________________________________________________________________________________________\n\n" "___________________________________________________________________________________________\n\n" "___________________________________________________________________________________________")]], colWidths=[19*cm] ) notes_area.setStyle(TableStyle([ ('BOX', (0,0), (-1,-1), 0.8, BORDER), ('BACKGROUND', (0,0), (-1,-1), LIGHT_GRAY), ('TOPPADDING', (0,0), (-1,-1), 8), ('BOTTOMPADDING', (0,0), (-1,-1), 8), ('LEFTPADDING', (0,0), (-1,-1), 10), ('RIGHTPADDING', (0,0), (-1,-1), 10), ])) story.append(notes_area) story.append(Spacer(1, 0.3*cm)) # ─── FOOTER ─────────────────────────────────────────────────────────────────── footer_data = [[ small("Generated by Orris Health Assistant • For personal medical tracking only • " "This diary does not replace professional medical advice • Always consult your doctor", color=MED_BLUE), small("Page 1 of 1", color=MED_BLUE), ]] footer_table = Table(footer_data, colWidths=[15*cm, 4*cm]) footer_table.setStyle(TableStyle([ ('TOPPADDING', (0,0), (-1,-1), 3), ('ALIGN', (1,0), (1,0), 'RIGHT'), ('LINEABOVE', (0,0), (-1,0), 0.5, BORDER), ])) story.append(footer_table) doc.build(story) print("PDF created successfully at:", path) EOF
Medical Symptom Diary
PDF Document · PDF
Can you make me a ppt presentation on ligaments and tensions present in out body
mkdir -p /home/daytona/workspace/ligaments-ppt && cat > /home/daytona/workspace/ligaments-ppt/build.js << 'JSEOF' const pptxgen = require("pptxgenjs"); const pres = new pptxgen(); pres.layout = 'LAYOUT_WIDE'; pres.title = 'Ligaments & Tendons of the Human Body'; pres.author = 'Orris Health Assistant'; // ── COLOR PALETTE ────────────────────────────────────────────── const C = { darkBg: "0D1B2A", // very dark navy midBg: "1B3A5C", // deep blue accent: "2196F3", // vivid blue accentAlt: "00BCD4", // teal lightBlue: "E3F2FD", // light blue bg white: "FFFFFF", offWhite: "F0F7FF", yellow: "FFD600", orange: "FF7043", green: "43A047", red: "E53935", gray: "90A4AE", darkGray: "37474F", cardBg: "162B40", // card dark bg teal: "00838F", }; // ══════════════════════════════════════════════════════════════ // SLIDE 1 - TITLE // ══════════════════════════════════════════════════════════════ { const s = pres.addSlide(); // Full dark background s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:"100%", fill:{color: C.darkBg} }); // Left accent bar s.addShape(pres.ShapeType.rect, { x:0, y:0, w:0.08, h:"100%", fill:{color: C.accent} }); // Blue glow circle behind title s.addShape(pres.ShapeType.ellipse, { x:1.5, y:0.3, w:6, h:6, fill:{color: C.midBg}, line:{color: C.midBg} }); s.addShape(pres.ShapeType.ellipse, { x:2.2, y:0.6, w:4.5, h:4.5, fill:{color: "163050"}, line:{color: "163050"} }); // Right image panel s.addShape(pres.ShapeType.rect, { x:8.5, y:0, w:4.8, h:"100%", fill:{color: C.cardBg} }); // Decorative bone icon panel s.addText("🦴 🦵 💪", { x:8.6, y:2.2, w:4.5, h:1.5, fontSize:38, align:"center", color: C.accent }); s.addText("Musculoskeletal System", { x:8.5, y:3.9, w:4.8, h:0.5, fontSize:11, align:"center", color: C.accentAlt, italic:true }); // Main title s.addText("LIGAMENTS &\nTENDONS", { x:0.3, y:1.1, w:7.9, h:2.4, fontSize:54, bold:true, color:C.white, align:"center", fontFace:"Calibri", charSpacing:2 }); // Subtitle bar s.addShape(pres.ShapeType.rect, { x:1.8, y:3.65, w:5.2, h:0.06, fill:{color: C.accent} }); s.addText("Structure, Function & Clinical Significance in the Human Body", { x:0.3, y:3.8, w:7.9, h:0.7, fontSize:15, color:C.accentAlt, align:"center", italic:true }); // Footer tags const tags = ["Anatomy","Orthopaedics","Biomechanics","Clinical"]; tags.forEach((t,i)=>{ s.addShape(pres.ShapeType.roundRect, { x:0.4+i*1.95, y:5.1, w:1.7, h:0.38, fill:{color: C.midBg}, line:{color:C.accent,pt:1}, rectRadius:0.06 }); s.addText(t, { x:0.4+i*1.95, y:5.1, w:1.7, h:0.38, fontSize:10, color:C.accent, align:"center", bold:true }); }); } // ══════════════════════════════════════════════════════════════ // SLIDE 2 - OVERVIEW / WHAT ARE THEY // ══════════════════════════════════════════════════════════════ { const s = pres.addSlide(); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:"100%", fill:{color: C.offWhite} }); // Slide title bar s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:1.0, fill:{color: C.midBg} }); s.addShape(pres.ShapeType.rect, { x:0, y:1.0, w:"100%", h:0.06, fill:{color: C.accent} }); s.addText("Overview: What Are Ligaments & Tendons?", { x:0.3, y:0.1, w:12.5, h:0.8, fontSize:26, bold:true, color:C.white, valign:"middle" }); s.addText("Slide 2", { x:12.6, y:0.1, w:0.7, h:0.8, fontSize:9, color:C.gray, align:"right", valign:"middle" }); // Left card - Ligaments s.addShape(pres.ShapeType.roundRect, { x:0.3, y:1.25, w:6.1, h:4.6, fill:{color: C.midBg}, line:{color:C.accent,pt:1.5}, rectRadius:0.12 }); s.addShape(pres.ShapeType.rect, { x:0.3, y:1.25, w:6.1, h:0.65, fill:{color: C.accent} }); s.addText("🔗 LIGAMENTS", { x:0.35, y:1.27, w:5.95, h:0.6, fontSize:16, bold:true, color:C.white, align:"center" }); const ligFacts = [ "Connect bone to bone", "Made of dense fibrous connective tissue", "Predominantly Type I collagen fibers", "Limit excessive joint movement", "Provide passive joint stability", "Contain mechanoreceptors for proprioception", "Poor blood supply → slow healing", ]; ligFacts.forEach((f,i)=>{ s.addText("▸ "+f, { x:0.5, y:2.05+i*0.52, w:5.7, h:0.48, fontSize:11, color:C.white }); }); // Right card - Tendons s.addShape(pres.ShapeType.roundRect, { x:6.9, y:1.25, w:6.1, h:4.6, fill:{color: "1A3A1A"}, line:{color:C.green,pt:1.5}, rectRadius:0.12 }); s.addShape(pres.ShapeType.rect, { x:6.9, y:1.25, w:6.1, h:0.65, fill:{color: C.green} }); s.addText("💪 TENDONS", { x:6.95, y:1.27, w:5.95, h:0.6, fontSize:16, bold:true, color:C.white, align:"center" }); const tenFacts = [ "Connect muscle to bone", "Made of dense fibrous connective tissue", "Predominantly Type I collagen fibers", "Transmit muscle force to skeleton", "Produce joint movement", "Surrounded by a tendon sheath (synovial)", "Better blood supply than ligaments", ]; tenFacts.forEach((f,i)=>{ s.addText("▸ "+f, { x:7.1, y:2.05+i*0.52, w:5.7, h:0.48, fontSize:11, color:C.white }); }); } // ══════════════════════════════════════════════════════════════ // SLIDE 3 - MICROSTRUCTURE // ══════════════════════════════════════════════════════════════ { const s = pres.addSlide(); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:"100%", fill:{color: C.darkBg} }); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:1.0, fill:{color: C.teal} }); s.addShape(pres.ShapeType.rect, { x:0, y:1.0, w:"100%", h:0.06, fill:{color: C.accentAlt} }); s.addText("Microstructure of Ligaments & Tendons", { x:0.3, y:0.1, w:12.5, h:0.8, fontSize:26, bold:true, color:C.white, valign:"middle" }); s.addText("Slide 3", { x:12.6, y:0.1, w:0.7, h:0.8, fontSize:9, color:C.offWhite, align:"right", valign:"middle" }); // Hierarchy boxes const levels = [ { label:"FIBRIL", desc:"Smallest unit\nCollagen triple helix", icon:"🧬", color:"2A4A7A" }, { label:"FIBER", desc:"Bundle of fibrils\nCrimped waviness for stretch", icon:"〰️", color:"1E5F74" }, { label:"FASCICLE", desc:"Bundle of fibers\nSurrounded by endotenon", icon:"🔗", color:"0D6EFD" }, { label:"TENDON/\nLIGAMENT", desc:"Bundles of fascicles\nEpitenon sheath covering", icon:"💪", color:"007BFF" }, ]; levels.forEach((l,i)=>{ const x = 0.4 + i*3.15; s.addShape(pres.ShapeType.roundRect, { x:x, y:1.2, w:2.9, h:4.6, fill:{color:l.color}, line:{color:C.accentAlt,pt:1}, rectRadius:0.1 }); s.addText(l.icon, { x:x, y:1.3, w:2.9, h:0.8, fontSize:28, align:"center" }); s.addShape(pres.ShapeType.rect, { x:x, y:2.15, w:2.9, h:0.06, fill:{color: C.accentAlt} }); s.addText(l.label, { x:x, y:2.3, w:2.9, h:0.7, fontSize:14, bold:true, color:C.yellow, align:"center" }); s.addText(l.desc, { x:x+0.1, y:3.1, w:2.7, h:1.2, fontSize:10.5, color:C.white, align:"center" }); // Arrow between boxes if(i<3) s.addShape(pres.ShapeType.rightArrow, { x:x+2.95, y:3.1, w:0.15, h:0.4, fill:{color:C.accentAlt} }); }); // Bottom info bar s.addShape(pres.ShapeType.roundRect, { x:0.4, y:5.95, w:12.6, h:0.8, fill:{color: "0A2A4A"}, line:{color:C.accent,pt:1}, rectRadius:0.08 }); s.addText("Key Cells: Fibroblasts (tenocytes in tendons) — responsible for synthesizing collagen and maintaining matrix integrity", { x:0.5, y:6.0, w:12.4, h:0.7, fontSize:11, color:C.accentAlt, align:"center" }); } // ══════════════════════════════════════════════════════════════ // SLIDE 4 - LIGAMENTS OF THE KNEE // ══════════════════════════════════════════════════════════════ { const s = pres.addSlide(); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:"100%", fill:{color: C.offWhite} }); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:1.0, fill:{color: C.midBg} }); s.addShape(pres.ShapeType.rect, { x:0, y:1.0, w:"100%", h:0.06, fill:{color: C.yellow} }); s.addText("🦵 Ligaments of the Knee", { x:0.3, y:0.1, w:12.5, h:0.8, fontSize:26, bold:true, color:C.white, valign:"middle" }); s.addText("Slide 4", { x:12.6, y:0.1, w:0.7, h:0.8, fontSize:9, color:C.gray, align:"right", valign:"middle" }); const knee = [ { abbr:"ACL", name:"Anterior Cruciate Ligament", color:"E53935", icon:"⚔️", func:"Resists anterior tibial translation & internal rotation. Most commonly injured knee ligament.", injury:"Torn in sudden pivoting, sports contact. MOI: valgus + external rotation force." }, { abbr:"PCL", name:"Posterior Cruciate Ligament", color:"1565C0", icon:"🛡️", func:"Resists posterior tibial translation. Strongest ligament in the knee.", injury:"Dashboard injury (posterior force). Less common than ACL injury." }, { abbr:"MCL", name:"Medial Collateral Ligament", color:"2E7D32", icon:"🔰", func:"Resists valgus (outward) force. Checks external rotation of tibia.", injury:"Most common knee ligament injury. Valgus stress — lateral blow to knee." }, { abbr:"LCL", name:"Lateral Collateral Ligament", color:"F57F17", icon:"🔱", func:"Resists varus (inward) force. Part of the posterolateral corner complex.", injury:"Varus stress injury. Often part of multi-ligament knee dislocation." }, ]; knee.forEach((k,i)=>{ const y = 1.2 + i*1.35; s.addShape(pres.ShapeType.roundRect, { x:0.3, y:y, w:12.7, h:1.25, fill:{color:"F7FBFF"}, line:{color:k.color,pt:2}, rectRadius:0.09 }); s.addShape(pres.ShapeType.roundRect, { x:0.3, y:y, w:1.1, h:1.25, fill:{color:k.color}, rectRadius:0.09 }); s.addText(k.abbr, { x:0.3, y:y, w:1.1, h:1.25, fontSize:16, bold:true, color:C.white, align:"center", valign:"middle" }); s.addText(k.icon+" "+k.name, { x:1.55, y:y+0.05, w:7, h:0.45, fontSize:13, bold:true, color:k.color }); s.addText("Function: "+k.func, { x:1.55, y:y+0.47, w:11.3, h:0.38, fontSize:9.5, color:C.darkGray }); s.addText("Injury: "+k.injury, { x:1.55, y:y+0.82, w:11.3, h:0.38, fontSize:9.5, color:"555555", italic:true }); }); } // ══════════════════════════════════════════════════════════════ // SLIDE 5 - SHOULDER LIGAMENTS // ══════════════════════════════════════════════════════════════ { const s = pres.addSlide(); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:"100%", fill:{color: C.darkBg} }); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:1.0, fill:{color:"4A148C"} }); s.addShape(pres.ShapeType.rect, { x:0, y:1.0, w:"100%", h:0.06, fill:{color:"CE93D8"} }); s.addText("💪 Ligaments of the Shoulder & Elbow", { x:0.3, y:0.1, w:12.5, h:0.8, fontSize:26, bold:true, color:C.white, valign:"middle" }); s.addText("Slide 5", { x:12.6, y:0.1, w:0.7, h:0.8, fontSize:9, color:C.gray, align:"right", valign:"middle" }); // Shoulder section s.addText("SHOULDER (Glenohumeral Joint)", { x:0.3, y:1.15, w:6.2, h:0.45, fontSize:13, bold:true, color:"CE93D8" }); const shoulder = [ { name:"Glenohumeral Ligaments (Superior/Middle/Inferior)", desc:"Primary static stabilizers of the shoulder. Inferior GHL (IGHL) is most important — prevents anterior dislocation." }, { name:"Coracohumeral Ligament", desc:"Reinforces rotator cuff interval. Limits external rotation and inferior translation." }, { name:"Coracoacromial Ligament", desc:"Forms the coracoacromial arch. Protects the rotator cuff tendons above." }, { name:"Acromioclavicular (AC) Ligaments", desc:"Maintain horizontal stability of the AC joint. Torn in AC joint sprains (Grades I–VI)." }, { name:"Coracoclavicular Ligaments (Conoid+Trapezoid)", desc:"Maintain vertical AC stability. Disrupted in Grade III+ AC injuries." }, ]; shoulder.forEach((it,i)=>{ s.addShape(pres.ShapeType.roundRect, { x:0.3, y:1.7+i*0.89, w:6.2, h:0.82, fill:{color:"2A1040"}, line:{color:"9C27B0",pt:1}, rectRadius:0.07 }); s.addText("• "+it.name, { x:0.45, y:1.73+i*0.89, w:5.9, h:0.32, fontSize:10, bold:true, color:"CE93D8" }); s.addText(it.desc, { x:0.45, y:2.01+i*0.89, w:5.9, h:0.38, fontSize:9, color:C.white }); }); // Elbow section s.addText("ELBOW", { x:7.0, y:1.15, w:6.0, h:0.45, fontSize:13, bold:true, color:"80DEEA" }); const elbow = [ { name:"Ulnar Collateral Ligament (UCL)", desc:"3 bands: Anterior (strongest), Posterior, Transverse. Key for valgus stability. 'Tommy John' injury in throwers." }, { name:"Radial Collateral Ligament (RCL)", desc:"Resists varus stress. Provides lateral stability of the elbow joint." }, { name:"Annular Ligament", desc:"Encircles the radial head, holds it against the ulna. Torn in 'nursemaid's elbow' (radial head subluxation in children)." }, { name:"Lateral Ulnar Collateral Ligament (LUCL)", desc:"Prevents posterolateral rotatory instability (PLRI) of the elbow." }, ]; elbow.forEach((it,i)=>{ s.addShape(pres.ShapeType.roundRect, { x:7.0, y:1.7+i*1.1, w:6.2, h:1.0, fill:{color:"0A2A30"}, line:{color:"0097A7",pt:1}, rectRadius:0.07 }); s.addText("• "+it.name, { x:7.15, y:1.73+i*1.1, w:5.9, h:0.35, fontSize:10, bold:true, color:"80DEEA" }); s.addText(it.desc, { x:7.15, y:2.04+i*1.1, w:5.9, h:0.52, fontSize:9, color:C.white }); }); } // ══════════════════════════════════════════════════════════════ // SLIDE 6 - SPINE & HIP LIGAMENTS // ══════════════════════════════════════════════════════════════ { const s = pres.addSlide(); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:"100%", fill:{color: C.offWhite} }); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:1.0, fill:{color:"004D40"} }); s.addShape(pres.ShapeType.rect, { x:0, y:1.0, w:"100%", h:0.06, fill:{color:"1DE9B6"} }); s.addText("🦴 Ligaments of the Spine & Hip", { x:0.3, y:0.1, w:12.5, h:0.8, fontSize:26, bold:true, color:C.white, valign:"middle" }); s.addText("Slide 6", { x:12.6, y:0.1, w:0.7, h:0.8, fontSize:9, color:C.gray, align:"right", valign:"middle" }); // Spine table s.addText("SPINAL LIGAMENTS", { x:0.3, y:1.15, w:6.5, h:0.45, fontSize:13, bold:true, color:"004D40" }); const spinalLigs = [ ["Anterior Longitudinal Ligament (ALL)", "Runs along anterior vertebral bodies. Resists hyperextension. Injured in extension injuries."], ["Posterior Longitudinal Ligament (PLL)", "Runs along posterior vertebral bodies inside canal. Resists hyperflexion."], ["Ligamentum Flavum", "Between adjacent laminae. High elastin content — allows extension. Can hypertrophy → spinal stenosis."], ["Interspinous / Supraspinous", "Connect spinous processes. Resist flexion. Supraspinous palpable as 'interspinous ligament.'"], ["Ligamentum Nuchae", "Strong ligament in cervical spine (nuchal ligament). Cervical spine equivalent of supraspinous."], ["Iliolumbar Ligament", "L4-L5 transverse process to iliac crest. Stabilizes lumbosacral junction."], ]; spinalLigs.forEach((row,i)=>{ const rowBg = i%2===0 ? "E8F5E9" : "F1F8F1"; s.addShape(pres.ShapeType.rect, { x:0.3, y:1.65+i*0.73, w:6.5, h:0.7, fill:{color:rowBg}, line:{color:"A5D6A7",pt:0.5} }); s.addText(row[0], { x:0.4, y:1.68+i*0.73, w:6.2, h:0.28, fontSize:9.5, bold:true, color:"00695C" }); s.addText(row[1], { x:0.4, y:1.94+i*0.73, w:6.2, h:0.3, fontSize:8.5, color:C.darkGray }); }); // Hip section s.addText("HIP (Coxofemoral Joint)", { x:7.1, y:1.15, w:6.0, h:0.45, fontSize:13, bold:true, color:"004D40" }); const hip = [ { name:"Iliofemoral Ligament\n(Y-Ligament of Bigelow)", desc:"Strongest ligament in the body. Inverted Y shape. Resists hip extension and external rotation. Prevents hip from hyperextending when standing.", color:"1B5E20" }, { name:"Pubofemoral Ligament", desc:"Anterior-inferior capsule. Resists abduction and external rotation. Triangular shape. Thinner than iliofemoral.", color:"2E7D32" }, { name:"Ischiofemoral Ligament", desc:"Posterior capsule. Resists medial rotation and adduction. Spirals superiorly to the greater trochanter.", color:"388E3C" }, { name:"Ligamentum Teres\n(Round Ligament of Femur)", desc:"Intra-articular. Carries artery to femoral head (in children especially). Its role in hip stability is secondary.", color:"43A047" }, ]; hip.forEach((h,i)=>{ s.addShape(pres.ShapeType.roundRect, { x:7.1, y:1.7+i*1.1, w:6.2, h:1.0, fill:{color: i%2===0?"E8F5E9":"F1F8F1"}, line:{color:h.color,pt:1.5}, rectRadius:0.07 }); s.addText("• "+h.name, { x:7.25, y:1.73+i*1.1, w:5.9, h:0.38, fontSize:10, bold:true, color:h.color }); s.addText(h.desc, { x:7.25, y:2.06+i*1.1, w:5.9, h:0.52, fontSize:9, color:C.darkGray }); }); } // ══════════════════════════════════════════════════════════════ // SLIDE 7 - ANKLE & FOOT LIGAMENTS // ══════════════════════════════════════════════════════════════ { const s = pres.addSlide(); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:"100%", fill:{color: C.darkBg} }); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:1.0, fill:{color:"BF360C"} }); s.addShape(pres.ShapeType.rect, { x:0, y:1.0, w:"100%", h:0.06, fill:{color:"FF7043"} }); s.addText("🦶 Ligaments of the Ankle & Foot", { x:0.3, y:0.1, w:12.5, h:0.8, fontSize:26, bold:true, color:C.white, valign:"middle" }); s.addText("Slide 7", { x:12.6, y:0.1, w:0.7, h:0.8, fontSize:9, color:C.gray, align:"right", valign:"middle" }); // Lateral ankle s.addText("LATERAL ANKLE (Most commonly sprained)", { x:0.3, y:1.15, w:6.2, h:0.45, fontSize:12, bold:true, color:"FF7043" }); const lateral = [ { name:"ATFL — Anterior Talofibular Ligament", desc:"Weakest lateral ligament. FIRST to tear in inversion sprain (most common ankle injury). Resist anterior talar displacement." }, { name:"CFL — Calcaneofibular Ligament", desc:"Second most injured. Crosses two joints. Resist inversion. Torn in more severe sprains." }, { name:"PTFL — Posterior Talofibular Ligament", desc:"Strongest lateral ligament. Rarely torn. Only injured in complete dislocation." }, ]; lateral.forEach((l,i)=>{ s.addShape(pres.ShapeType.roundRect, { x:0.3, y:1.7+i*1.1, w:6.2, h:1.0, fill:{color:"2A1008"}, line:{color:"FF7043",pt:1.5}, rectRadius:0.07 }); s.addText(l.name, { x:0.45, y:1.73+i*1.1, w:5.9, h:0.35, fontSize:10, bold:true, color:"FF7043" }); s.addText(l.desc, { x:0.45, y:2.04+i*1.1, w:5.9, h:0.54, fontSize:9.5, color:C.white }); }); // Medial ankle s.addText("MEDIAL ANKLE (Deltoid Ligament)", { x:7.0, y:1.15, w:6.2, h:0.45, fontSize:12, bold:true, color:"64B5F6" }); const medAnkle = [ { name:"Superficial Deltoid", desc:"Tibionavicular, tibiocalcaneal, superficial tibiotalar fibers. Broad fan-shaped band. Resists eversion." }, { name:"Deep Deltoid (Tibiotalar)", desc:"Strongest part. Resists lateral talar shift. Torn in severe eversion sprains or ankle fractures (e.g., bimalleolar)." }, { name:"Plantar Fascia (Plantar Aponeurosis)", desc:"Not a true ligament but a strong fibrous band. Spans heel to toes. Inflammation = plantar fasciitis (most common cause of heel pain)." }, { name:"Spring Ligament\n(Plantar Calcaneonavicular)", desc:"Supports the head of the talus. Critical for maintaining the medial longitudinal arch. Failure leads to flatfoot deformity." }, ]; medAnkle.forEach((m,i)=>{ s.addShape(pres.ShapeType.roundRect, { x:7.0, y:1.7+i*1.1, w:6.2, h:1.0, fill:{color:"0A1A2A"}, line:{color:"1565C0",pt:1}, rectRadius:0.07 }); s.addText(m.name, { x:7.15, y:1.73+i*1.1, w:5.9, h:0.35, fontSize:10, bold:true, color:"64B5F6" }); s.addText(m.desc, { x:7.15, y:2.04+i*1.1, w:5.9, h:0.54, fontSize:9.5, color:C.white }); }); } // ══════════════════════════════════════════════════════════════ // SLIDE 8 - MAJOR TENDONS // ══════════════════════════════════════════════════════════════ { const s = pres.addSlide(); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:"100%", fill:{color: C.offWhite} }); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:1.0, fill:{color:"1A237E"} }); s.addShape(pres.ShapeType.rect, { x:0, y:1.0, w:"100%", h:0.06, fill:{color:"7986CB"} }); s.addText("🏃 Major Tendons of the Human Body", { x:0.3, y:0.1, w:12.5, h:0.8, fontSize:26, bold:true, color:C.white, valign:"middle" }); s.addText("Slide 8", { x:12.6, y:0.1, w:0.7, h:0.8, fontSize:9, color:C.gray, align:"right", valign:"middle" }); const tendons = [ { name:"Achilles Tendon\n(Calcaneal Tendon)", region:"Ankle", muscles:"Gastrocnemius + Soleus → Calcaneus", func:"Plantarflexion of ankle. Thickest, strongest tendon in the body. Rupture at 2–6 cm above insertion (watershed zone).", color:"E53935", emoji:"🦶" }, { name:"Patellar Tendon\n(Patellar Ligament)", region:"Knee", muscles:"Quadriceps → Tibial Tuberosity", func:"Extends the knee. Connects patella to tibia. Rupture causes loss of knee extension; palpable defect below patella.", color:"1565C0", emoji:"🦵" }, { name:"Rotator Cuff Tendons\n(SITS)", region:"Shoulder", muscles:"Supraspinatus, Infraspinatus, Teres Minor, Subscapularis", func:"Supraspinatus: initiates abduction. Others: rotators + depression. Most common: supraspinatus tear in overhead athletes.", color:"6A1B9A", emoji:"💪" }, { name:"Biceps Tendon\n(Long Head)", region:"Shoulder", muscles:"Biceps Brachii → Supraglenoid tubercle", func:"Long head passes through bicipital groove. Common site of tendinopathy and rupture (Popeye sign on rupture).", color:"00695C", emoji:"💪" }, { name:"Flexor/Extensor\nTendons of Hand", region:"Hand/Wrist", muscles:"Forearm muscles → Fingers via carpal tunnel", func:"FDP, FDS (flexors) + EDC (extensor). Run in sheaths. Jersey finger = FDP avulsion. Mallet finger = EDC avulsion at DIP.", color:"E65100", emoji:"✋" }, { name:"Quadriceps Tendon", region:"Knee", muscles:"Quadriceps group → Patella", func:"Merges into patellar tendon. Rupture in older patients (>40y). Complete rupture = inability to extend knee, palpable gap above patella.", color:"2E7D32", emoji:"🦵" }, ]; tendons.forEach((t,i)=>{ const col = i%2, row = Math.floor(i/2); const x = 0.3 + col*6.55; const y = 1.2 + row*1.8; s.addShape(pres.ShapeType.roundRect, { x:x, y:y, w:6.3, h:1.7, fill:{color:"FAFEFF"}, line:{color:t.color,pt:1.5}, rectRadius:0.09 }); s.addShape(pres.ShapeType.rect, { x:x, y:y, w:6.3, h:0.52, fill:{color:t.color} }); s.addText(t.emoji+" "+t.name, { x:x+0.1, y:y+0.06, w:4.5, h:0.4, fontSize:11, bold:true, color:C.white }); s.addText(t.region, { x:x+4.6, y:y+0.06, w:1.6, h:0.4, fontSize:9, color:C.white, align:"right", italic:true }); s.addText("Muscles: "+t.muscles, { x:x+0.1, y:y+0.57, w:6.1, h:0.32, fontSize:8.5, color:t.color, bold:true }); s.addText(t.func, { x:x+0.1, y:y+0.87, w:6.1, h:0.75, fontSize:8.5, color:C.darkGray }); }); } // ══════════════════════════════════════════════════════════════ // SLIDE 9 - TENDINOPATHY & INJURIES // ══════════════════════════════════════════════════════════════ { const s = pres.addSlide(); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:"100%", fill:{color: C.darkBg} }); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:1.0, fill:{color:"880E4F"} }); s.addShape(pres.ShapeType.rect, { x:0, y:1.0, w:"100%", h:0.06, fill:{color:"F48FB1"} }); s.addText("⚠️ Common Injuries: Sprains, Strains & Ruptures", { x:0.3, y:0.1, w:12.5, h:0.8, fontSize:24, bold:true, color:C.white, valign:"middle" }); s.addText("Slide 9", { x:12.6, y:0.1, w:0.7, h:0.8, fontSize:9, color:C.gray, align:"right", valign:"middle" }); // Sprain grades s.addText("LIGAMENT SPRAIN — Grades", { x:0.3, y:1.12, w:6.2, h:0.45, fontSize:13, bold:true, color:"F48FB1" }); const grades = [ { g:"Grade I", col:"F57F17", desc:"Microscopic tears. Mild swelling. No laxity. Full weight bearing. RICE treatment." }, { g:"Grade II", col:"E65100", desc:"Partial tear. Moderate swelling/bruising. Some laxity. Partial weight bearing. Immobilisation." }, { g:"Grade III", col:"B71C1C", desc:"Complete rupture. Severe swelling. Marked laxity. Non-weight bearing. May need surgery." }, ]; grades.forEach((g,i)=>{ s.addShape(pres.ShapeType.roundRect, { x:0.3, y:1.65+i*1.35, w:6.2, h:1.25, fill:{color:"2A0A15"}, line:{color:g.col,pt:2}, rectRadius:0.09 }); s.addShape(pres.ShapeType.roundRect, { x:0.3, y:1.65+i*1.35, w:1.5, h:1.25, fill:{color:g.col}, rectRadius:0.09 }); s.addText(g.g, { x:0.3, y:1.65+i*1.35, w:1.5, h:1.25, fontSize:14, bold:true, color:C.white, align:"center", valign:"middle" }); s.addText(g.desc, { x:1.95, y:1.78+i*1.35, w:4.4, h:1.0, fontSize:10.5, color:C.white }); }); // Tendon injuries s.addText("TENDON INJURIES", { x:7.0, y:1.12, w:6.2, h:0.45, fontSize:13, bold:true, color:"80DEEA" }); const tinj = [ { name:"Tendinopathy / Tendinosis", desc:"Chronic degenerative change in tendon without true inflammation. Overuse. Disorganised collagen. Pain + thickening.", col:"0097A7" }, { name:"Tenosynovitis", desc:"Inflammation of tendon sheath. De Quervain's tenosynovitis (thumb extensors). Finkelstein's test positive.", col:"00838F" }, { name:"Partial Tear", desc:"Incomplete disruption. Persistent pain with activity. MRI shows high signal in tendon. Conservative or PRP.", col:"006064" }, { name:"Complete Rupture", desc:"Full disruption. Immediate pain + loss of function. Achilles (Thompson test), patellar (cannot extend knee). Surgery often required.", col:"004D40" }, ]; tinj.forEach((t,i)=>{ s.addShape(pres.ShapeType.roundRect, { x:7.0, y:1.65+i*1.1, w:6.2, h:1.0, fill:{color:"0A1A2A"}, line:{color:t.col,pt:1.5}, rectRadius:0.07 }); s.addText("▸ "+t.name, { x:7.15, y:1.68+i*1.1, w:5.9, h:0.35, fontSize:10.5, bold:true, color:"80DEEA" }); s.addText(t.desc, { x:7.15, y:1.99+i*1.1, w:5.9, h:0.52, fontSize:9.5, color:C.white }); }); } // ══════════════════════════════════════════════════════════════ // SLIDE 10 - HEALING & CLINICAL NOTES // ══════════════════════════════════════════════════════════════ { const s = pres.addSlide(); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:"100%", fill:{color: C.offWhite} }); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:1.0, fill:{color:"33691E"} }); s.addShape(pres.ShapeType.rect, { x:0, y:1.0, w:"100%", h:0.06, fill:{color:"AED581"} }); s.addText("🔬 Healing, Treatment & Clinical Pearls", { x:0.3, y:0.1, w:12.5, h:0.8, fontSize:26, bold:true, color:C.white, valign:"middle" }); s.addText("Slide 10", { x:12.5, y:0.1, w:0.8, h:0.8, fontSize:9, color:C.gray, align:"right", valign:"middle" }); // Healing phases s.addText("HEALING PHASES OF LIGAMENTS/TENDONS", { x:0.3, y:1.12, w:6.3, h:0.45, fontSize:12, bold:true, color:"33691E" }); const phases = [ { phase:"Phase 1\nInflammatory", time:"0–72 hrs", desc:"Hematoma, inflammatory cells. Cytokines released. Fibroblast recruitment begins.", col:"E53935" }, { phase:"Phase 2\nProliferative", time:"Days 3–21", desc:"Type III collagen laid down (weaker). Neo-vascularisation. Granulation tissue formation.", col:"F57F17" }, { phase:"Phase 3\nRemodelling", time:"Weeks–Years", desc:"Type III → Type I collagen. Fibers align along stress lines. Full strength may take 12–24 months.", col:"43A047" }, ]; phases.forEach((p,i)=>{ s.addShape(pres.ShapeType.roundRect, { x:0.3, y:1.7+i*1.45, w:6.2, h:1.35, fill:{ color: i===0?"FFF8F8": i===1?"FFF8F0":"F1F8F1"}, line:{color:p.col,pt:1.5}, rectRadius:0.09 }); s.addShape(pres.ShapeType.roundRect, { x:0.3, y:1.7+i*1.45, w:1.7, h:1.35, fill:{color:p.col}, rectRadius:0.09 }); s.addText(p.phase, { x:0.3, y:1.7+i*1.45, w:1.7, h:0.75, fontSize:11, bold:true, color:C.white, align:"center", valign:"middle" }); s.addText(p.time, { x:0.3, y:2.35+i*1.45, w:1.7, h:0.55, fontSize:9.5, color:C.white, align:"center", italic:true }); s.addText(p.desc, { x:2.1, y:1.85+i*1.45, w:4.3, h:1.05, fontSize:9.5, color:C.darkGray }); }); // Clinical pearls s.addText("CLINICAL PEARLS", { x:7.0, y:1.12, w:6.2, h:0.45, fontSize:12, bold:true, color:"33691E" }); const pearls = [ { icon:"💡", text:"Thompson Test — squeezing calf should plantarflex foot. Negative test (no movement) = complete Achilles rupture." }, { icon:"💡", text:"Lachman Test — most sensitive test for ACL rupture (90% sensitivity vs. 62% for anterior drawer test)." }, { icon:"💡", text:"Valgus Stress Test — detects MCL injury; done at 0° and 30° of knee flexion." }, { icon:"💡", text:"Ottawa Ankle Rules — clinical decision tool to decide if X-ray needed in ankle sprain (bone tenderness at malleolus or inability to weight bear)." }, { icon:"💡", text:"RICE Protocol — Rest, Ice, Compression, Elevation for acute ligament/tendon injuries." }, { icon:"💡", text:"PRP (Platelet-Rich Plasma) — emerging treatment for chronic tendinopathy and partial tears. Growth factors promote healing." }, { icon:"💡", text:"Proprioception retraining is essential in rehab — ligaments contain mechanoreceptors that are disrupted in injury." }, ]; pearls.forEach((p,i)=>{ s.addShape(pres.ShapeType.roundRect, { x:7.0, y:1.65+i*0.77, w:6.2, h:0.71, fill:{color: i%2===0?"E8F5E9":"F1F8F1"}, line:{color:"A5D6A7",pt:0.5}, rectRadius:0.06 }); s.addText(p.icon+" "+p.text, { x:7.1, y:1.68+i*0.77, w:5.95, h:0.62, fontSize:8.8, color:C.darkGray }); }); } // ══════════════════════════════════════════════════════════════ // SLIDE 11 - SUMMARY / CLOSING // ══════════════════════════════════════════════════════════════ { const s = pres.addSlide(); s.addShape(pres.ShapeType.rect, { x:0, y:0, w:"100%", h:"100%", fill:{color: C.darkBg} }); // Diagonal accent s.addShape(pres.ShapeType.rect, { x:0, y:0, w:0.12, h:"100%", fill:{color: C.accent} }); s.addShape(pres.ShapeType.rect, { x:0.18, y:0, w:0.05, h:"100%", fill:{color: C.accentAlt} }); s.addText("Key Takeaways", { x:0.5, y:0.3, w:12.3, h:0.75, fontSize:30, bold:true, color:C.white, charSpacing:1 }); s.addShape(pres.ShapeType.rect, { x:0.5, y:1.1, w:4, h:0.05, fill:{color: C.accent} }); const takeaways = [ { emoji:"🔗", title:"Ligaments = Bone to Bone", text:"Passive stabilizers — resist excessive movement and provide joint integrity." }, { emoji:"💪", title:"Tendons = Muscle to Bone", text:"Active force transmitters — convert muscle contraction into joint movement." }, { emoji:"🧬", title:"Collagen is Key", text:"Type I collagen provides tensile strength; organized hierarchically from fibril to fascicle." }, { emoji:"⚡", title:"Injuries are Graded", text:"Sprains (ligaments) I–III; Strains (muscles/tendons) I–III; Complete ruptures need surgery." }, { emoji:"🔄", title:"Healing Takes Time", text:"3 phases: Inflammation → Proliferation → Remodelling. Full strength: 12–24 months." }, { emoji:"🏥", title:"Proprioception Matters", text:"Mechanoreceptors in ligaments are disrupted in injury. Rehab must include balance training." }, ]; takeaways.forEach((t,i)=>{ const col = i%2, row = Math.floor(i/2); const x = 0.5 + col*6.6; const y = 1.3 + row*1.6; s.addShape(pres.ShapeType.roundRect, { x:x, y:y, w:6.2, h:1.5, fill:{color:C.cardBg}, line:{color:C.accent,pt:1}, rectRadius:0.1 }); s.addText(t.emoji+" "+t.title, { x:x+0.15, y:y+0.1, w:5.8, h:0.45, fontSize:13, bold:true, color:C.accentAlt }); s.addText(t.text, { x:x+0.15, y:y+0.6, w:5.8, h:0.75, fontSize:10.5, color:C.white }); }); s.addText("Source: Gray's Anatomy for Students • Miller's Orthopaedics • Fuster & Hurst's The Heart • Campbell's Operative Orthopaedics", { x:0.5, y:6.85, w:12.3, h:0.4, fontSize:8, color:C.gray, align:"center", italic:true }); } // ── WRITE FILE ───────────────────────────────────────────────── const outPath = "/home/daytona/workspace/ligaments-ppt/Ligaments_and_Tendons.pptx"; pres.writeFile({ fileName: outPath }).then(()=>{ console.log("PPT created:", outPath); }).catch(e=>{ console.error(e); process.exit(1); }); JSEOF node /home/daytona/workspace/ligaments-ppt/build.js
Ligaments and Tendons
Presentation · PPTX
| Slide | Topic |
|---|---|
| 1 | Title Slide - dark navy theme |
| 2 | Overview - Ligaments vs Tendons (side-by-side comparison) |
| 3 | Microstructure - Fibril → Fiber → Fascicle → Tendon hierarchy |
| 4 | Knee Ligaments - ACL, PCL, MCL, LCL with functions & injuries |
| 5 | Shoulder & Elbow Ligaments - Glenohumeral, AC, UCL, Annular |
| 6 | Spine & Hip Ligaments - ALL, PLL, Ligamentum Flavum, Iliofemoral |
| 7 | Ankle & Foot Ligaments - ATFL, CFL, Deltoid, Plantar Fascia |
| 8 | Major Tendons - Achilles, Patellar, Rotator Cuff, Biceps, Hand tendons |
| 9 | Injuries - Sprain Grades I/II/III, Tendinopathy, Ruptures |
| 10 | Healing Phases + Clinical Pearls (Thompson test, Lachman, Ottawa Rules) |
| 11 | Key Takeaways summary slide |