explain the joints of the upper limb with detailed explanation and mnemonics to learn, secondly, explain the landmarks of the upper limb - quadrangular space, upper/lower triangular space, cubital fossa, ulnar tunnel, bicipital aponeurosis, anatomical snuff box, compartments & potential spaces of hand, and axilla. make sure to write their clinicals (if present) respectively, and if there are any distinction-scoring points, do explain them as well. all this for the level of MS1 so make it easy too
| Mnemonic | What it remembers |
|---|---|
| SITS | Rotator cuff muscles (Supraspinatus, Infraspinatus, Teres minor, Subscapularis) |
| 1-2-3 | Branches of axillary artery parts (1, 2, 3 branches per part) |
| TAN | Cubital fossa contents lateral to medial: Tendon → Artery → Nerve |
| QTT | 3 posterior shoulder spaces: Quadrangular (Axillary n.) → Triangular (Scapular circumflex) → Triangular interval (Radial n.) |
| P-H (Pisiform-Hamate) | Ulnar tunnel/Guyon's canal walls |
| S-T | Snuff box floor = Scaphoid + Trapezium |
| DAB/PAD | Dorsal interossei Abduct, Palmar interossei Adduct |
Generate a PowerPoint presentation on upper limb joints and landmarks with clinical cases
ls -la /home/daytona/workspace/ && mkdir -p /home/daytona/workspace/upper-limb-ppt
~/upper-limb-ppt/generate.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Upper Limb: Joints & Landmarks";
pres.author = "Anatomy MS1";
// ─── PALETTE ───────────────────────────────────────────────────────────────
const C = {
navy: "0D1B2A", // primary dark
cobalt: "1A4C8E", // accent blue
teal: "0E7490", // section accent
gold: "E9A319", // highlight
red: "C0392B", // clinical/danger
light: "EAF2FB", // light bg
white: "FFFFFF",
grey: "6B7280",
lgrey: "D1D5DB",
midgrey: "374151",
};
// ─── HELPERS ────────────────────────────────────────────────────────────────
function addSlideBg(slide, color) {
slide.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 10, h: 5.625, fill: { color }, line: { width: 0 }
});
}
function sectionHeader(slide, num, title) {
addSlideBg(slide, C.cobalt);
// accent bar left
slide.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 0.12, h: 5.625, fill: { color: C.gold }, line: { width: 0 }
});
slide.addText(`0${num}`, {
x: 0.4, y: 1.2, w: 2, h: 1.4, fontSize: 80, bold: true,
color: "FFFFFF", transparency: 20, fontFace: "Calibri"
});
slide.addText(title, {
x: 2.8, y: 1.7, w: 6.8, h: 1.8, fontSize: 36, bold: true,
color: C.white, fontFace: "Calibri", valign: "middle"
});
}
function contentSlide(slide, title, accent) {
addSlideBg(slide, C.light);
// top bar
slide.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 10, h: 0.75, fill: { color: accent || C.cobalt }, line: { width: 0 }
});
slide.addText(title, {
x: 0.35, y: 0.08, w: 9.3, h: 0.6, fontSize: 18, bold: true,
color: C.white, fontFace: "Calibri", valign: "middle", margin: 0
});
}
function clinicalSlide(slide, title) {
addSlideBg(slide, C.navy);
slide.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 10, h: 0.75, fill: { color: C.red }, line: { width: 0 }
});
slide.addText("🩺 " + title, {
x: 0.35, y: 0.08, w: 9.3, h: 0.6, fontSize: 17, bold: true,
color: C.white, fontFace: "Calibri", valign: "middle", margin: 0
});
}
function infoBox(slide, x, y, w, h, header, lines, headerColor, isLight) {
const bgColor = isLight ? C.white : C.navy;
const textColor = isLight ? C.midgrey : C.lgrey;
const hColor = isLight ? (headerColor || C.cobalt) : (headerColor || C.gold);
slide.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y, w, h, fill: { color: bgColor }, rectRadius: 0.08,
shadow: { type: "outer", color: "000000", blur: 5, offset: 2, angle: 135, opacity: 0.12 }
});
slide.addText(header, {
x: x + 0.12, y: y + 0.05, w: w - 0.24, h: 0.34,
fontSize: 10.5, bold: true, color: hColor, fontFace: "Calibri", margin: 0
});
const textItems = lines.map((l, i) => ({
text: l,
options: { bullet: { type: "bullet" }, breakLine: i < lines.length - 1, fontSize: 9.5, color: textColor, fontFace: "Calibri" }
}));
slide.addText(textItems, {
x: x + 0.12, y: y + 0.42, w: w - 0.18, h: h - 0.5,
fontFace: "Calibri", fontSize: 9.5, color: textColor, valign: "top"
});
}
function tagBadge(slide, x, y, label, color) {
slide.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y, w: 2.1, h: 0.3, fill: { color }, rectRadius: 0.06, line: { width: 0 }
});
slide.addText(label, {
x, y, w: 2.1, h: 0.3, fontSize: 9, bold: true, color: C.white,
align: "center", valign: "middle", fontFace: "Calibri", margin: 0
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addSlideBg(s, C.navy);
// gradient-like side accent
s.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 3.5, h: 5.625, fill: { color: C.cobalt }, line: { width: 0 }
});
s.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: C.gold }, line: { width: 0 }
});
// anatomical cross icon (simple circle + lines)
s.addShape(pres.shapes.OVAL, {
x: 0.5, y: 0.6, w: 2.5, h: 2.5,
fill: { color: C.teal, transparency: 30 }, line: { color: C.gold, width: 2 }
});
s.addText("✦", { x: 0.5, y: 0.6, w: 2.5, h: 2.5, fontSize: 48, color: C.white, align: "center", valign: "middle" });
s.addText("UPPER LIMB", {
x: 3.8, y: 0.7, w: 6, h: 0.7, fontSize: 28, bold: true,
charSpacing: 5, color: C.gold, fontFace: "Calibri", valign: "middle"
});
s.addText("Joints & Landmarks", {
x: 3.8, y: 1.4, w: 6, h: 0.9, fontSize: 34, bold: true,
color: C.white, fontFace: "Calibri", valign: "middle"
});
s.addText("with Clinical Cases", {
x: 3.8, y: 2.25, w: 6, h: 0.5, fontSize: 17, italic: true,
color: C.lgrey, fontFace: "Calibri", valign: "middle"
});
s.addShape(pres.shapes.RECTANGLE, {
x: 3.8, y: 2.85, w: 2.2, h: 0.04, fill: { color: C.gold }, line: { width: 0 }
});
s.addText("MS1 Anatomy • Upper Limb Module", {
x: 3.8, y: 3.05, w: 6, h: 0.4, fontSize: 12, color: C.lgrey,
fontFace: "Calibri", valign: "middle"
});
const topics = ["Joints of the Upper Limb", "Axilla & Apertures", "Cubital Fossa", "Wrist Landmarks", "Hand Spaces", "Clinical Cases"];
topics.forEach((t, i) => {
s.addText("→ " + t, {
x: 3.8, y: 3.6 + i * 0.29, w: 6, h: 0.28,
fontSize: 10.5, color: C.lgrey, fontFace: "Calibri", valign: "middle"
});
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 2 — SECTION: JOINTS
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
sectionHeader(s, 1, "Joints of the Upper Limb");
s.addText("From shoulder to fingertip — 8 joint groups", {
x: 2.8, y: 3.2, w: 7, h: 0.5, fontSize: 15, italic: true,
color: C.lgrey, fontFace: "Calibri"
});
const mnems = [
{ t: "SITS", sub: "Rotator Cuff" },
{ t: "TAN", sub: "Cubital Fossa" },
{ t: "QTT", sub: "3 Spaces" },
];
mnems.forEach((m, i) => {
s.addShape(pres.shapes.OVAL, {
x: 0.4 + i * 0.85, y: 3.8, w: 0.6, h: 0.6,
fill: { color: C.gold }, line: { width: 0 }
});
s.addText(m.t, { x: 0.4 + i * 0.85, y: 3.8, w: 0.6, h: 0.6, fontSize: 7.5, bold: true, color: C.navy, align: "center", valign: "middle" });
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 3 — SHOULDER JOINT
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "Shoulder (Glenohumeral) Joint", C.cobalt);
infoBox(s, 0.2, 0.9, 3.0, 2.0, "JOINT TYPE & BONES", [
"Ball-and-socket (spheroidal) synovial joint",
"Head of humerus (ball) + glenoid cavity (socket)",
"Most MOBILE joint — but most commonly DISLOCATED",
"Glenoid labrum deepens socket by ~5 mm",
"Glenoid is 3-4x SMALLER than humeral head",
], C.cobalt, true);
infoBox(s, 3.35, 0.9, 3.3, 2.0, "LIGAMENTS (3 GH + 1 CHL)", [
"Superior GHL — limits inferior translation",
"Middle GHL — limits ER at <45° abduction",
"Inferior GHL — most important; 'hammock' at 90° abd",
"Coracohumeral lig — stabilizes biceps tendon",
], C.teal, true);
infoBox(s, 6.8, 0.9, 3.0, 2.0, "ROTATOR CUFF — SITS", [
"S — Supraspinatus (suprascapular n.) — initiates abduction",
"I — Infraspinatus (suprascapular n.) — ext. rotation",
"T — Teres minor (axillary n.) — ext. rotation",
"S — Subscapularis (subscapular n.) — int. rotation",
], C.gold, true);
infoBox(s, 0.2, 3.05, 4.5, 2.35, "MOVEMENTS", [
"Flexion / Extension",
"Abduction / Adduction",
"Medial / Lateral rotation",
"Circumduction",
"NB: Scapulothoracic rhythm — 2:1 ratio (2° glenohumeral : 1° scapular rotation)",
], C.cobalt, true);
infoBox(s, 4.85, 3.05, 4.95, 2.35, "★ DISTINCTION POINTS", [
"Inferior GHL = most important stabilizer (forms 'hammock')",
"SITS = primary stabilizers — NOT bony architecture",
"SC joint is the ONLY bony link to axial skeleton",
"Post. dislocation = electric shock / seizure = 'light bulb sign'",
], C.gold, true);
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 4 — ELBOW JOINT
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "Elbow Joint — 3 Articulations, 1 Synovial Cavity", C.teal);
// key concept box across top
s.addShape(pres.shapes.RECTANGLE, {
x: 0.2, y: 0.9, w: 9.6, h: 0.5, fill: { color: C.teal }, line: { width: 0 }
});
s.addText("KEY CONCEPT: Three joints share ONE common synovial cavity — injection of one treats all three.", {
x: 0.2, y: 0.9, w: 9.6, h: 0.5, fontSize: 11, bold: true,
color: C.white, fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
infoBox(s, 0.2, 1.55, 3.1, 1.7, "HUMEROULNAR (HINGE)", [
"Trochlea of humerus + trochlear notch of ulna",
"Allows: Flexion & Extension",
"Primary articulation of elbow",
], C.cobalt, true);
infoBox(s, 3.45, 1.55, 3.1, 1.7, "HUMERORADIAL (HINGE)", [
"Capitulum of humerus + head of radius",
"Allows: Flexion & Extension",
"Also participates in prono-supination",
], C.cobalt, true);
infoBox(s, 6.7, 1.55, 3.1, 1.7, "PROXIMAL RADIOULNAR (PIVOT)", [
"Head of radius + radial notch of ulna",
"Annular ligament wraps radial neck",
"Allows: Pronation & Supination",
], C.cobalt, true);
infoBox(s, 0.2, 3.4, 4.5, 2.0, "COLLATERAL LIGAMENTS", [
"UCL (medial) — anterior bundle = primary valgus restraint",
" Pitcher's elbow = UCL injury in throwers",
"RCL (lateral) — includes annular ligament",
" Pulled elbow — radial head subluxes from annular lig.",
" Occurs in children <5 yrs after sharp pull on hand",
], C.teal, true);
infoBox(s, 4.85, 3.4, 4.95, 2.0, "FAT PADS & X-RAY SIGNS", [
"Anterior fat pad — small, normal on lateral X-ray",
"Posterior fat pad — ALWAYS abnormal = effusion / fracture",
"'Sail sign' = elevated anterior fat pad = effusion",
"Carrying angle = 7° valgus (normal)",
"Cubitus varus (gunstock) after malunited supracondylar fracture",
], C.gold, true);
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 5 — WRIST & HAND JOINTS
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "Wrist & Hand Joints", C.cobalt);
// table-style joint overview
const joints = [
["Radiocarpal (Wrist)", "Condyloid (ellipsoid)", "Flexion, Extension, Abd, Add", "Radius + articular disc + scaphoid/lunate/triquetrum"],
["Intercarpal", "Plane", "Limited gliding — contributes to extension", "Proximal & distal carpal rows"],
["CMC of Thumb", "SADDLE", "Flex/Ext/Abd/Add/Rotation/Circumduction", "Trapezium + 1st metacarpal"],
["CMC 2nd-5th", "Plane", "Limited gliding; 5th most mobile", "Distal carpals + metacarpals II-V"],
["MCP joints", "Condyloid", "Flex/Ext/Abd/Add/Circumduction", "Metacarpal heads + proximal phalanges"],
["IP joints", "Hinge", "Flexion & Extension only", "Between phalanges (PIP & DIP)"],
];
const headers = ["JOINT", "TYPE", "MOVEMENTS", "BONES"];
const colW = [2.2, 1.7, 3.2, 2.7];
const colX = [0.2, 2.42, 4.12, 7.32];
// Header row
headers.forEach((h, ci) => {
s.addShape(pres.shapes.RECTANGLE, {
x: colX[ci], y: 0.88, w: colW[ci] - 0.06, h: 0.35,
fill: { color: C.cobalt }, line: { width: 0 }
});
s.addText(h, {
x: colX[ci] + 0.06, y: 0.88, w: colW[ci] - 0.12, h: 0.35,
fontSize: 9, bold: true, color: C.white, fontFace: "Calibri", valign: "middle", margin: 0
});
});
joints.forEach((row, ri) => {
const rowY = 1.28 + ri * 0.55;
const bg = ri % 2 === 0 ? C.white : "F0F7FF";
row.forEach((cell, ci) => {
s.addShape(pres.shapes.RECTANGLE, {
x: colX[ci], y: rowY, w: colW[ci] - 0.06, h: 0.5,
fill: { color: bg }, line: { color: C.lgrey, width: 0.5 }
});
s.addText(cell, {
x: colX[ci] + 0.07, y: rowY + 0.02, w: colW[ci] - 0.14, h: 0.46,
fontSize: 8.5, color: ci === 0 ? C.cobalt : C.midgrey, bold: ci === 0,
fontFace: "Calibri", valign: "middle", wrap: true
});
});
});
// highlight CMC saddle
s.addShape(pres.shapes.RECTANGLE, {
x: colX[1], y: 1.28 + 2*0.55, w: colW[1] - 0.06, h: 0.5,
fill: { color: C.gold, transparency: 20 }, line: { color: C.gold, width: 1 }
});
s.addText("★ Ulna does NOT articulate with carpals — TFCC/articular disc intervenes | Ulnar deviation > Radial deviation (radial styloid extends more distally)", {
x: 0.2, y: 5.1, w: 9.6, h: 0.35, fontSize: 9, italic: true, bold: true,
color: C.cobalt, fontFace: "Calibri", align: "center"
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 6 — SECTION: LANDMARKS
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
sectionHeader(s, 2, "Upper Limb Landmarks");
s.addText("Axilla · Spaces · Fossa · Tunnel · Snuff box · Hand", {
x: 2.8, y: 3.2, w: 7, h: 0.5, fontSize: 14, italic: true,
color: C.lgrey, fontFace: "Calibri"
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 7 — AXILLA
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "The Axilla — Pyramidal Gateway to the Upper Limb", C.cobalt);
infoBox(s, 0.2, 0.9, 4.6, 2.65, "BOUNDARIES", [
"Anterior wall: Pectoralis major (front); pec minor + subclavius (behind)",
"Posterior wall: Subscapularis (top); teres major + lat. dorsi (bottom)",
"Medial wall: Ribs 1-4 + intercostals + serratus anterior",
"Lateral wall: Intertubercular sulcus of humerus (narrowest)",
"Apex (inlet): Lat. border rib I + post. surface clavicle + sup. border scapula",
"Floor: Axillary fascia + skin dome",
], C.cobalt, true);
infoBox(s, 5.0, 0.9, 4.8, 2.65, "CONTENTS — BALMS", [
"B — Brachial plexus (cords surround axillary artery)",
"A — Axillary artery & vein",
"L — Lymph nodes (5 groups) — drain breast + upper limb",
"M — Muscles (proximal biceps brachii, coracobrachialis)",
"S — Subscapular vessels + axillary process of breast",
"Subclavian → Axillary artery at lateral border of rib I",
], C.teal, true);
infoBox(s, 0.2, 3.7, 9.6, 1.75, "AXILLARY ARTERY — 3 PARTS (Divided by Pectoralis Minor) — Mnemonic: 1, 2, 3 branches", [
"Part 1 (medial to pec minor): 1 branch — Superior thoracic artery",
"Part 2 (posterior to pec minor): 2 branches — Thoracoacromial artery + Lateral thoracic artery",
"Part 3 (lateral to pec minor): 3 branches — Subscapular artery + Anterior circumflex humeral artery + Posterior circumflex humeral artery",
], C.gold, true);
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 8 — THREE POSTERIOR SHOULDER SPACES
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "3 Posterior Shoulder Spaces — Mnemonic: QTT (Axillary · Scapular · Radial)", C.teal);
// numbered badges
const spaces = [
{
num: "1", color: C.cobalt, label: "QUADRANGULAR SPACE",
bounds: ["Superior: Inferior border of subscapularis + teres minor", "Inferior: Superior border of teres major", "Medial: Long head of triceps (lateral margin)", "Lateral: Surgical neck of humerus"],
contents: ["Axillary nerve", "Posterior circumflex humeral a/v"],
clin: "Quadrangular space syndrome — axillary nerve compression → deltoid + teres minor atrophy, lateral arm numbness"
},
{
num: "2", color: C.teal, label: "TRIANGULAR SPACE",
bounds: ["Superior: Inferior border of subscapularis / teres minor", "Inferior: Superior border of teres major", "Lateral: MEDIAL margin of long head of triceps"],
contents: ["Circumflex scapular artery & vein", "Communicates axilla ↔ post. scapular region"],
clin: "Less clinically significant; landmark for scapular anastomosis"
},
{
num: "3", color: C.gold, label: "TRIANGULAR INTERVAL",
bounds: ["Superior: Inferior border of teres major", "Medial: Long head of triceps (lateral margin)", "Lateral: Shaft of humerus"],
contents: ["Radial nerve", "Profunda brachii artery (deep brachial a.)"],
clin: "Midshaft humeral fracture → radial nerve injury → WRIST DROP (can't extend wrist/fingers/thumb)"
}
];
spaces.forEach((sp, i) => {
const x = 0.18 + i * 3.27;
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y: 0.9, w: 3.1, h: 4.55,
fill: { color: C.white }, rectRadius: 0.1,
shadow: { type: "outer", color: "000000", blur: 6, offset: 2, angle: 135, opacity: 0.12 }
});
// number badge
s.addShape(pres.shapes.OVAL, {
x: x + 0.1, y: 0.97, w: 0.5, h: 0.5,
fill: { color: sp.color }, line: { width: 0 }
});
s.addText(sp.num, { x: x + 0.1, y: 0.97, w: 0.5, h: 0.5, fontSize: 14, bold: true, color: C.white, align: "center", valign: "middle" });
s.addText(sp.label, {
x: x + 0.68, y: 0.99, w: 2.35, h: 0.46,
fontSize: 9.5, bold: true, color: sp.color, fontFace: "Calibri", valign: "middle"
});
// Borders
s.addText("BOUNDARIES:", {
x: x + 0.12, y: 1.55, w: 2.86, h: 0.25,
fontSize: 8.5, bold: true, color: C.midgrey, fontFace: "Calibri"
});
const bItems = sp.bounds.map((b, bi) => ({
text: b,
options: { bullet: { type: "bullet" }, breakLine: bi < sp.bounds.length - 1, fontSize: 8, color: C.midgrey }
}));
s.addText(bItems, { x: x + 0.12, y: 1.8, w: 2.86, h: 1.4, fontFace: "Calibri", valign: "top" });
// Contents
s.addShape(pres.shapes.RECTANGLE, {
x: x + 0.12, y: 3.25, w: 2.86, h: 0.22,
fill: { color: sp.color }, line: { width: 0 }
});
s.addText("CONTENTS", { x: x + 0.12, y: 3.25, w: 2.86, h: 0.22, fontSize: 8, bold: true, color: C.white, align: "center", valign: "middle", margin: 0 });
const cItems = sp.contents.map((c, ci) => ({
text: c,
options: { bullet: { type: "bullet" }, breakLine: ci < sp.contents.length - 1, fontSize: 8.5, color: sp.color, bold: true }
}));
s.addText(cItems, { x: x + 0.12, y: 3.5, w: 2.86, h: 0.6, fontFace: "Calibri", valign: "top" });
// Clinical
s.addText("⚕ " + sp.clin, {
x: x + 0.1, y: 4.15, w: 2.9, h: 1.2,
fontSize: 7.8, italic: true, color: C.red, fontFace: "Calibri", wrap: true, valign: "top"
});
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 9 — CUBITAL FOSSA
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "Cubital Fossa — Triangular Gateway: Arm → Forearm", C.cobalt);
infoBox(s, 0.2, 0.9, 3.0, 2.3, "BOUNDARIES", [
"Base (superior): Line between medial + lateral epicondyles",
"Medial border: Pronator teres",
"Lateral border: Brachioradialis",
"Floor/bed: Brachialis muscle (mainly); supinator laterally",
"Roof: Skin + superficial fascia + bicipital aponeurosis",
], C.cobalt, true);
// TAN diagram (visual)
s.addShape(pres.shapes.RECTANGLE, {
x: 3.35, y: 0.9, w: 3.2, h: 2.3,
fill: { color: C.light }, line: { color: C.lgrey, width: 0.5 }
});
s.addText("CONTENTS (Lateral → Medial)", {
x: 3.35, y: 0.92, w: 3.2, h: 0.3, fontSize: 10, bold: true, color: C.cobalt, align: "center", valign: "middle", margin: 0
});
const tanItems = [
{ label: "T", name: "Tendon of Biceps Brachii", col: C.cobalt, note: "goes to radial tuberosity" },
{ label: "A", name: "Brachial Artery", col: C.teal, note: "bifurcates at apex → radial + ulnar" },
{ label: "N", name: "Median Nerve", col: C.red, note: "exits between heads of pronator teres" },
];
tanItems.forEach((item, i) => {
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x: 3.42, y: 1.3 + i * 0.6, w: 3.06, h: 0.52,
fill: { color: item.col, transparency: 85 }, rectRadius: 0.06, line: { color: item.col, width: 1 }
});
s.addShape(pres.shapes.OVAL, {
x: 3.42, y: 1.3 + i * 0.6, w: 0.52, h: 0.52,
fill: { color: item.col }, line: { width: 0 }
});
s.addText(item.label, {
x: 3.42, y: 1.3 + i * 0.6, w: 0.52, h: 0.52,
fontSize: 16, bold: true, color: C.white, align: "center", valign: "middle"
});
s.addText(item.name, {
x: 3.98, y: 1.3 + i * 0.6, w: 2.5, h: 0.28,
fontSize: 9.5, bold: true, color: item.col, fontFace: "Calibri", valign: "middle"
});
s.addText(item.note, {
x: 3.98, y: 1.55 + i * 0.6, w: 2.5, h: 0.26,
fontSize: 8, italic: true, color: C.grey, fontFace: "Calibri", valign: "middle"
});
});
infoBox(s, 6.68, 0.9, 3.12, 2.3, "KEY NERVES (NOT in fossa!)", [
"Radial nerve — deep to brachioradialis lip (NOT inside fossa)",
" → divides into superficial branch + deep branch (PIN)",
" → deep branch pierces supinator",
"Ulnar nerve — posterior to medial epicondyle",
" → does NOT pass through cubital fossa",
], C.red, true);
infoBox(s, 0.2, 3.35, 4.5, 2.1, "BICIPITAL APONEUROSIS (Lacertus Fibrosus)", [
"Fibrous sheet from medial side of biceps tendon",
"Fans medially over cubital fossa into forearm fascia",
"Lies DEEP to median cubital vein; SUPERFICIAL to brachial a + median n",
"Protects artery from direct trauma",
"Tethers median cubital vein → better for venepuncture",
"May mask brachial artery laceration!",
], C.gold, true);
infoBox(s, 4.85, 3.35, 4.95, 2.1, "CLINICAL APPLICATIONS", [
"Blood pressure: Brachial artery auscultated medial to biceps tendon",
"Venepuncture: Median cubital vein in roof (stabilized by bicipital aponeurosis)",
"Superficial to deep in roof: Median cubital vein → Bicipital aponeurosis → Brachial artery → Median nerve",
"Pronator syndrome: Median n. entrapped between pronator teres heads",
], C.cobalt, true);
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 10 — ULNAR TUNNEL & ANATOMICAL SNUFF BOX
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "Ulnar Tunnel (Guyon's Canal) & Anatomical Snuff Box", C.teal);
// Divider line
s.addShape(pres.shapes.RECTANGLE, {
x: 4.9, y: 0.88, w: 0.04, h: 4.6, fill: { color: C.lgrey }, line: { width: 0 }
});
s.addText("ULNAR TUNNEL (GUYON'S CANAL)", {
x: 0.2, y: 0.9, w: 4.55, h: 0.35, fontSize: 11, bold: true, color: C.teal, fontFace: "Calibri"
});
infoBox(s, 0.2, 1.3, 4.55, 1.3, "BOUNDARIES", [
"Floor: Flexor retinaculum + pisohamate ligament",
"Roof: Palmar carpal ligament",
"Medial: Pisiform bone",
"Lateral: Hook of hamate",
], C.teal, true);
infoBox(s, 0.2, 2.75, 4.55, 1.2, "CONTENTS", [
"Ulnar nerve (medial) — divides inside tunnel",
"Ulnar artery (lateral)",
"NO flexor tendons — unlike carpal tunnel (key distinction!)",
], C.cobalt, true);
infoBox(s, 0.2, 4.05, 4.55, 1.35, "CLINICAL: Guyon's Canal Syndrome", [
"Causes: ganglion cyst (MC), hook of hamate # (racquet sports), cyclist's palsy",
"Proximal compression: motor + sensory loss",
"Deep branch only: motor (claw hand, no sensory loss)",
"Superficial branch only: sensory (medial 1½ fingers), no motor loss",
], C.red, true);
s.addText("ANATOMICAL SNUFF BOX", {
x: 5.1, y: 0.9, w: 4.7, h: 0.35, fontSize: 11, bold: true, color: C.cobalt, fontFace: "Calibri"
});
infoBox(s, 5.1, 1.3, 4.7, 1.3, "BOUNDARIES", [
"Posterior/medial border: Extensor pollicis longus tendon",
"Anterior/lateral border: Abductor pollicis longus + Extensor pollicis brevis",
"Proximal end: Radial styloid process",
"Floor: Scaphoid (proximal) + Trapezium (distal)",
], C.cobalt, true);
infoBox(s, 5.1, 2.75, 4.7, 1.2, "CONTENTS", [
"Radial artery — palpable pulse in the floor",
"Superficial branch of radial nerve (roof)",
"Cephalic vein crosses the roof",
], C.teal, true);
infoBox(s, 5.1, 4.05, 4.7, 1.35, "CLINICAL PEARLS", [
"Snuff box tenderness = SCAPHOID FRACTURE until proven otherwise",
"Even with normal X-ray → immobilize + repeat/MRI",
"AVN of proximal scaphoid: blood supply enters distally → fracture at waist cuts off proximal pole",
"De Quervain's tenosynovitis: APL + EPB inflammation (Finkelstein's test)",
], C.red, true);
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 11 — HAND COMPARTMENTS & SPACES
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "Compartments & Potential Spaces of the Hand", C.cobalt);
infoBox(s, 0.2, 0.9, 2.2, 2.3, "THENAR COMPARTMENT", [
"Abductor pollicis brevis",
"Opponens pollicis",
"Flexor pollicis brevis (sup. head)",
"Nerve: Recurrent branch of median n.",
], C.cobalt, true);
infoBox(s, 2.55, 0.9, 2.2, 2.3, "HYPOTHENAR COMPARTMENT", [
"Abductor digiti minimi",
"Opponens digiti minimi",
"Flexor digiti minimi brevis",
"Nerve: Deep branch of ulnar n.",
], C.teal, true);
infoBox(s, 4.9, 0.9, 2.3, 2.3, "INTEROSSEOUS COMPARTMENTS", [
"4 Dorsal interossei — DAB (Dorsals ABduct)",
"3 Palmar interossei — PAD (Palmars ADduct)",
"All: deep branch of ulnar nerve",
"Adductor pollicis also in this zone",
], C.gold, true);
infoBox(s, 7.35, 0.9, 2.45, 2.3, "CENTRAL/PALMAR COMPARTMENT", [
"Flexor tendons + synovial sheaths",
"Lumbricals (1,2: median; 3,4: ulnar)",
"Superficial palmar arch",
"Median + ulnar nerve branches",
], C.cobalt, true);
// Palmar spaces
s.addShape(pres.shapes.RECTANGLE, {
x: 0.2, y: 3.32, w: 9.6, h: 0.28,
fill: { color: C.cobalt }, line: { width: 0 }
});
s.addText("POTENTIAL SPACES (Deep Palmar Spaces — clinically critical for infection spread)", {
x: 0.2, y: 3.32, w: 9.6, h: 0.28, fontSize: 10.5, bold: true, color: C.white, align: "center", valign: "middle", margin: 0
});
infoBox(s, 0.2, 3.72, 3.0, 1.75, "THENAR SPACE", [
"Deep to flexor tendon of index finger",
"Superficial to adductor pollicis",
"Infection: 'Ballooning' of thenar eminence",
"Thumb held abducted, index fixed",
], C.cobalt, true);
infoBox(s, 3.35, 3.72, 3.0, 1.75, "MIDDLE PALMAR SPACE", [
"Deep to flexor tendons of middle/ring/little",
"Superficial to 3rd-5th metacarpals + interossei",
"Infection: Loss of palmar concavity",
"Dorsal edema (NOT dorsal infection!)",
], C.teal, true);
infoBox(s, 6.5, 3.72, 3.3, 1.75, "PARONA'S SPACE & HORSESHOE ABSCESS", [
"Parona's space: distal forearm, anterior to pronator quadratus",
"Both palmar spaces communicate proximally with Parona's space",
"Horseshoe abscess: ulnar bursa infection tracks to radial bursa via Parona's space",
"Collar-stud abscess: subaponeurotic infection perforates palmar fascia",
], C.gold, true);
s.addText("★ Septum between thenar + middle palmar space is attached to the 3rd METACARPAL — know which side of this septum an infection lies", {
x: 0.2, y: 5.42, w: 9.6, h: 0.3, fontSize: 9, italic: true, color: C.red, align: "center", fontFace: "Calibri"
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 12 — SECTION: CLINICAL CASES
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
sectionHeader(s, 3, "Clinical Cases");
s.addText("Test your anatomy with real-world scenarios", {
x: 2.8, y: 3.2, w: 7, h: 0.5, fontSize: 15, italic: true,
color: C.lgrey, fontFace: "Calibri"
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 13 — CLINICAL CASE 1: SHOULDER DISLOCATION
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
clinicalSlide(s, "Case 1 — Shoulder Dislocation After a Fall");
// Case vignette
s.addShape(pres.shapes.RECTANGLE, {
x: 0.2, y: 0.9, w: 9.6, h: 0.9,
fill: { color: "1A1A2E" }, line: { color: C.red, width: 1.5 }
});
s.addText("A 24-year-old male falls on his outstretched arm during a rugby tackle. He presents with the arm held in slight abduction and external rotation, shoulder looks 'flat,' and there is a palpable hollow below the acromion. Axillary nerve territory numbness is noted.", {
x: 0.35, y: 0.93, w: 9.3, h: 0.84,
fontSize: 10.5, color: C.white, fontFace: "Calibri", italic: true, valign: "middle"
});
infoBox(s, 0.2, 1.95, 3.0, 3.45, "DIAGNOSIS & TYPE", [
"Anterior (subcoracoid) dislocation — 95% of all shoulder dislocations",
"Mechanism: Forcible external rotation + abduction",
"Head moves anteroinferiorly",
"Posterior dislocation (rare, <3%): electric shock / seizure",
" → 'light bulb sign' on AP X-ray",
" → arm in internal rotation",
], C.red, false);
infoBox(s, 3.35, 1.95, 3.2, 3.45, "COMPLICATIONS", [
"Axillary nerve (most common) → deltoid atrophy + lateral arm sensory loss",
"Bankart lesion: torn anterior-inferior glenoid labrum → recurrent dislocation",
"Hill-Sachs lesion: posterolateral humeral head impaction fracture",
"Axillary artery injury (rare) — check radial pulse",
"Rotator cuff tear (esp. in elderly)",
], C.gold, false);
infoBox(s, 6.7, 1.95, 3.1, 3.45, "ANATOMY LINKS", [
"Inferior GHL most important stabilizer (torn in anterior dislocation)",
"Test axillary nerve: sensation over 'regimental badge area' (lateral deltoid)",
"Test motor: deltoid abduction (15-90°)",
"Quadrangular space: axillary n + post. circumflex humeral a",
"Recurrent dislocation → Bankart repair (labral reattachment)",
], C.teal, false);
s.addText("KEY POINT: Axillary nerve = most commonly injured nerve in shoulder dislocation. Always test before and after reduction.", {
x: 0.2, y: 5.38, w: 9.6, h: 0.35, fontSize: 10, bold: true,
color: C.gold, fontFace: "Calibri", align: "center"
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 14 — CLINICAL CASE 2: SUPRACONDYLAR FRACTURE
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
clinicalSlide(s, "Case 2 — Child with Elbow Injury After FOOSH");
s.addShape(pres.shapes.RECTANGLE, {
x: 0.2, y: 0.9, w: 9.6, h: 0.9,
fill: { color: "1A1A2E" }, line: { color: C.red, width: 1.5 }
});
s.addText("A 7-year-old child falls on an outstretched hand. The elbow is swollen, painful, and held slightly flexed. X-ray shows a posterior fat pad sign and a transverse fracture above the epicondyles. Radial pulse is diminished. The forearm appears pale and painful on passive finger extension.", {
x: 0.35, y: 0.93, w: 9.3, h: 0.84,
fontSize: 10.5, color: C.white, fontFace: "Calibri", italic: true, valign: "middle"
});
infoBox(s, 0.2, 1.95, 3.0, 3.45, "DIAGNOSIS", [
"Supracondylar fracture of humerus",
"Most common elbow fracture in children",
"Extension type (98%): distal fragment displaces POSTERIORLY",
"Mechanism: triceps pull + momentum",
"FOOSH = Fall on Outstretched Hand",
], C.red, false);
infoBox(s, 3.35, 1.95, 3.2, 3.45, "COMPLICATIONS", [
"Brachial artery injury (bowstrings over proximal fragment)",
"Anterior interosseous nerve injury (branch of median n.)",
"Volkmann's ischemic contracture: forearm flexor muscles necrose → fixed contracture",
"Cubitus varus (gunstock deformity) after malunion",
"Posterior fat pad ALWAYS abnormal → occult fracture",
], C.gold, false);
infoBox(s, 6.7, 1.95, 3.1, 3.45, "ANATOMY LINKS", [
"Elbow fat pads: coronoid fossa (ant.), olecranon fossa (post.), radial fossa",
"Posterior fat pad visible on lateral X-ray = EMERGENCY",
"Brachial artery lies in cubital fossa medial to biceps tendon",
"Carrying angle: normal 7° valgus; cubitus varus after malunion",
"Check CRITOE ossification centers in children",
], C.teal, false);
s.addText("CRITOE mnemonic (age of ossification): Capitellum 1 · Radial head 3 · Internal (medial) epicondyle 5 · Trochlea 7 · Olecranon 9 · External (lateral) epicondyle 11", {
x: 0.2, y: 5.38, w: 9.6, h: 0.35, fontSize: 9.5, bold: true,
color: C.gold, fontFace: "Calibri", align: "center"
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 15 — CLINICAL CASE 3: SCAPHOID FRACTURE
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
clinicalSlide(s, "Case 3 — Wrist Pain After FOOSH (Normal X-ray)");
s.addShape(pres.shapes.RECTANGLE, {
x: 0.2, y: 0.9, w: 9.6, h: 0.9,
fill: { color: "1A1A2E" }, line: { color: C.red, width: 1.5 }
});
s.addText("An 18-year-old skateboarder falls and braces with his outstretched hand. He has wrist pain, with point tenderness in the anatomical snuff box and over the scaphoid tubercle. X-rays are reported as normal. He is discharged without treatment. He returns 6 weeks later with worsening pain.", {
x: 0.35, y: 0.93, w: 9.3, h: 0.84,
fontSize: 10.5, color: C.white, fontFace: "Calibri", italic: true, valign: "middle"
});
infoBox(s, 0.2, 1.95, 3.1, 3.45, "DIAGNOSIS & LESSON", [
"Scaphoid fracture (most common carpal fracture ~70%)",
"Normal X-ray does NOT rule out scaphoid fracture",
"ACTION: Immobilize in scaphoid cast → repeat X-ray at 10-14 days or MRI/CT",
"Failure to diagnose = AVN of proximal pole",
"Never dismiss snuff box tenderness!",
], C.red, false);
infoBox(s, 3.45, 1.95, 3.1, 3.45, "ANATOMY OF AVN RISK", [
"Radial artery enters scaphoid DISTALLY",
"In ~10%: sole blood supply is distal → proximal",
"Fracture at waist cuts off blood to proximal pole",
"Proximal pole appears SCLEROTIC (white) on X-ray = AVN",
"Kienbock's disease = same mechanism for LUNATE",
], C.gold, false);
infoBox(s, 6.7, 1.95, 3.1, 3.45, "SNUFF BOX & DE QUERVAIN'S", [
"Snuff box boundaries: EPL (posterior), APL + EPB (anterior)",
"Floor: Scaphoid (proximal) + Trapezium (distal)",
"Radial artery pulse palpable in floor",
"De Quervain's: inflammation of APL + EPB in 1st extensor compartment",
" → Finkelstein's test positive",
" → Common in new mothers",
], C.teal, false);
s.addText("KEY POINT: Snuff box tenderness = scaphoid fracture UNTIL PROVEN OTHERWISE — even with normal X-ray. Always immobilize and follow up.", {
x: 0.2, y: 5.38, w: 9.6, h: 0.35, fontSize: 10, bold: true,
color: C.gold, fontFace: "Calibri", align: "center"
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 16 — CLINICAL CASE 4: ULNAR NERVE / HAND SPACES
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
clinicalSlide(s, "Case 4 — Cyclist with Hand Weakness & Palmar Infection");
s.addShape(pres.shapes.RECTANGLE, {
x: 0.2, y: 0.9, w: 9.6, h: 0.9,
fill: { color: "1A1A2E" }, line: { color: C.red, width: 1.5 }
});
s.addText("Case A: A 35-year-old cyclist has progressive weakness of grip and intrinsic muscles of the right hand after a cycling tour. No sensory loss. Pinch grip weak. Froment's sign positive. | Case B: A laborer presents with a swollen, tender palm, loss of normal palmar concavity, and marked dorsal hand edema. He had a puncture wound to his palm 5 days ago.", {
x: 0.35, y: 0.93, w: 9.3, h: 0.84,
fontSize: 10, color: C.white, fontFace: "Calibri", italic: true, valign: "middle"
});
infoBox(s, 0.2, 1.95, 4.6, 3.45, "CASE A: CYCLIST'S PALSY (Guyon's Canal Syndrome)", [
"Handlebar pressure compresses ulnar nerve at deep branch level",
"Motor loss only (deep branch): all interossei, hypothenar muscles, adductor pollicis, medial 2 lumbricals",
"Froment's sign: patient uses FPL (median n.) to substitute for adductor pollicis (ulnar n.)",
"Claw deformity: ring + little fingers (MCP hyperextension, IP flexion)",
"No sensory loss = deep branch only affected (branching distal to sensory fibers)",
"vs. Carpal tunnel syndrome: median n., sensory loss (thumb/index/middle), thenar wasting",
], C.red, false);
infoBox(s, 5.0, 1.95, 4.8, 3.45, "CASE B: MIDDLE PALMAR SPACE INFECTION", [
"Puncture wound → infection of middle palmar space",
"Loss of palmar concavity (normal palm curves inward — infection obliterates this)",
"Dorsal swelling is MISLEADING — palmar skin is thick, so pus tracks dorsally",
"Management: surgical drainage through palmar approach",
"Thenar space infection: 'ballooning' of thenar eminence; thumb held abducted",
"Horseshoe abscess: infection in ulnar bursa tracks via Parona's space to radial bursa — surgical emergency",
"Collar-stud abscess: deep pus perforates palmar fascia → bilobed abscess",
], C.teal, false);
s.addText("★ Dorsal hand swelling does NOT mean dorsal infection. Palpate the palm. Track infection spread: palmar space → Parona's space → forearm.", {
x: 0.2, y: 5.38, w: 9.6, h: 0.35, fontSize: 9.5, bold: true,
color: C.gold, fontFace: "Calibri", align: "center"
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 17 — DISTINCTION POINTS SUMMARY
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addSlideBg(s, C.navy);
s.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 10, h: 0.72, fill: { color: C.gold }, line: { width: 0 }
});
s.addText("★ TOP DISTINCTION-SCORING POINTS", {
x: 0.3, y: 0.1, w: 9.4, h: 0.52, fontSize: 18, bold: true,
color: C.navy, fontFace: "Calibri", valign: "middle", charSpacing: 1
});
const points = [
["1", "The SC joint is the ONLY bony connection between the upper limb skeleton and the axial skeleton — and it has an articular DISC (fibrocartilage)."],
["2", "The shoulder joint is the most mobile yet most commonly dislocated joint. Stability is provided by SITS, not bone architecture."],
["3", "All 3 elbow articulations share ONE synovial cavity. Injecting one treats all."],
["4", "Ulna does NOT directly articulate with carpals. TFCC/articular disc intervenes."],
["5", "Ulnar nerve does NOT pass through cubital fossa — it goes posterior to medial epicondyle (ulnar groove)."],
["6", "Radial nerve is NOT inside the cubital fossa — it lies deep to brachioradialis."],
["7", "Posterior fat pad on lateral elbow X-ray is ALWAYS abnormal — hemarthrosis / effusion."],
["8", "Snuff box tenderness = scaphoid fracture even with NORMAL X-rays. Immobilize."],
["9", "Dorsal hand swelling ≠ dorsal infection. Even palmar space infections cause dorsal edema."],
["10", "Posterior shoulder dislocation = electric shock / seizure → 'light bulb sign' on AP X-ray."],
["11", "Triangular interval is the MOST DISTAL of the 3 posterior shoulder spaces → carries radial nerve."],
["12", "Thenar + middle palmar spaces are separated by a septum attached to the 3rd METACARPAL."],
];
const mid = Math.ceil(points.length / 2);
points.forEach((p, i) => {
const col = i < mid ? 0 : 1;
const row = i < mid ? i : i - mid;
const x = 0.2 + col * 4.95;
const y = 0.88 + row * 0.57;
s.addShape(pres.shapes.OVAL, {
x, y: y + 0.05, w: 0.38, h: 0.38,
fill: { color: C.gold }, line: { width: 0 }
});
s.addText(p[0], {
x, y: y + 0.05, w: 0.38, h: 0.38,
fontSize: 10, bold: true, color: C.navy, align: "center", valign: "middle"
});
s.addText(p[1], {
x: x + 0.44, y, w: 4.35, h: 0.55,
fontSize: 9, color: C.lgrey, fontFace: "Calibri", valign: "middle", wrap: true
});
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 18 — MNEMONICS REFERENCE
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
contentSlide(s, "Mnemonics Quick Reference — Upper Limb", C.cobalt);
const mnems = [
{ mnem: "SITS", full: "Rotator Cuff Muscles", detail: "Supraspinatus · Infraspinatus · Teres minor · Subscapularis", color: C.cobalt },
{ mnem: "TAN", full: "Cubital Fossa Contents (Lat→Med)", detail: "Tendon of biceps · Artery (brachial) · Nerve (median)", color: C.teal },
{ mnem: "QTT", full: "3 Posterior Shoulder Spaces", detail: "Quadrangular (axillary n.) · Triangular (circumflex scapular) · Triangular Interval (radial n.)", color: C.gold },
{ mnem: "1-2-3", full: "Axillary Artery Branches", detail: "Part 1: 1 branch · Part 2: 2 branches · Part 3: 3 branches", color: C.cobalt },
{ mnem: "BALMS", full: "Contents of Axilla", detail: "Brachial plexus · Axillary a/v · Lymph nodes · Muscles · Subscapular vessels", color: C.teal },
{ mnem: "P-H", full: "Ulnar Tunnel (Guyon's Canal)", detail: "Pisiform (medial) · Hook of Hamate (lateral) = walls of the tunnel", color: C.cobalt },
{ mnem: "S-T", full: "Anatomical Snuff Box Floor", detail: "Scaphoid (proximal) · Trapezium (distal)", color: C.gold },
{ mnem: "DAB / PAD", full: "Interossei Actions", detail: "Dorsal interossei ABduct · Palmar interossei ADduct", color: C.teal },
{ mnem: "CRITOE", full: "Elbow Ossification Centers (children)", detail: "Capitellum 1 · Radial head 3 · Internal epicondyle 5 · Trochlea 7 · Olecranon 9 · External epicondyle 11", color: C.cobalt },
{ mnem: "FOOSH", full: "Mechanism of Common UL Fractures", detail: "Fall On OutStretched Hand → scaphoid, radial head, supracondylar, Colles' fracture", color: C.red },
];
const cols = 2;
const rows = Math.ceil(mnems.length / cols);
mnems.forEach((m, i) => {
const col = i % cols;
const row = Math.floor(i / cols);
const x = 0.2 + col * 4.95;
const y = 0.92 + row * 0.88;
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y, w: 4.7, h: 0.8,
fill: { color: C.white }, rectRadius: 0.07,
shadow: { type: "outer", color: "000000", blur: 4, offset: 1, angle: 135, opacity: 0.1 }
});
s.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x, y, w: 1.1, h: 0.8,
fill: { color: m.color, transparency: 10 }, rectRadius: 0.07, line: { width: 0 }
});
s.addText(m.mnem, {
x, y, w: 1.1, h: 0.8,
fontSize: 14, bold: true, color: C.white, fontFace: "Calibri",
align: "center", valign: "middle"
});
s.addText(m.full, {
x: x + 1.15, y: y + 0.04, w: 3.5, h: 0.28,
fontSize: 9.5, bold: true, color: m.color, fontFace: "Calibri", valign: "middle"
});
s.addText(m.detail, {
x: x + 1.15, y: y + 0.35, w: 3.5, h: 0.42,
fontSize: 8.5, color: C.midgrey, fontFace: "Calibri", valign: "middle", wrap: true
});
});
}
// ═══════════════════════════════════════════════════════════════════════════
// SLIDE 19 — THANK YOU / END
// ═══════════════════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
addSlideBg(s, C.navy);
s.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: C.gold }, line: { width: 0 }
});
s.addShape(pres.shapes.RECTANGLE, {
x: 0, y: 4.5, w: 10, h: 1.125, fill: { color: C.cobalt }, line: { width: 0 }
});
s.addText("Upper Limb Anatomy", {
x: 1, y: 0.8, w: 8, h: 0.7, fontSize: 18, bold: true, charSpacing: 3,
color: C.gold, fontFace: "Calibri", align: "center"
});
s.addText("Joints · Landmarks · Clinical Applications", {
x: 1, y: 1.55, w: 8, h: 0.55, fontSize: 22, bold: true,
color: C.white, fontFace: "Calibri", align: "center"
});
s.addShape(pres.shapes.RECTANGLE, {
x: 3.5, y: 2.28, w: 3, h: 0.04, fill: { color: C.gold }, line: { width: 0 }
});
const recap = [
"8 Joint groups: GH · AC · SC · Elbow · Wrist · CMC · MCP · IP",
"3 Posterior spaces: Quadrangular · Triangular · Triangular Interval",
"Cubital fossa: TAN (Tendon · Artery · Nerve)",
"Ulnar tunnel: Pisiform–Hamate frame",
"Snuff box tenderness = scaphoid fracture (even with normal X-ray)",
"Dorsal swelling ≠ dorsal infection — always examine the palm",
];
recap.forEach((r, i) => {
s.addText("✓ " + r, {
x: 1.5, y: 2.5 + i * 0.31, w: 7, h: 0.3,
fontSize: 11, color: C.lgrey, fontFace: "Calibri", valign: "middle"
});
});
s.addText("MS1 Anatomy • Upper Limb Module • Good luck!", {
x: 0, y: 4.55, w: 10, h: 0.55,
fontSize: 13, bold: true, italic: true, color: C.white,
fontFace: "Calibri", align: "center", valign: "middle"
});
}
// ─── WRITE ──────────────────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/upper-limb-ppt/Upper_Limb_Joints_and_Landmarks.pptx" })
.then(() => console.log("DONE"))
.catch(e => { console.error(e); process.exit(1); });
cd /home/daytona/workspace/upper-limb-ppt && node generate.js 2>&1
ls -lh /home/daytona/workspace/upper-limb-ppt/
Upper Limb Joints and Landmarks
Presentation · PPTX
| Slides | Content |
|---|---|
| 1 | Title slide - Navy + cobalt + gold palette with topic outline |
| 2 | Section break - Joints of the Upper Limb |
| 3 | Shoulder (GH) Joint - ligaments, SITS rotator cuff, distinction points |
| 4 | Elbow Joint - 3 articulations, shared synovial cavity, fat pads, X-ray signs |
| 5 | Wrist & Hand Joints - full table (all 6 joint types, movements, bones) |
| 6 | Section break - Landmarks |
| 7 | Axilla - all 6 boundaries, BALMS contents, axillary artery 1-2-3 rule |
| 8 | 3 Posterior Shoulder Spaces - QTT side-by-side with boundaries, contents, clinicals |
| 9 | Cubital Fossa - TAN diagram, bicipital aponeurosis, clinical layering |
| 10 | Ulnar Tunnel + Anatomical Snuff Box - boundaries, contents, clinicals side by side |
| 11 | Hand Compartments & Spaces - all 4 compartments + palmar spaces + Parona's + horseshoe abscess |
| 12 | Section break - Clinical Cases |
| 13 | Case 1 - Shoulder dislocation + axillary nerve injury |
| 14 | Case 2 - Supracondylar fracture + Volkmann's + CRITOE mnemonic |
| 15 | Case 3 - Scaphoid fracture with normal X-ray + AVN |
| 16 | Case 4 - Cyclist's palsy (Guyon's canal) + palmar space infection |
| 17 | 12 Distinction-scoring points summary |
| 18 | Mnemonics reference - all 10 mnemonics (SITS, TAN, QTT, CRITOE, etc.) |
| 19 | Closing recap slide |