Define Anatomical Nomenclature

Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Loading Image
Here is a thorough definition and breakdown of Anatomical Nomenclature, sourced directly from Gray's Anatomy for Students:

Anatomical Nomenclature

Anatomical nomenclature is the standardized system of terms used to describe the location, orientation, and relationships of body structures. It provides a universal reference language so that any anatomist, clinician, or scientist can communicate precisely about the human body, regardless of language or background.

1. The Anatomical Position

All anatomical terms are defined relative to the anatomical position - the universally accepted reference posture:
  • Body standing upright
  • Feet together, toes pointing forward
  • Hands by the sides, palms facing forward
  • Face looking forward; mouth closed, expression neutral
  • The inferior margin of the orbit (bone under the eyes) is in the same horizontal plane as the top of the external auditory meatus (ear opening)
  • Eyes open, focused in the distance
Anatomical position, planes, and terms of location
Fig. 1.1 - The Anatomical Position, Planes, and Terms of Location and Orientation (Gray's Anatomy for Students)

2. Anatomical Planes

Three major groups of planes divide the body in the anatomical position:
PlaneOrientationDivides body into
Coronal (Frontal)VerticalAnterior (front) and posterior (back) parts
SagittalVertical, perpendicular to coronalRight and left parts
Median SagittalExactly through centerEqual right and left halves
Transverse (Horizontal/Axial)HorizontalSuperior (upper) and inferior (lower) parts

3. Terms of Location and Direction

Anterior / Posterior (Ventral / Dorsal)

  • Anterior (ventral): toward the front of the body. Example: the nose is an anterior structure.
  • Posterior (dorsal): toward the back. Example: the vertebral column is posterior to the sternum.

Medial / Lateral

  • Medial: closer to the median sagittal plane. Example: the nose is medial to the eyes.
  • Lateral: farther from the midline. Example: the thumb is lateral to the little finger.

Superior / Inferior

  • Superior: toward the top of the body (head direction). Example: the head is superior to the shoulders.
  • Inferior: toward the bottom (feet direction). Example: the knee is inferior to the hip joint.

Proximal / Distal

  • Used primarily for limbs and linear structures (vessels, nerves, airways).
  • Proximal: closer to the origin or point of attachment. Example: the glenohumeral joint is proximal to the elbow.
  • Distal: farther from the origin. Example: the hand is distal to the elbow.

Cranial / Caudal

  • Cranial: toward the head.
  • Caudal: toward the tail (inferior end of the spine).
  • Used as alternatives to superior/inferior, especially in embryology and comparative anatomy.

Rostral

  • Used specifically within the head/brain to describe position relative to the nose.
  • Example: the forebrain is rostral to the hindbrain.

Superficial / Deep

  • Superficial: closer to the surface of the body. Example: the sternum is superficial to the heart.
  • Deep: farther from the surface, enclosed within the outer layer of deep fascia. Example: the stomach is deep to the abdominal wall.
  • In a broader sense, the superficial region includes skin, superficial fascia, and mammary glands; the deep region includes most skeletal muscles and viscera.

4. Additional Notes: Inclusive Anatomical Terminology

Modern anatomy acknowledges that not all individuals fit a sex-binary model. Inclusive anatomical nomenclature includes terms for transgender and non-binary individuals. The clinically preferred approach is to use the patient's own preferred anatomical terminology and to base clinical care on present anatomy rather than assumptions about gender identity. Examples of inclusive terms include:
Inclusive TermInstead of
Upper bodyChest / Breast
Erectile tissuePenis / Clitoris
GonadsTestes / Ovaries

Summary Table

TermMeaning
Anterior / VentralFront
Posterior / DorsalBack
SuperiorAbove / toward the head
InferiorBelow / toward the feet
MedialToward the midline
LateralAway from the midline
ProximalCloser to origin/attachment
DistalFarther from origin/attachment
CranialToward the head
CaudalToward the tail
RostralToward the nose (used in head/brain)
SuperficialToward the body surface
DeepAway from the body surface
Coronal planeDivides front and back
Sagittal planeDivides left and right
Transverse planeDivides top and bottom

Source: Gray's Anatomy for Students, Chapter 1 - "Important Anatomical Terms," pp. 18-20.

make me pptx of this

Reading File
Reading File
Running Command

ls -la /home/daytona/workspace/

Running Command

mkdir -p /home/daytona/workspace/anatomical-nomenclature-pptx

Writing File

~/anatomical-nomenclature-pptx/create_pptx.js

const pptxgen = require("pptxgenjs");

// Fetch the anatomical diagram image
const images = JSON.parse(require("child_process").execSync(
  `node /home/daytona/skills/shared/scripts/fetch_images.js "https://cdn.orris.care/cdss_images/a6821ed545aa1fb79ab82e9b83a926f549f85bed1add3edc7d6e458dff65071d.png"`
).toString());
const anatomyImg = images[0];

let pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Anatomical Nomenclature";
pres.author = "Gray's Anatomy for Students";

// ─────────────────────────────────────────────
// COLOR PALETTE
// Dark navy dominant, teal accent, warm off-white text
// ─────────────────────────────────────────────
const NAVY   = "0D1B2A";   // dominant background
const TEAL   = "1B9AAA";   // accent / headings
const LTEAL  = "C4F1F9";   // light teal for labels
const WHITE  = "F0F4F8";   // body text
const GOLD   = "F2C94C";   // highlight
const DARK   = "071014";   // darker panel

// Helper: section heading bar
function addSectionBar(slide, text, y) {
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: y, w: 10, h: 0.55,
    fill: { color: TEAL },
    line: { color: TEAL }
  });
  slide.addText(text, {
    x: 0.18, y: y, w: 9.6, h: 0.55,
    fontSize: 17, bold: true, color: NAVY,
    fontFace: "Calibri", valign: "middle", margin: 0
  });
}

// Helper: card shape
function addCard(slide, x, y, w, h, fill) {
  slide.addShape(pres.ShapeType.rect, {
    x, y, w, h,
    fill: { color: fill || "142536" },
    line: { color: TEAL, pt: 1 },
    rectRadius: 0.08
  });
}

// ─────────────────────────────────────────────
// SLIDE 1 — TITLE SLIDE
// ─────────────────────────────────────────────
{
  let slide = pres.addSlide();

  // Full dark background
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 10, h: 5.625,
    fill: { color: NAVY }, line: { color: NAVY }
  });

  // Teal accent left bar
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 0.18, h: 5.625,
    fill: { color: TEAL }, line: { color: TEAL }
  });

  // Bottom accent stripe
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 5.2, w: 10, h: 0.425,
    fill: { color: DARK }, line: { color: DARK }
  });

  // Title
  slide.addText("Anatomical Nomenclature", {
    x: 0.5, y: 1.4, w: 9, h: 1.1,
    fontSize: 44, bold: true, color: WHITE,
    fontFace: "Calibri", align: "center"
  });

  // Teal underline
  slide.addShape(pres.ShapeType.rect, {
    x: 2.5, y: 2.58, w: 5, h: 0.06,
    fill: { color: TEAL }, line: { color: TEAL }
  });

  // Subtitle
  slide.addText("The Universal Language of Human Body Structure", {
    x: 0.5, y: 2.75, w: 9, h: 0.55,
    fontSize: 18, color: LTEAL,
    fontFace: "Calibri", align: "center", italic: true
  });

  // Source note
  slide.addText("Source: Gray's Anatomy for Students", {
    x: 0.5, y: 5.2, w: 9, h: 0.4,
    fontSize: 11, color: "6B8CAE",
    fontFace: "Calibri", align: "center", italic: true
  });

  // Tag pills
  const tags = ["Anatomical Position", "Body Planes", "Directional Terms", "Superficial & Deep"];
  tags.forEach((tag, i) => {
    const xPos = 0.6 + i * 2.25;
    slide.addShape(pres.ShapeType.rect, {
      x: xPos, y: 3.55, w: 2.1, h: 0.38,
      fill: { color: "1B3A52" }, line: { color: TEAL, pt: 1 },
      rectRadius: 0.18
    });
    slide.addText(tag, {
      x: xPos, y: 3.55, w: 2.1, h: 0.38,
      fontSize: 10, color: LTEAL, fontFace: "Calibri",
      align: "center", valign: "middle", margin: 0
    });
  });
}

// ─────────────────────────────────────────────
// SLIDE 2 — WHAT IS ANATOMICAL NOMENCLATURE?
// ─────────────────────────────────────────────
{
  let slide = pres.addSlide();
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY }, line: { color: NAVY }
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
  });

  slide.addText("What is Anatomical Nomenclature?", {
    x: 0.35, y: 0.18, w: 9.4, h: 0.65,
    fontSize: 26, bold: true, color: TEAL,
    fontFace: "Calibri", valign: "middle"
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0.35, y: 0.82, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
  });

  // Definition card
  addCard(slide, 0.35, 1.0, 9.3, 1.2, "112233");
  slide.addText([
    { text: "Definition: ", options: { bold: true, color: GOLD } },
    { text: "Anatomical nomenclature is the standardized system of terms used to describe the ", options: { color: WHITE } },
    { text: "location, orientation, and relationships", options: { bold: true, color: LTEAL } },
    { text: " of body structures — providing a universal reference language for clinicians, anatomists, and scientists worldwide.", options: { color: WHITE } }
  ], {
    x: 0.55, y: 1.05, w: 9.0, h: 1.1,
    fontSize: 14, fontFace: "Calibri", valign: "middle"
  });

  // Three key pillars
  const pillars = [
    { icon: "📍", title: "Reference Point", desc: "All terms are defined relative to the Anatomical Position — the body's universal starting posture." },
    { icon: "🌐", title: "Universal Language", desc: "Allows precise communication across all medical specialties, languages, and institutions." },
    { icon: "🔗", title: "Systematic Structure", desc: "Organized into planes, directional terms, and regional terms for complete spatial description." }
  ];
  pillars.forEach((p, i) => {
    const xPos = 0.35 + i * 3.15;
    addCard(slide, xPos, 2.35, 2.95, 2.9, "0F2030");
    slide.addText(p.icon, {
      x: xPos, y: 2.4, w: 2.95, h: 0.6,
      fontSize: 28, align: "center", fontFace: "Segoe UI Emoji"
    });
    slide.addText(p.title, {
      x: xPos + 0.1, y: 3.0, w: 2.75, h: 0.45,
      fontSize: 13, bold: true, color: GOLD,
      fontFace: "Calibri", align: "center"
    });
    slide.addText(p.desc, {
      x: xPos + 0.1, y: 3.5, w: 2.75, h: 1.6,
      fontSize: 11, color: WHITE, fontFace: "Calibri",
      align: "center", valign: "top"
    });
  });
}

// ─────────────────────────────────────────────
// SLIDE 3 — THE ANATOMICAL POSITION
// ─────────────────────────────────────────────
{
  let slide = pres.addSlide();
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY }, line: { color: NAVY }
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
  });

  slide.addText("The Anatomical Position", {
    x: 0.35, y: 0.18, w: 9.4, h: 0.65,
    fontSize: 26, bold: true, color: TEAL,
    fontFace: "Calibri", valign: "middle"
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0.35, y: 0.82, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
  });

  // Image on right
  if (anatomyImg && !anatomyImg.error) {
    slide.addImage({
      data: anatomyImg.base64,
      x: 5.4, y: 0.95, w: 4.25, h: 4.5
    });
  }

  // Left: criteria list
  slide.addText("Standard Reference Posture", {
    x: 0.35, y: 0.95, w: 4.8, h: 0.45,
    fontSize: 14, bold: true, color: GOLD,
    fontFace: "Calibri"
  });

  const criteria = [
    "Body standing upright",
    "Feet together, toes pointing forward",
    "Hands by the sides, palms facing forward",
    "Face looking forward; mouth closed",
    "Expression neutral; eyes open",
    "Inferior orbital margin level with top of external auditory meatus",
  ];
  criteria.forEach((c, i) => {
    addCard(slide, 0.35, 1.5 + i * 0.62, 4.8, 0.55, "0F2030");
    slide.addShape(pres.ShapeType.rect, {
      x: 0.35, y: 1.5 + i * 0.62, w: 0.08, h: 0.55,
      fill: { color: TEAL }, line: { color: TEAL }
    });
    slide.addText(c, {
      x: 0.55, y: 1.5 + i * 0.62, w: 4.5, h: 0.55,
      fontSize: 12, color: WHITE, fontFace: "Calibri",
      valign: "middle"
    });
  });

  // Caption for image
  slide.addText("Fig. 1.1 — Anatomical Position, Planes & Directional Terms\n(Gray's Anatomy for Students)", {
    x: 5.4, y: 5.1, w: 4.25, h: 0.45,
    fontSize: 8.5, color: "6B8CAE", fontFace: "Calibri",
    align: "center", italic: true
  });
}

// ─────────────────────────────────────────────
// SLIDE 4 — ANATOMICAL PLANES
// ─────────────────────────────────────────────
{
  let slide = pres.addSlide();
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY }, line: { color: NAVY }
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
  });

  slide.addText("Anatomical Planes", {
    x: 0.35, y: 0.18, w: 9.4, h: 0.65,
    fontSize: 26, bold: true, color: TEAL,
    fontFace: "Calibri", valign: "middle"
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0.35, y: 0.82, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
  });

  slide.addText("Three major planes divide the body in the anatomical position:", {
    x: 0.35, y: 0.92, w: 9.3, h: 0.38,
    fontSize: 13, color: LTEAL, fontFace: "Calibri", italic: true
  });

  const planes = [
    {
      name: "Coronal Plane",
      alt: "(Frontal Plane)",
      orient: "Vertical",
      divides: "Anterior (front) and Posterior (back) parts",
      color: "1A6B7A",
      example: 'e.g. A cut through the shoulders parallel to the chest'
    },
    {
      name: "Sagittal Plane",
      alt: "(Median Sagittal = midline)",
      orient: "Vertical, ⊥ to coronal",
      divides: "Right and Left parts",
      color: "1A5C8A",
      example: 'e.g. The median plane splits body into equal halves'
    },
    {
      name: "Transverse Plane",
      alt: "(Horizontal / Axial)",
      orient: "Horizontal",
      divides: "Superior (upper) and Inferior (lower) parts",
      color: "5A3A8A",
      example: 'e.g. A CT cross-section through the abdomen'
    }
  ];

  planes.forEach((pl, i) => {
    const xPos = 0.35 + i * 3.15;
    // Card
    slide.addShape(pres.ShapeType.rect, {
      x: xPos, y: 1.45, w: 2.95, h: 3.85,
      fill: { color: pl.color }, line: { color: TEAL, pt: 1 },
      rectRadius: 0.08
    });
    // Top accent band
    slide.addShape(pres.ShapeType.rect, {
      x: xPos, y: 1.45, w: 2.95, h: 0.42,
      fill: { color: TEAL }, line: { color: TEAL },
      rectRadius: 0.08
    });
    slide.addText(pl.name, {
      x: xPos + 0.08, y: 1.45, w: 2.8, h: 0.42,
      fontSize: 14, bold: true, color: NAVY,
      fontFace: "Calibri", valign: "middle", align: "center", margin: 0
    });

    slide.addText(pl.alt, {
      x: xPos + 0.1, y: 1.95, w: 2.75, h: 0.38,
      fontSize: 11, color: GOLD, fontFace: "Calibri", italic: true, align: "center"
    });

    slide.addText("Orientation:", {
      x: xPos + 0.1, y: 2.38, w: 2.75, h: 0.3,
      fontSize: 11, bold: true, color: LTEAL, fontFace: "Calibri"
    });
    slide.addText(pl.orient, {
      x: xPos + 0.1, y: 2.66, w: 2.75, h: 0.35,
      fontSize: 12, color: WHITE, fontFace: "Calibri"
    });

    slide.addText("Divides into:", {
      x: xPos + 0.1, y: 3.05, w: 2.75, h: 0.3,
      fontSize: 11, bold: true, color: LTEAL, fontFace: "Calibri"
    });
    slide.addText(pl.divides, {
      x: xPos + 0.1, y: 3.35, w: 2.75, h: 0.55,
      fontSize: 12, color: WHITE, fontFace: "Calibri"
    });

    slide.addShape(pres.ShapeType.rect, {
      x: xPos + 0.1, y: 3.95, w: 2.75, h: 0.04,
      fill: { color: GOLD }, line: { color: GOLD }
    });
    slide.addText(pl.example, {
      x: xPos + 0.1, y: 4.03, w: 2.75, h: 0.9,
      fontSize: 10.5, color: GOLD, fontFace: "Calibri", italic: true
    });
  });
}

// ─────────────────────────────────────────────
// SLIDE 5 — TERMS OF LOCATION (ANTERIOR/POSTERIOR, MEDIAL/LATERAL, SUPERIOR/INFERIOR)
// ─────────────────────────────────────────────
{
  let slide = pres.addSlide();
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY }, line: { color: NAVY }
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
  });

  slide.addText("Terms of Location — Part 1", {
    x: 0.35, y: 0.18, w: 9.4, h: 0.65,
    fontSize: 26, bold: true, color: TEAL,
    fontFace: "Calibri", valign: "middle"
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0.35, y: 0.82, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
  });

  const termPairs = [
    {
      left: "Anterior", leftSub: "(Ventral)", leftDesc: 'Toward the FRONT of the body\n\ne.g. The nose is an anterior structure. The sternum is anterior to the heart.',
      right: "Posterior", rightSub: "(Dorsal)", rightDesc: 'Toward the BACK of the body\n\ne.g. The vertebral column is posterior to the sternum.',
      color: "1A6B7A"
    },
    {
      left: "Medial", leftSub: "", leftDesc: 'Closer to the MEDIAN sagittal plane (midline)\n\ne.g. The nose is medial to the eyes.',
      right: "Lateral", rightSub: "", rightDesc: 'Farther from the midline\n\ne.g. The thumb is lateral to the little finger.',
      color: "1A5C8A"
    },
    {
      left: "Superior", leftSub: "", leftDesc: 'Toward the TOP of the body (head)\n\ne.g. The head is superior to the shoulders.',
      right: "Inferior", rightSub: "", rightDesc: 'Toward the BOTTOM of the body (feet)\n\ne.g. The knee is inferior to the hip joint.',
      color: "5A3A8A"
    }
  ];

  termPairs.forEach((pair, i) => {
    const yPos = 1.0 + i * 1.5;

    // Left card
    addCard(slide, 0.35, yPos, 4.3, 1.35, pair.color);
    slide.addShape(pres.ShapeType.rect, {
      x: 0.35, y: yPos, w: 4.3, h: 0.36,
      fill: { color: TEAL }, line: { color: TEAL }
    });
    slide.addText([
      { text: pair.left, options: { bold: true } },
      { text: pair.leftSub ? "  " + pair.leftSub : "", options: { italic: true, fontSize: 11 } }
    ], {
      x: 0.45, y: yPos, w: 4.1, h: 0.36,
      fontSize: 14, color: NAVY, fontFace: "Calibri", valign: "middle", margin: 0
    });
    slide.addText(pair.leftDesc, {
      x: 0.45, y: yPos + 0.4, w: 4.1, h: 0.9,
      fontSize: 11, color: WHITE, fontFace: "Calibri"
    });

    // VS badge
    slide.addShape(pres.ShapeType.ellipse, {
      x: 4.73, y: yPos + 0.4, w: 0.54, h: 0.54,
      fill: { color: GOLD }, line: { color: GOLD }
    });
    slide.addText("VS", {
      x: 4.73, y: yPos + 0.4, w: 0.54, h: 0.54,
      fontSize: 11, bold: true, color: NAVY, fontFace: "Calibri",
      align: "center", valign: "middle", margin: 0
    });

    // Right card
    addCard(slide, 5.35, yPos, 4.3, 1.35, pair.color);
    slide.addShape(pres.ShapeType.rect, {
      x: 5.35, y: yPos, w: 4.3, h: 0.36,
      fill: { color: TEAL }, line: { color: TEAL }
    });
    slide.addText([
      { text: pair.right, options: { bold: true } },
      { text: pair.rightSub ? "  " + pair.rightSub : "", options: { italic: true, fontSize: 11 } }
    ], {
      x: 5.45, y: yPos, w: 4.1, h: 0.36,
      fontSize: 14, color: NAVY, fontFace: "Calibri", valign: "middle", margin: 0
    });
    slide.addText(pair.rightDesc, {
      x: 5.45, y: yPos + 0.4, w: 4.1, h: 0.9,
      fontSize: 11, color: WHITE, fontFace: "Calibri"
    });
  });
}

// ─────────────────────────────────────────────
// SLIDE 6 — TERMS OF LOCATION PART 2 (PROXIMAL/DISTAL, CRANIAL/CAUDAL, ROSTRAL)
// ─────────────────────────────────────────────
{
  let slide = pres.addSlide();
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY }, line: { color: NAVY }
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
  });

  slide.addText("Terms of Location — Part 2", {
    x: 0.35, y: 0.18, w: 9.4, h: 0.65,
    fontSize: 26, bold: true, color: TEAL,
    fontFace: "Calibri", valign: "middle"
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0.35, y: 0.82, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
  });

  const terms = [
    {
      term: "Proximal",
      opp: "↔ Distal",
      desc: "Closer to the origin or point of attachment (limbs & branching structures).",
      example: "e.g. The glenohumeral joint is proximal to the elbow. Distal branches are farther from origin.",
      icon: "🦴"
    },
    {
      term: "Cranial",
      opp: "↔ Caudal",
      desc: "Toward the head (cranial) or toward the tail/inferior spine (caudal). Used in embryology and comparative anatomy.",
      example: "e.g. The brain is cranial to the spinal cord. The sacrum is caudal to the lumbar vertebrae.",
      icon: "🧠"
    },
    {
      term: "Rostral",
      opp: "(Head only)",
      desc: "Used within the head/brain to describe position relative to the nose.",
      example: "e.g. The forebrain (frontal lobe) is rostral to the hindbrain (cerebellum).",
      icon: "👃"
    }
  ];

  terms.forEach((t, i) => {
    const yPos = 1.0 + i * 1.5;
    addCard(slide, 0.35, yPos, 9.3, 1.35, "0F2030");
    slide.addShape(pres.ShapeType.rect, {
      x: 0.35, y: yPos, w: 0.08, h: 1.35,
      fill: { color: TEAL }, line: { color: TEAL }
    });

    // Icon
    slide.addText(t.icon, {
      x: 0.5, y: yPos + 0.3, w: 0.7, h: 0.7,
      fontSize: 26, fontFace: "Segoe UI Emoji", align: "center"
    });

    // Term badge
    slide.addShape(pres.ShapeType.rect, {
      x: 1.3, y: yPos + 0.15, w: 1.8, h: 0.45,
      fill: { color: TEAL }, line: { color: TEAL }, rectRadius: 0.04
    });
    slide.addText(t.term, {
      x: 1.3, y: yPos + 0.15, w: 1.8, h: 0.45,
      fontSize: 15, bold: true, color: NAVY, fontFace: "Calibri",
      align: "center", valign: "middle", margin: 0
    });
    slide.addText(t.opp, {
      x: 1.3, y: yPos + 0.65, w: 1.8, h: 0.3,
      fontSize: 10, color: GOLD, fontFace: "Calibri",
      align: "center", italic: true
    });

    slide.addText(t.desc, {
      x: 3.25, y: yPos + 0.1, w: 6.2, h: 0.6,
      fontSize: 12, color: WHITE, fontFace: "Calibri"
    });
    slide.addText(t.example, {
      x: 3.25, y: yPos + 0.72, w: 6.2, h: 0.55,
      fontSize: 11, color: GOLD, fontFace: "Calibri", italic: true
    });
  });
}

// ─────────────────────────────────────────────
// SLIDE 7 — SUPERFICIAL & DEEP
// ─────────────────────────────────────────────
{
  let slide = pres.addSlide();
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY }, line: { color: NAVY }
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
  });

  slide.addText("Superficial & Deep", {
    x: 0.35, y: 0.18, w: 9.4, h: 0.65,
    fontSize: 26, bold: true, color: TEAL,
    fontFace: "Calibri", valign: "middle"
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0.35, y: 0.82, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
  });

  // Two main cards side by side
  // Superficial
  slide.addShape(pres.ShapeType.rect, {
    x: 0.35, y: 1.0, w: 4.4, h: 3.5,
    fill: { color: "0A2E3A" }, line: { color: TEAL, pt: 1.5 }, rectRadius: 0.08
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0.35, y: 1.0, w: 4.4, h: 0.52,
    fill: { color: TEAL }, line: { color: TEAL }
  });
  slide.addText("SUPERFICIAL", {
    x: 0.45, y: 1.0, w: 4.2, h: 0.52,
    fontSize: 17, bold: true, color: NAVY, fontFace: "Calibri",
    align: "center", valign: "middle", margin: 0
  });
  slide.addText([
    { text: "External to the outer layer of deep fascia\n\n", options: { bold: true, color: LTEAL } },
    { text: "Structures include:\n", options: { bold: true, color: GOLD } },
    { text: "• Skin\n• Superficial fascia\n• Mammary glands\n\n", options: { color: WHITE } },
    { text: 'Example: ', options: { bold: true, color: GOLD } },
    { text: '"The sternum is superficial to the heart."', options: { color: WHITE, italic: true } }
  ], {
    x: 0.5, y: 1.6, w: 4.15, h: 2.8,
    fontSize: 12, fontFace: "Calibri"
  });

  // Deep
  slide.addShape(pres.ShapeType.rect, {
    x: 5.25, y: 1.0, w: 4.4, h: 3.5,
    fill: { color: "0A1E38" }, line: { color: "5A7ABB", pt: 1.5 }, rectRadius: 0.08
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 5.25, y: 1.0, w: 4.4, h: 0.52,
    fill: { color: "5A7ABB" }, line: { color: "5A7ABB" }
  });
  slide.addText("DEEP", {
    x: 5.35, y: 1.0, w: 4.2, h: 0.52,
    fontSize: 17, bold: true, color: WHITE, fontFace: "Calibri",
    align: "center", valign: "middle", margin: 0
  });
  slide.addText([
    { text: "Enclosed within the outer layer of deep fascia\n\n", options: { bold: true, color: LTEAL } },
    { text: "Structures include:\n", options: { bold: true, color: GOLD } },
    { text: "• Most skeletal muscles\n• Viscera (organs)\n\n", options: { color: WHITE } },
    { text: 'Example: ', options: { bold: true, color: GOLD } },
    { text: '"The stomach is deep to the abdominal wall."', options: { color: WHITE, italic: true } }
  ], {
    x: 5.4, y: 1.6, w: 4.15, h: 2.8,
    fontSize: 12, fontFace: "Calibri"
  });

  // Key concept arrow
  slide.addShape(pres.ShapeType.rect, {
    x: 4.75, y: 2.3, w: 0.5, h: 0.38,
    fill: { color: GOLD }, line: { color: GOLD }
  });
  slide.addText("↔", {
    x: 4.75, y: 2.3, w: 0.5, h: 0.38,
    fontSize: 18, bold: true, color: NAVY, fontFace: "Calibri",
    align: "center", valign: "middle", margin: 0
  });

  // Bottom note
  slide.addText("Superficial wounds are external to the outer layer of deep fascia; deep wounds penetrate through it.", {
    x: 0.35, y: 4.6, w: 9.3, h: 0.6,
    fontSize: 11, color: LTEAL, fontFace: "Calibri", italic: true, align: "center"
  });
}

// ─────────────────────────────────────────────
// SLIDE 8 — COMPLETE REFERENCE TABLE
// ─────────────────────────────────────────────
{
  let slide = pres.addSlide();
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY }, line: { color: NAVY }
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
  });

  slide.addText("Quick Reference — All Terms", {
    x: 0.35, y: 0.18, w: 9.4, h: 0.55,
    fontSize: 24, bold: true, color: TEAL, fontFace: "Calibri", valign: "middle"
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0.35, y: 0.72, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
  });

  // Table headers
  const headers = ["Term", "Opposite / Pair", "Meaning", "Example"];
  const colW = [1.8, 1.8, 3.0, 2.5];
  const colX = [0.35, 2.15, 3.95, 6.95];

  // Header row
  colX.forEach((x, i) => {
    slide.addShape(pres.ShapeType.rect, {
      x, y: 0.82, w: colW[i] - 0.05, h: 0.4,
      fill: { color: TEAL }, line: { color: TEAL }
    });
    slide.addText(headers[i], {
      x: x + 0.06, y: 0.82, w: colW[i] - 0.15, h: 0.4,
      fontSize: 12, bold: true, color: NAVY, fontFace: "Calibri",
      valign: "middle", margin: 0
    });
  });

  const rows = [
    ["Anterior", "Posterior", "Toward the front", "Nose is anterior"],
    ["Posterior", "Anterior", "Toward the back", "Vertebrae are posterior"],
    ["Medial", "Lateral", "Toward the midline", "Nose is medial to eyes"],
    ["Lateral", "Medial", "Away from midline", "Thumb is lateral"],
    ["Superior", "Inferior", "Toward the head", "Head > shoulders"],
    ["Inferior", "Superior", "Toward the feet", "Knee < hip joint"],
    ["Proximal", "Distal", "Closer to origin", "Shoulder > elbow"],
    ["Distal", "Proximal", "Farther from origin", "Hand < elbow"],
    ["Cranial", "Caudal", "Toward the head", "Brain is cranial"],
    ["Rostral", "--", "Toward the nose (brain)", "Forebrain > hindbrain"],
    ["Superficial", "Deep", "Toward body surface", "Sternum > heart"],
    ["Deep", "Superficial", "Away from surface", "Stomach < abdominal wall"],
  ];

  rows.forEach((row, i) => {
    const yPos = 1.28 + i * 0.35;
    const bg = i % 2 === 0 ? "0F2030" : "112438";
    colX.forEach((x, j) => {
      slide.addShape(pres.ShapeType.rect, {
        x, y: yPos, w: colW[j] - 0.05, h: 0.33,
        fill: { color: bg }, line: { color: "1B3A52", pt: 0.5 }
      });
      slide.addText(row[j], {
        x: x + 0.06, y: yPos, w: colW[j] - 0.15, h: 0.33,
        fontSize: j === 0 ? 11 : 10,
        bold: j === 0,
        color: j === 0 ? GOLD : WHITE,
        fontFace: "Calibri", valign: "middle", margin: 0
      });
    });
  });
}

// ─────────────────────────────────────────────
// SLIDE 9 — INCLUSIVE TERMINOLOGY
// ─────────────────────────────────────────────
{
  let slide = pres.addSlide();
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY }, line: { color: NAVY }
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
  });

  slide.addText("Inclusive Anatomical Terminology", {
    x: 0.35, y: 0.18, w: 9.4, h: 0.65,
    fontSize: 24, bold: true, color: TEAL, fontFace: "Calibri", valign: "middle"
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0.35, y: 0.82, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
  });

  // Context box
  addCard(slide, 0.35, 0.95, 9.3, 1.1, "112233");
  slide.addText(
    "Modern anatomy acknowledges that not all individuals fit a sex-binary model. This includes intersex, non-binary, and transgender people. Inclusive language should be used in clinical practice — preferring the patient's own anatomical terminology and basing care on present anatomy.",
    {
      x: 0.55, y: 1.0, w: 9.0, h: 1.0,
      fontSize: 12, color: WHITE, fontFace: "Calibri", valign: "middle"
    }
  );

  // Table
  const inclHeaders = ["Inclusive Term (Preferred)", "Instead Of"];
  const inclColW = [4.5, 4.5];
  const inclColX = [0.35, 4.95];

  inclColX.forEach((x, i) => {
    slide.addShape(pres.ShapeType.rect, {
      x, y: 2.18, w: inclColW[i] - 0.1, h: 0.42,
      fill: { color: TEAL }, line: { color: TEAL }
    });
    slide.addText(inclHeaders[i], {
      x: x + 0.1, y: 2.18, w: inclColW[i] - 0.25, h: 0.42,
      fontSize: 13, bold: true, color: NAVY, fontFace: "Calibri",
      valign: "middle", margin: 0
    });
  });

  const inclRows = [
    ["Upper body", "Chest / Breast"],
    ["Erectile tissue", "Penis / Clitoris"],
    ["Gonads", "Testes / Ovaries"],
  ];
  inclRows.forEach((row, i) => {
    const yPos = 2.65 + i * 0.55;
    const bg = i % 2 === 0 ? "0F2030" : "112438";
    inclColX.forEach((x, j) => {
      slide.addShape(pres.ShapeType.rect, {
        x, y: yPos, w: inclColW[j] - 0.1, h: 0.48,
        fill: { color: bg }, line: { color: "1B3A52", pt: 0.5 }
      });
      slide.addText(row[j], {
        x: x + 0.1, y: yPos, w: inclColW[j] - 0.25, h: 0.48,
        fontSize: 13, bold: j === 0, color: j === 0 ? GOLD : WHITE,
        fontFace: "Calibri", valign: "middle", margin: 0
      });
    });
  });

  // Bottom principle
  addCard(slide, 0.35, 4.37, 9.3, 0.88, "0A2010");
  slide.addShape(pres.ShapeType.rect, {
    x: 0.35, y: 4.37, w: 0.08, h: 0.88, fill: { color: "2ECC71" }, line: { color: "2ECC71" }
  });
  slide.addText([
    { text: "Clinical Principle: ", options: { bold: true, color: "2ECC71" } },
    { text: "Clinicians should base care on the patient's PRESENT ANATOMY and use the patient's preferred terminology — not assumptions about gender.", options: { color: WHITE } }
  ], {
    x: 0.55, y: 4.42, w: 9.0, h: 0.78,
    fontSize: 12, fontFace: "Calibri", valign: "middle"
  });
}

// ─────────────────────────────────────────────
// SLIDE 10 — SUMMARY / CLOSING
// ─────────────────────────────────────────────
{
  let slide = pres.addSlide();
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 10, h: 5.625, fill: { color: DARK }, line: { color: DARK }
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 4.9, w: 10, h: 0.725, fill: { color: NAVY }, line: { color: NAVY }
  });

  slide.addText("Summary", {
    x: 0.35, y: 0.2, w: 9.3, h: 0.6,
    fontSize: 30, bold: true, color: TEAL, fontFace: "Calibri"
  });
  slide.addShape(pres.ShapeType.rect, {
    x: 0.35, y: 0.82, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
  });

  const summaryPoints = [
    { icon: "📌", title: "Anatomical Position", desc: "The universal reference posture — upright, palms forward, feet together, face forward." },
    { icon: "✂️", title: "3 Body Planes", desc: "Coronal (front/back), Sagittal (left/right), Transverse (top/bottom)." },
    { icon: "🧭", title: "Primary Directional Terms", desc: "Anterior/Posterior, Medial/Lateral, Superior/Inferior — describe position relative to body or other structures." },
    { icon: "📏", title: "Limb & Branching Terms", desc: "Proximal (closer to origin) / Distal (farther from origin); Cranial/Caudal; Rostral (brain/head)." },
    { icon: "🌊", title: "Superficial & Deep", desc: "Relative to the outer layer of deep fascia — superficial (skin/fascia) vs deep (muscles/viscera)." },
    { icon: "🫀", title: "Inclusive Terminology", desc: "Use patient-preferred terms; base clinical care on present anatomy, not gender assumptions." },
  ];

  summaryPoints.forEach((pt, i) => {
    const col = i % 2;
    const row = Math.floor(i / 2);
    const xPos = col === 0 ? 0.35 : 5.15;
    const yPos = 1.0 + row * 1.3;

    addCard(slide, xPos, yPos, 4.6, 1.15, "0F2030");
    slide.addShape(pres.ShapeType.rect, {
      x: xPos, y: yPos, w: 0.08, h: 1.15, fill: { color: TEAL }, line: { color: TEAL }
    });

    slide.addText(pt.icon, {
      x: xPos + 0.15, y: yPos + 0.2, w: 0.55, h: 0.6,
      fontSize: 22, fontFace: "Segoe UI Emoji"
    });
    slide.addText(pt.title, {
      x: xPos + 0.75, y: yPos + 0.08, w: 3.7, h: 0.38,
      fontSize: 12, bold: true, color: GOLD, fontFace: "Calibri"
    });
    slide.addText(pt.desc, {
      x: xPos + 0.75, y: yPos + 0.48, w: 3.7, h: 0.65,
      fontSize: 10.5, color: WHITE, fontFace: "Calibri"
    });
  });

  slide.addText("Source: Gray's Anatomy for Students  |  Orris Medical Library", {
    x: 0.35, y: 4.93, w: 9.3, h: 0.38,
    fontSize: 10, color: "6B8CAE", fontFace: "Calibri",
    align: "center", italic: true
  });
}

// Write file
pres.writeFile({ fileName: "/home/daytona/workspace/anatomical-nomenclature-pptx/Anatomical_Nomenclature.pptx" })
  .then(() => console.log("DONE: Anatomical_Nomenclature.pptx created"))
  .catch(err => { console.error("ERROR:", err); process.exit(1); });
Running Command

cd /home/daytona/workspace/anatomical-nomenclature-pptx && node create_pptx.js 2>&1

Running Command

cd /home/daytona/workspace/anatomical-nomenclature-pptx && node /home/daytona/skills/shared/scripts/fetch_images.js "https://cdn.orris.care/cdss_images/a6821ed545aa1fb79ab82e9b83a926f549f85bed1add3edc7d6e458dff65071d.png" > /home/daytona/workspace/anatomical-nomenclature-pptx/anatomy_img.json 2>&1; echo "EXIT: $?"

Editing File

~/anatomical-nomenclature-pptx/create_pptx.js

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/anatomical-nomenclature-pptx/create_pptx.js'
Running Command

cd /home/daytona/workspace/anatomical-nomenclature-pptx && node create_pptx.js 2>&1

Your presentation is ready! Here's a summary of what's inside:
10 slides with a dark navy + teal medical theme:
SlideContent
1Title slide with topic tag pills
2What is Anatomical Nomenclature? (definition + 3 key pillars)
3The Anatomical Position (criteria + textbook diagram)
4Anatomical Planes (Coronal, Sagittal, Transverse - 3 cards)
5Terms of Location Part 1 (Anterior/Posterior, Medial/Lateral, Superior/Inferior)
6Terms of Location Part 2 (Proximal/Distal, Cranial/Caudal, Rostral)
7Superficial & Deep (side-by-side comparison)
8Complete Quick Reference Table (all 12 terms)
9Inclusive Anatomical Terminology
10Summary slide with all 6 key takeaways

Anatomical Nomenclature

Presentation · PPTX

make me flow charts of this in easy way

Reading File
Reading File
Writing File

~/anatomical-nomenclature-pptx/create_flowcharts.js

const pptxgen = require("pptxgenjs");

let pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Anatomical Nomenclature – Flowcharts";

// ─── PALETTE ───
const BG     = "F0F7FF";  // light blue-white background
const NAVY   = "0D1B2A";
const TEAL   = "1B9AAA";
const LTEAL  = "D0F0F5";
const BLUE   = "2563EB";
const LBLUE  = "DBEAFE";
const GREEN  = "16A34A";
const LGREEN = "DCFCE7";
const PURPLE = "7C3AED";
const LPURP  = "EDE9FE";
const ORANGE = "EA580C";
const LORAN  = "FFEDD5";
const GOLD   = "D97706";
const LGOLD  = "FEF3C7";
const RED    = "DC2626";
const LRED   = "FEE2E2";
const WHITE  = "FFFFFF";
const DARK   = "1E293B";
const GRAY   = "64748B";

// ─── HELPERS ───

function bg(slide) {
  slide.addShape(pres.ShapeType.rect, {
    x:0, y:0, w:10, h:5.625, fill:{color: BG}, line:{color: BG}
  });
}

// Rounded box node
function node(slide, x, y, w, h, text, fillColor, textColor, fontSize, bold) {
  slide.addShape(pres.ShapeType.roundRect, {
    x, y, w, h,
    fill:{color: fillColor},
    line:{color: darken(fillColor), pt:1.5},
    rectRadius: 0.12
  });
  slide.addText(text, {
    x, y, w, h,
    fontSize: fontSize || 12,
    bold: bold !== false,
    color: textColor || WHITE,
    fontFace: "Calibri",
    align: "center",
    valign: "middle",
    margin: 4
  });
}

// Diamond decision shape
function diamond(slide, x, y, w, h, text, fillColor, textColor) {
  slide.addShape(pres.ShapeType.diamond, {
    x, y, w, h,
    fill:{color: fillColor || GOLD},
    line:{color: darken(fillColor || GOLD), pt:1.5}
  });
  slide.addText(text, {
    x, y, w, h,
    fontSize: 11,
    bold: true,
    color: textColor || WHITE,
    fontFace: "Calibri",
    align: "center",
    valign: "middle",
    margin: 4
  });
}

// Arrow down
function arrowDown(slide, x, y, len) {
  slide.addShape(pres.ShapeType.line, {
    x, y, w:0, h: len,
    line:{color: GRAY, pt:1.5, endArrowType:"arrow"}
  });
}

// Arrow right
function arrowRight(slide, x, y, len) {
  slide.addShape(pres.ShapeType.line, {
    x, y, w: len, h:0,
    line:{color: GRAY, pt:1.5, endArrowType:"arrow"}
  });
}

// Arrow left
function arrowLeft(slide, x, y, len) {
  slide.addShape(pres.ShapeType.line, {
    x: x+len, y, w: -len, h:0,
    line:{color: GRAY, pt:1.5, endArrowType:"arrow"}
  });
}

// Connector line (no arrow)
function line(slide, x1, y1, x2, y2, color) {
  slide.addShape(pres.ShapeType.line, {
    x:x1, y:y1, w:(x2-x1), h:(y2-y1),
    line:{color: color||GRAY, pt:1.5}
  });
}

function darken(hex) {
  // slightly darken a hex color for border
  const n = parseInt(hex, 16);
  const r = Math.max(0, ((n>>16)&0xFF) - 40);
  const g = Math.max(0, ((n>>8)&0xFF) - 40);
  const b = Math.max(0, (n&0xFF) - 40);
  return ((r<<16)|(g<<8)|b).toString(16).padStart(6,"0");
}

// Slide title bar
function titleBar(slide, text, sub) {
  slide.addShape(pres.ShapeType.rect, {
    x:0, y:0, w:10, h:0.7, fill:{color: TEAL}, line:{color: TEAL}
  });
  slide.addText(text, {
    x:0.2, y:0, w:7, h:0.7,
    fontSize:20, bold:true, color:WHITE,
    fontFace:"Calibri", valign:"middle"
  });
  if (sub) {
    slide.addText(sub, {
      x:7, y:0, w:2.8, h:0.7,
      fontSize:10, color:LTEAL,
      fontFace:"Calibri", valign:"middle", align:"right", italic:true
    });
  }
}

// Small label above/below an arrow
function label(slide, x, y, text, color) {
  slide.addText(text, {
    x, y, w:1.2, h:0.28,
    fontSize:9, color: color||GRAY, fontFace:"Calibri", align:"center", italic:true
  });
}

// ═══════════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ═══════════════════════════════════════════════════════════
{
  let slide = pres.addSlide();
  slide.addShape(pres.ShapeType.rect, {
    x:0, y:0, w:10, h:5.625, fill:{color:NAVY}, line:{color:NAVY}
  });
  // decorative circles
  slide.addShape(pres.ShapeType.ellipse, {x:7.5, y:-0.5, w:3.5, h:3.5, fill:{color:"1B2E40"}, line:{color:"1B2E40"}});
  slide.addShape(pres.ShapeType.ellipse, {x:-0.8, y:3.5, w:2.5, h:2.5, fill:{color:"1B2E40"}, line:{color:"1B2E40"}});

  slide.addText("Anatomical\nNomenclature", {
    x:1, y:0.9, w:8, h:2.0,
    fontSize:46, bold:true, color:WHITE, fontFace:"Calibri", align:"center"
  });
  slide.addShape(pres.ShapeType.rect, {
    x:2.5, y:3.05, w:5, h:0.06, fill:{color:TEAL}, line:{color:TEAL}
  });
  slide.addText("Visual Flowchart Guide", {
    x:1, y:3.2, w:8, h:0.5,
    fontSize:20, color:LTEAL, fontFace:"Calibri", align:"center", italic:true
  });

  const topics = ["Anatomical Position","Body Planes","Directional Terms","Superficial & Deep"];
  topics.forEach((t,i) => {
    slide.addShape(pres.ShapeType.roundRect, {
      x:0.4+i*2.3, y:4.05, w:2.1, h:0.42,
      fill:{color:"1B3A52"}, line:{color:TEAL, pt:1}, rectRadius:0.18
    });
    slide.addText(t, {
      x:0.4+i*2.3, y:4.05, w:2.1, h:0.42,
      fontSize:10, color:LTEAL, fontFace:"Calibri", align:"center", valign:"middle"
    });
  });
  slide.addText("Source: Gray's Anatomy for Students", {
    x:1, y:5.2, w:8, h:0.3,
    fontSize:10, color:"4A6680", fontFace:"Calibri", align:"center", italic:true
  });
}

// ═══════════════════════════════════════════════════════════
// SLIDE 2 — OVERVIEW FLOWCHART (master map)
// ═══════════════════════════════════════════════════════════
{
  let slide = pres.addSlide();
  bg(slide);
  titleBar(slide, "Overview: What is Anatomical Nomenclature?", "Master Map");

  // Central node
  node(slide, 3.4, 0.85, 3.2, 0.7, "ANATOMICAL\nNOMENCLATURE", TEAL, WHITE, 13, true);

  // Arrow down from centre
  arrowDown(slide, 5.0, 1.55, 0.38);

  // 5 branches coming down — row of 5 boxes
  const branches = [
    {label:"1. Anatomical\nPosition",    fill:BLUE,   lx:0.25},
    {label:"2. Body\nPlanes",            fill:GREEN,  lx:2.2},
    {label:"3. Direction\nTerms",        fill:PURPLE, lx:4.15},
    {label:"4. Proximal /\nDistal etc.", fill:ORANGE, lx:6.1},
    {label:"5. Superficial\n& Deep",     fill:RED,    lx:8.05},
  ];

  // horizontal bar
  slide.addShape(pres.ShapeType.line, {
    x:1.1, y:1.93, w:7.8, h:0,
    line:{color:GRAY, pt:1.5}
  });

  branches.forEach((b,i) => {
    // tick down from bar
    arrowDown(slide, b.lx+0.9, 1.93, 0.35);
    node(slide, b.lx, 2.28, 1.82, 0.72, b.label, b.fill, WHITE, 11, true);
  });

  // sub-items for each branch
  const subs = [
    ["Upright body","Palms forward","Feet together","Face forward"],
    ["Coronal","Sagittal","Transverse","(Median)"],
    ["Anterior / Post.","Medial / Lateral","Superior / Inf.","(3 main pairs)"],
    ["Proximal / Distal","Cranial / Caudal","Rostral"],
    ["Superficial","Deep","Fascia boundary","Wounds"],
  ];

  branches.forEach((b, i) => {
    subs[i].forEach((s, j) => {
      const yy = 3.1 + j * 0.52;
      if (j < subs[i].length) {
        // connector
        slide.addShape(pres.ShapeType.line, {
          x: b.lx+0.91, y: j===0? 3.0: yy-0.02,
          w:0, h: j===0? 0.12:0,
          line:{color:GRAY, pt:1}
        });
        slide.addShape(pres.ShapeType.roundRect, {
          x: b.lx+0.04, y: yy, w:1.72, h:0.42,
          fill:{color: j%2===0? "E8F4F8":"FFFFFF"},
          line:{color:b.fill, pt:1}, rectRadius:0.06
        });
        slide.addText(s, {
          x: b.lx+0.04, y: yy, w:1.72, h:0.42,
          fontSize:9.5, color:DARK, fontFace:"Calibri",
          align:"center", valign:"middle"
        });
        if (j>0) {
          slide.addShape(pres.ShapeType.line, {
            x: b.lx+0.91, y: yy-0.07,
            w:0, h:0.08,
            line:{color:GRAY, pt:1, endArrowType:"arrow"}
          });
        }
      }
    });
  });
}

// ═══════════════════════════════════════════════════════════
// SLIDE 3 — ANATOMICAL POSITION FLOWCHART
// ═══════════════════════════════════════════════════════════
{
  let slide = pres.addSlide();
  bg(slide);
  titleBar(slide, "Flowchart: The Anatomical Position", "Step-by-step checklist");

  // START
  node(slide, 3.8, 0.82, 2.4, 0.55, "START: Set the\nAnatomical Position", TEAL, WHITE, 12);
  arrowDown(slide, 5.0, 1.37, 0.22);

  const steps = [
    {text:"Body UPRIGHT\n(standing straight)", fill:BLUE,   lbl:"Step 1"},
    {text:"Feet TOGETHER\nToes pointing FORWARD", fill:GREEN, lbl:"Step 2"},
    {text:"Hands by sides\nPALMS facing FORWARD", fill:PURPLE, lbl:"Step 3"},
    {text:"Face looking FORWARD\nMouth CLOSED, neutral", fill:ORANGE, lbl:"Step 4"},
    {text:"Inferior orbital rim\nlevel with top of ear opening", fill:RED, lbl:"Step 5"},
    {text:"Eyes OPEN\nFocused in the distance", fill:GOLD, lbl:"Step 6"},
  ];

  // Two-column waterfall layout
  const col1 = [0, 1, 2];
  const col2 = [3, 4, 5];

  col1.forEach((idx, j) => {
    const s = steps[idx];
    node(slide, 0.3, 1.59 + j*1.18, 3.8, 0.88, s.text, s.fill, WHITE, 11);
    slide.addText(s.lbl, {
      x:0.3, y:1.59+j*1.18, w:0.75, h:0.3,
      fontSize:8, bold:true, color:WHITE,
      fontFace:"Calibri", align:"center"
    });
    if (j < 2) arrowDown(slide, 2.2, 1.59+j*1.18+0.88, 0.3);
  });

  col2.forEach((idx, j) => {
    const s = steps[idx];
    node(slide, 5.9, 1.59 + j*1.18, 3.8, 0.88, s.text, s.fill, WHITE, 11);
    slide.addText(s.lbl, {
      x:5.9, y:1.59+j*1.18, w:0.75, h:0.3,
      fontSize:8, bold:true, color:WHITE,
      fontFace:"Calibri", align:"center"
    });
    if (j < 2) arrowDown(slide, 7.8, 1.59+j*1.18+0.88, 0.3);
  });

  // bridge arrow col1 -> col2 (after step3)
  slide.addShape(pres.ShapeType.line, {
    x:4.1, y:2.03, w:1.8, h:0,
    line:{color:GRAY, pt:1.5, endArrowType:"arrow"}
  });
  slide.addText("→ continue", {
    x:4.15, y:1.87, w:1.7, h:0.28,
    fontSize:9, color:GRAY, fontFace:"Calibri", align:"center", italic:true
  });

  // END
  node(slide, 3.8, 5.05, 2.4, 0.45, "✓ ANATOMICAL POSITION SET", GREEN, WHITE, 11);
}

// ═══════════════════════════════════════════════════════════
// SLIDE 4 — BODY PLANES FLOWCHART
// ═══════════════════════════════════════════════════════════
{
  let slide = pres.addSlide();
  bg(slide);
  titleBar(slide, "Flowchart: The 3 Body Planes", "How each plane divides the body");

  // Root
  node(slide, 3.5, 0.82, 3.0, 0.6, "BODY PLANES\n(3 Types)", TEAL, WHITE, 13);
  arrowDown(slide, 5.0, 1.42, 0.25);

  // Horizontal connector bar
  slide.addShape(pres.ShapeType.line, {
    x:1.5, y:1.67, w:7.0, h:0,
    line:{color:GRAY, pt:2}
  });

  // 3 columns
  const planes = [
    {
      name:"CORONAL\n(Frontal) Plane",
      fill:BLUE,
      orient:"Vertical",
      divides:"Front (Anterior)\nvs\nBack (Posterior)",
      eg:"Cut parallel to chest",
      lx:0.25
    },
    {
      name:"SAGITTAL\nPlane",
      fill:GREEN,
      orient:"Vertical\n(⊥ to Coronal)",
      divides:"Left side\nvs\nRight side",
      eg:"Median = equal halves",
      lx:3.6
    },
    {
      name:"TRANSVERSE\n(Axial/Horizontal) Plane",
      fill:PURPLE,
      orient:"Horizontal",
      divides:"Upper (Superior)\nvs\nLower (Inferior)",
      eg:"CT cross-section",
      lx:6.95
    }
  ];

  planes.forEach((p) => {
    // tick down
    arrowDown(slide, p.lx+1.4, 1.67, 0.3);
    // main plane box
    node(slide, p.lx, 1.97, 2.8, 0.72, p.name, p.fill, WHITE, 12);
    // arrow down
    arrowDown(slide, p.lx+1.4, 2.69, 0.25);
    // orientation box
    slide.addShape(pres.ShapeType.roundRect, {
      x:p.lx+0.15, y:2.94, w:2.5, h:0.55,
      fill:{color:"F1F5F9"}, line:{color:p.fill, pt:1}, rectRadius:0.08
    });
    slide.addText([
      {text:"Orientation: ", options:{bold:true, color:p.fill}},
      {text:p.orient, options:{color:DARK}}
    ], {
      x:p.lx+0.15, y:2.94, w:2.5, h:0.55,
      fontSize:11, fontFace:"Calibri", align:"center", valign:"middle"
    });
    arrowDown(slide, p.lx+1.4, 3.49, 0.22);
    // divides box
    slide.addShape(pres.ShapeType.roundRect, {
      x:p.lx+0.15, y:3.71, w:2.5, h:0.72,
      fill:{color:"EFF6FF"}, line:{color:p.fill, pt:1}, rectRadius:0.08
    });
    slide.addText([
      {text:"Divides:\n", options:{bold:true, color:p.fill}},
      {text:p.divides, options:{color:DARK}}
    ], {
      x:p.lx+0.15, y:3.71, w:2.5, h:0.72,
      fontSize:11, fontFace:"Calibri", align:"center", valign:"middle"
    });
    arrowDown(slide, p.lx+1.4, 4.43, 0.2);
    // example
    slide.addShape(pres.ShapeType.roundRect, {
      x:p.lx+0.15, y:4.63, w:2.5, h:0.52,
      fill:{color:LGOLD}, line:{color:GOLD, pt:1}, rectRadius:0.08
    });
    slide.addText([
      {text:"e.g. ", options:{bold:true, color:GOLD}},
      {text:p.eg, options:{color:DARK, italic:true}}
    ], {
      x:p.lx+0.15, y:4.63, w:2.5, h:0.52,
      fontSize:10, fontFace:"Calibri", align:"center", valign:"middle"
    });
  });
}

// ═══════════════════════════════════════════════════════════
// SLIDE 5 — DIRECTIONAL TERMS FLOWCHART (3 pairs)
// ═══════════════════════════════════════════════════════════
{
  let slide = pres.addSlide();
  bg(slide);
  titleBar(slide, "Flowchart: Directional Terms – 3 Main Pairs", "Describing location relative to the body");

  node(slide, 3.5, 0.82, 3.0, 0.6, "WHERE IS THE\nSTRUCTURE?", TEAL, WHITE, 13);
  arrowDown(slide, 5.0, 1.42, 0.25);

  // 3 rows, each with a pair
  const pairs = [
    {
      q:"Front or Back?",
      l:{term:"ANTERIOR\n(Ventral)", fill:BLUE,   def:"Toward the FRONT", eg:'Nose, sternum'},
      r:{term:"POSTERIOR\n(Dorsal)", fill:"0369A1", def:"Toward the BACK",  eg:'Vertebral column'},
      y:1.67
    },
    {
      q:"Toward midline\nor away?",
      l:{term:"MEDIAL",  fill:GREEN,  def:"Toward the MIDLINE", eg:'Nose (vs eyes)'},
      r:{term:"LATERAL", fill:"15803D", def:"Away from midline",  eg:'Thumb (vs little finger)'},
      y:3.05
    },
    {
      q:"Higher or\nlower on body?",
      l:{term:"SUPERIOR", fill:PURPLE, def:"Toward the HEAD (top)", eg:'Head > shoulders'},
      r:{term:"INFERIOR", fill:"6D28D9", def:"Toward the FEET (bottom)", eg:'Knee < hip joint'},
      y:4.4
    }
  ];

  pairs.forEach((p) => {
    // question diamond
    diamond(slide, 4.2, p.y, 1.6, 0.58, p.q, GOLD, NAVY);
    // left arrow + box
    arrowLeft(slide, 1.1, p.y+0.29, 3.1);
    node(slide, 0.15, p.y+0.0, 2.6, 0.55, p.l.term, p.l.fill, WHITE, 12);
    // left def + eg
    slide.addShape(pres.ShapeType.roundRect, {
      x:0.15, y:p.y+0.62, w:2.6, h:0.52,
      fill:{color:LBLUE}, line:{color:p.l.fill, pt:1}, rectRadius:0.06
    });
    slide.addText([
      {text:p.l.def+"\n", options:{bold:true, color:p.l.fill, fontSize:10}},
      {text:"e.g. "+p.l.eg, options:{color:DARK, italic:true, fontSize:9}}
    ], {
      x:0.15, y:p.y+0.62, w:2.6, h:0.52,
      fontFace:"Calibri", align:"center", valign:"middle"
    });
    // right arrow + box
    arrowRight(slide, 5.8, p.y+0.29, 2.4);
    node(slide, 7.25, p.y+0.0, 2.6, 0.55, p.r.term, p.r.fill, WHITE, 12);
    // right def + eg
    slide.addShape(pres.ShapeType.roundRect, {
      x:7.25, y:p.y+0.62, w:2.6, h:0.52,
      fill:{color:LGREEN}, line:{color:p.r.fill, pt:1}, rectRadius:0.06
    });
    slide.addText([
      {text:p.r.def+"\n", options:{bold:true, color:p.r.fill, fontSize:10}},
      {text:"e.g. "+p.r.eg, options:{color:DARK, italic:true, fontSize:9}}
    ], {
      x:7.25, y:p.y+0.62, w:2.6, h:0.52,
      fontFace:"Calibri", align:"center", valign:"middle"
    });
  });
}

// ═══════════════════════════════════════════════════════════
// SLIDE 6 — PROXIMAL/DISTAL, CRANIAL/CAUDAL, ROSTRAL
// ═══════════════════════════════════════════════════════════
{
  let slide = pres.addSlide();
  bg(slide);
  titleBar(slide, "Flowchart: More Directional Terms", "Proximal/Distal · Cranial/Caudal · Rostral");

  // 3 separate mini-flowcharts side by side
  const charts = [
    {
      title:"PROXIMAL / DISTAL",
      titleFill:BLUE,
      question:"Distance from\nORIGIN / ATTACHMENT?",
      l:{term:"PROXIMAL", fill:BLUE,  def:"Closer to origin", eg:"Shoulder > Elbow"},
      r:{term:"DISTAL",   fill:"0369A1", def:"Farther from origin", eg:"Hand < Elbow"},
      note:"Used for limbs, vessels,\nnerves, airways",
      x:0.2
    },
    {
      title:"CRANIAL / CAUDAL",
      titleFill:GREEN,
      question:"Toward head\nor tail?",
      l:{term:"CRANIAL", fill:GREEN,  def:"Toward the HEAD",  eg:"Brain is cranial"},
      r:{term:"CAUDAL",  fill:"15803D",def:"Toward the TAIL",  eg:"Sacrum is caudal"},
      note:"Alternative to\nSuperior / Inferior",
      x:3.55
    },
    {
      title:"ROSTRAL",
      titleFill:PURPLE,
      question:"Position within\nthe BRAIN/HEAD?",
      l:{term:"ROSTRAL",  fill:PURPLE, def:"Toward the NOSE\n(used in head/brain)", eg:"Forebrain > Hindbrain"},
      r:null,
      note:"Only used in\nbrain/head anatomy",
      x:6.9
    }
  ];

  charts.forEach((c) => {
    // Title banner
    node(slide, c.x, 0.82, 2.85, 0.52, c.title, c.titleFill, WHITE, 12);
    arrowDown(slide, c.x+1.425, 1.34, 0.22);
    // Question diamond
    diamond(slide, c.x+0.42, 1.56, 2.0, 0.65, c.question, GOLD, NAVY);
    arrowDown(slide, c.x+1.425, 2.21, 0.22);

    if (c.r) {
      // Two branches
      // Left branch
      slide.addShape(pres.ShapeType.line, {
        x:c.x+0.42, y:2.43, w:0, h:0,
        line:{color:GRAY, pt:1}
      });
      arrowLeft(slide, c.x+0.05, 2.55, 1.25);
      node(slide, c.x, 2.55, 1.25, 0.58, c.l.term, c.l.fill, WHITE, 11);
      slide.addShape(pres.ShapeType.roundRect, {
        x:c.x, y:3.22, w:1.3, h:0.72,
        fill:{color:LBLUE}, line:{color:c.l.fill, pt:1}, rectRadius:0.06
      });
      slide.addText([
        {text:c.l.def+"\n", options:{bold:true, color:c.l.fill, fontSize:9.5}},
        {text:"e.g. "+c.l.eg, options:{color:DARK, italic:true, fontSize:8.5}}
      ], {
        x:c.x, y:3.22, w:1.3, h:0.72, fontFace:"Calibri", align:"center", valign:"middle"
      });

      // Right branch
      arrowRight(slide, c.x+1.7, 2.55, 1.15);
      node(slide, c.x+1.6, 2.55, 1.25, 0.58, c.r.term, c.r.fill, WHITE, 11);
      slide.addShape(pres.ShapeType.roundRect, {
        x:c.x+1.55, y:3.22, w:1.3, h:0.72,
        fill:{color:LGREEN}, line:{color:c.r.fill, pt:1}, rectRadius:0.06
      });
      slide.addText([
        {text:c.r.def+"\n", options:{bold:true, color:c.r.fill, fontSize:9.5}},
        {text:"e.g. "+c.r.eg, options:{color:DARK, italic:true, fontSize:8.5}}
      ], {
        x:c.x+1.55, y:3.22, w:1.3, h:0.72, fontFace:"Calibri", align:"center", valign:"middle"
      });
    } else {
      // Single branch (Rostral)
      node(slide, c.x, 2.55, 2.85, 0.7, c.l.term, c.l.fill, WHITE, 12);
      slide.addShape(pres.ShapeType.roundRect, {
        x:c.x, y:3.35, w:2.85, h:0.72,
        fill:{color:LPURP}, line:{color:PURPLE, pt:1}, rectRadius:0.06
      });
      slide.addText([
        {text:c.l.def+"\n", options:{bold:true, color:PURPLE, fontSize:10}},
        {text:"e.g. "+c.l.eg, options:{color:DARK, italic:true, fontSize:9}}
      ], {
        x:c.x, y:3.35, w:2.85, h:0.72, fontFace:"Calibri", align:"center", valign:"middle"
      });
    }

    // Note box at bottom
    slide.addShape(pres.ShapeType.roundRect, {
      x:c.x, y:4.18, w:2.85, h:0.72,
      fill:{color:LGOLD}, line:{color:GOLD, pt:1}, rectRadius:0.08
    });
    slide.addText([
      {text:"📌 Note: ", options:{bold:true, color:GOLD, fontSize:10}},
      {text:c.note, options:{color:DARK, fontSize:9.5}}
    ], {
      x:c.x, y:4.18, w:2.85, h:0.72,
      fontFace:"Calibri", align:"center", valign:"middle"
    });
  });
}

// ═══════════════════════════════════════════════════════════
// SLIDE 7 — SUPERFICIAL & DEEP FLOWCHART
// ═══════════════════════════════════════════════════════════
{
  let slide = pres.addSlide();
  bg(slide);
  titleBar(slide, "Flowchart: Superficial & Deep", "Relative to the outer layer of deep fascia");

  node(slide, 3.5, 0.82, 3.0, 0.6, "DESCRIBE STRUCTURE\nPOSITION", TEAL, WHITE, 13);
  arrowDown(slide, 5.0, 1.42, 0.28);

  // Decision diamond
  diamond(slide, 3.6, 1.7, 2.8, 0.78, "Is it closer to\nthe body SURFACE?", GOLD, NAVY);

  // YES path (left)
  arrowLeft(slide, 0.5, 2.09, 3.1);
  slide.addText("YES", {x:1.2, y:1.88, w:0.8, h:0.28, fontSize:10, bold:true, color:GREEN, fontFace:"Calibri", align:"center"});

  node(slide, 0.2, 1.82, 2.2, 0.58, "SUPERFICIAL", BLUE, WHITE, 15);
  arrowDown(slide, 1.3, 2.4, 0.25);

  slide.addShape(pres.ShapeType.roundRect, {
    x:0.2, y:2.65, w:2.2, h:1.22,
    fill:{color:LBLUE}, line:{color:BLUE, pt:1.5}, rectRadius:0.1
  });
  slide.addText([
    {text:"External to deep fascia\n\n", options:{bold:true, color:BLUE, fontSize:10}},
    {text:"Includes:\n• Skin\n• Superficial fascia\n• Mammary glands", options:{color:DARK, fontSize:10}}
  ], {
    x:0.2, y:2.65, w:2.2, h:1.22,
    fontFace:"Calibri", align:"center", valign:"middle"
  });

  arrowDown(slide, 1.3, 3.87, 0.22);
  slide.addShape(pres.ShapeType.roundRect, {
    x:0.2, y:4.09, w:2.2, h:0.62,
    fill:{color:LGOLD}, line:{color:GOLD, pt:1}, rectRadius:0.08
  });
  slide.addText('e.g. "Sternum is\nsuperficial to the heart"', {
    x:0.2, y:4.09, w:2.2, h:0.62,
    fontSize:10, color:DARK, fontFace:"Calibri",
    align:"center", valign:"middle", italic:true
  });

  // NO path (right)
  arrowRight(slide, 6.4, 2.09, 3.1);
  slide.addText("NO", {x:7.9, y:1.88, w:0.8, h:0.28, fontSize:10, bold:true, color:RED, fontFace:"Calibri", align:"center"});

  node(slide, 7.6, 1.82, 2.2, 0.58, "DEEP", RED, WHITE, 15);
  arrowDown(slide, 8.7, 2.4, 0.25);

  slide.addShape(pres.ShapeType.roundRect, {
    x:7.6, y:2.65, w:2.2, h:1.22,
    fill:{color:LRED}, line:{color:RED, pt:1.5}, rectRadius:0.1
  });
  slide.addText([
    {text:"Enclosed within deep fascia\n\n", options:{bold:true, color:RED, fontSize:10}},
    {text:"Includes:\n• Skeletal muscles\n• Viscera (organs)", options:{color:DARK, fontSize:10}}
  ], {
    x:7.6, y:2.65, w:2.2, h:1.22,
    fontFace:"Calibri", align:"center", valign:"middle"
  });

  arrowDown(slide, 8.7, 3.87, 0.22);
  slide.addShape(pres.ShapeType.roundRect, {
    x:7.6, y:4.09, w:2.2, h:0.62,
    fill:{color:LGOLD}, line:{color:GOLD, pt:1}, rectRadius:0.08
  });
  slide.addText('e.g. "Stomach is\ndeep to abdominal wall"', {
    x:7.6, y:4.09, w:2.2, h:0.62,
    fontSize:10, color:DARK, fontFace:"Calibri",
    align:"center", valign:"middle", italic:true
  });

  // Wound note (centre)
  slide.addShape(pres.ShapeType.roundRect, {
    x:3.4, y:2.7, w:3.2, h:1.1,
    fill:{color:"FFF7ED"}, line:{color:ORANGE, pt:1.5}, rectRadius:0.1
  });
  slide.addText([
    {text:"🩹 Wound Classification\n\n", options:{bold:true, color:ORANGE, fontSize:11}},
    {text:"Superficial wound: stays above deep fascia\nDeep wound: penetrates through deep fascia", options:{color:DARK, fontSize:10}}
  ], {
    x:3.4, y:2.7, w:3.2, h:1.1,
    fontFace:"Calibri", align:"center", valign:"middle"
  });

  // KEY boundary line note
  slide.addShape(pres.ShapeType.roundRect, {
    x:3.4, y:3.95, w:3.2, h:0.75,
    fill:{color:LGREEN}, line:{color:GREEN, pt:1.5}, rectRadius:0.1
  });
  slide.addText([
    {text:"🔑 Key Boundary: ", options:{bold:true, color:GREEN, fontSize:11}},
    {text:"The outer layer of DEEP FASCIA separates superficial from deep.", options:{color:DARK, fontSize:10}}
  ], {
    x:3.4, y:3.95, w:3.2, h:0.75,
    fontFace:"Calibri", align:"center", valign:"middle"
  });
}

// ═══════════════════════════════════════════════════════════
// SLIDE 8 — ALL TERMS AT A GLANCE (visual grid)
// ═══════════════════════════════════════════════════════════
{
  let slide = pres.addSlide();
  bg(slide);
  titleBar(slide, "All Terms at a Glance", "Quick visual reference");

  const allTerms = [
    {term:"Anterior",  opp:"Posterior",  mean:"Front",          fill:BLUE},
    {term:"Posterior", opp:"Anterior",   mean:"Back",           fill:"0369A1"},
    {term:"Medial",    opp:"Lateral",    mean:"Toward midline", fill:GREEN},
    {term:"Lateral",   opp:"Medial",     mean:"Away from midline", fill:"15803D"},
    {term:"Superior",  opp:"Inferior",   mean:"Toward head",    fill:PURPLE},
    {term:"Inferior",  opp:"Superior",   mean:"Toward feet",    fill:"6D28D9"},
    {term:"Proximal",  opp:"Distal",     mean:"Closer to origin", fill:ORANGE},
    {term:"Distal",    opp:"Proximal",   mean:"Farther from origin", fill:"C2410C"},
    {term:"Cranial",   opp:"Caudal",     mean:"Toward head",    fill:RED},
    {term:"Caudal",    opp:"Cranial",    mean:"Toward tail",    fill:"B91C1C"},
    {term:"Rostral",   opp:"--",         mean:"Toward nose (brain)", fill:GOLD},
    {term:"Superficial",opp:"Deep",      mean:"Near surface",   fill:TEAL},
    {term:"Deep",      opp:"Superficial",mean:"Away from surface", fill:"0F7280"},
  ];

  // 2-row table, 4 cols + extras
  // Layout: 4 per row across, 4 rows
  allTerms.forEach((t, i) => {
    const col = i % 4;
    const row = Math.floor(i / 4);
    const xPos = 0.25 + col * 2.42;
    const yPos = 0.82 + row * 1.18;
    const cardW = 2.3;
    const cardH = 1.0;

    // Card
    slide.addShape(pres.ShapeType.roundRect, {
      x:xPos, y:yPos, w:cardW, h:cardH,
      fill:{color:t.fill}, line:{color:darken(t.fill), pt:1}, rectRadius:0.1
    });
    // Top: term name
    slide.addText(t.term, {
      x:xPos+0.05, y:yPos+0.04, w:cardW-0.1, h:0.34,
      fontSize:14, bold:true, color:WHITE, fontFace:"Calibri",
      align:"center", valign:"middle", margin:0
    });
    // Divider
    slide.addShape(pres.ShapeType.rect, {
      x:xPos+0.1, y:yPos+0.38, w:cardW-0.2, h:0.02,
      fill:{color:"FFFFFF40"}, line:{color:"FFFFFF40"}
    });
    // Meaning
    slide.addText(t.mean, {
      x:xPos+0.05, y:yPos+0.42, w:cardW-0.1, h:0.3,
      fontSize:10, color:WHITE, fontFace:"Calibri", align:"center", italic:true
    });
    // Opposite pill
    slide.addShape(pres.ShapeType.roundRect, {
      x:xPos+0.3, y:yPos+0.72, w:cardW-0.6, h:0.22,
      fill:{color:"FFFFFF30"}, line:{color:"FFFFFF50", pt:0.5}, rectRadius:0.1
    });
    slide.addText("↔ " + t.opp, {
      x:xPos+0.3, y:yPos+0.72, w:cardW-0.6, h:0.22,
      fontSize:8.5, color:WHITE, fontFace:"Calibri", align:"center"
    });
  });
}

// Write file
pres.writeFile({ fileName: "/home/daytona/workspace/anatomical-nomenclature-pptx/Anatomical_Nomenclature_Flowcharts.pptx" })
  .then(() => console.log("DONE"))
  .catch(err => { console.error(err); process.exit(1); });
Running Command

cd /home/daytona/workspace/anatomical-nomenclature-pptx && node create_flowcharts.js 2>&1

Editing File

~/anatomical-nomenclature-pptx/create_flowcharts.js

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/anatomical-nomenclature-pptx/create_flowcharts.js'
Running Command

cd /home/daytona/workspace/anatomical-nomenclature-pptx && node create_flowcharts.js 2>&1

Clean build - no errors! Your flowchart presentation is ready:

Anatomical Nomenclature Flowcharts

Presentation · PPTX


Here's what's inside across 8 slides:
SlideFlowchart
1Title slide
2Master Overview - all 5 topic branches in one map
3Anatomical Position - 6-step checklist flowchart
43 Body Planes - Coronal / Sagittal / Transverse with orientation + examples
5Directional Terms (Part 1) - 3 decision diamonds: Front/Back? Midline? Up/Down?
6Directional Terms (Part 2) - Proximal/Distal, Cranial/Caudal, Rostral (3 mini-charts)
7Superficial & Deep - YES/NO decision diamond + wound classification
8All 13 Terms at a Glance - color-coded card grid with opposites
Each flowchart uses decision diamonds, arrows, and color-coded boxes to make navigation easy and visual.

Make quick reference laminated flashcards (generate as PDF)

Reading File
Writing File

~/anatomical-nomenclature-pptx/make_flashcards.py

"""
Anatomical Nomenclature – Laminated Flashcards PDF
Layout: 3 cards per row × 3 rows = 9 cards per A4 page, with cut marks
Card size: ~85mm × 55mm (standard credit-card / laminate size)
"""

from reportlab.lib.pagesizes import A4
from reportlab.lib.units import mm
from reportlab.lib import colors
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.colors import HexColor
import math

OUTPUT = "/home/daytona/workspace/anatomical-nomenclature-pptx/Anatomical_Nomenclature_Flashcards.pdf"

# ── Page setup ──────────────────────────────────────────────
PAGE_W, PAGE_H = A4          # 210 × 297 mm

CARD_W = 85 * mm
CARD_H = 54 * mm
COLS   = 2
ROWS_PER_PAGE = 4
MARGIN_X = (PAGE_W - COLS * CARD_W) / 2
MARGIN_Y = 12 * mm
GAP_X  = 0
GAP_Y  = 5 * mm

# ── Palette ─────────────────────────────────────────────────
NAVY   = HexColor("#0D1B2A")
TEAL   = HexColor("#1B9AAA")
LTEAL  = HexColor("#C4F1F9")
WHITE  = HexColor("#FFFFFF")
CREAM  = HexColor("#FFFEF5")
BLUE   = HexColor("#2563EB")
LBLUE  = HexColor("#DBEAFE")
GREEN  = HexColor("#16A34A")
LGREEN = HexColor("#DCFCE7")
PURPLE = HexColor("#7C3AED")
LPURP  = HexColor("#EDE9FE")
ORANGE = HexColor("#EA580C")
LORAN  = HexColor("#FFEDD5")
GOLD   = HexColor("#D97706")
LGOLD  = HexColor("#FEF3C7")
RED    = HexColor("#DC2626")
LRED   = HexColor("#FEE2E2")
DARK   = HexColor("#1E293B")
GRAY   = HexColor("#64748B")
SILVER = HexColor("#F1F5F9")

# ── Flashcard data ────────────────────────────────────────────
# Each card: (header_text, header_bg, header_fg, body_items, back_text, accent_color)
# body_items: list of (label, value, label_color)
# Cards are grouped into sets of 8 per A4 page (2×4)

cards = [
    # ── CARD 1: Title / Cover ─────────────────────────
    {
        "type": "cover",
        "title": "Anatomical\nNomenclature",
        "subtitle": "Quick Reference Flashcards",
        "note": "Gray's Anatomy for Students",
        "bg": NAVY,
        "accent": TEAL,
    },

    # ── CARD 2: Anatomical Position ───────────────────
    {
        "type": "term",
        "header": "Anatomical Position",
        "header_bg": TEAL,
        "header_fg": NAVY,
        "tag": "REFERENCE POSTURE",
        "rows": [
            ("Body", "Upright, standing straight"),
            ("Feet", "Together, toes forward"),
            ("Hands", "By sides, palms forward"),
            ("Face", "Looking forward, mouth closed"),
            ("Eyes", "Open, neutral expression"),
            ("Orbit", "Level with top of ear opening"),
        ],
        "footer": "All anatomical terms are defined\nrelative to this position",
        "footer_bg": LTEAL,
        "footer_fg": NAVY,
    },

    # ── CARD 3: Body Planes ───────────────────────────
    {
        "type": "term",
        "header": "Body Planes",
        "header_bg": BLUE,
        "header_fg": WHITE,
        "tag": "3 MAJOR PLANES",
        "rows": [
            ("Coronal", "Vertical — divides Anterior / Posterior"),
            ("Sagittal", "Vertical — divides Left / Right"),
            ("Median", "Sagittal through midline — equal halves"),
            ("Transverse", "Horizontal — divides Superior / Inferior"),
            ("Axial / Horizontal", "Same as transverse"),
        ],
        "footer": "Planes are orientated relative to\nthe anatomical position",
        "footer_bg": LBLUE,
        "footer_fg": DARK,
    },

    # ── CARD 4: Anterior / Posterior ──────────────────
    {
        "type": "pair",
        "header": "Anterior  ↔  Posterior",
        "header_bg": BLUE,
        "header_fg": WHITE,
        "tag": "DIRECTIONAL TERM",
        "left_title": "ANTERIOR",
        "left_sub": "(Ventral)",
        "left_def": "Toward the FRONT of the body",
        "left_eg": "Nose, sternum,\nabdominal wall",
        "right_title": "POSTERIOR",
        "right_sub": "(Dorsal)",
        "right_def": "Toward the BACK of the body",
        "right_eg": "Vertebral column,\nscapula",
        "left_bg": LBLUE,
        "right_bg": SILVER,
    },

    # ── CARD 5: Medial / Lateral ──────────────────────
    {
        "type": "pair",
        "header": "Medial  ↔  Lateral",
        "header_bg": GREEN,
        "header_fg": WHITE,
        "tag": "DIRECTIONAL TERM",
        "left_title": "MEDIAL",
        "left_sub": "",
        "left_def": "Closer to the MIDLINE\n(median sagittal plane)",
        "left_eg": "Nose is medial\nto the eyes",
        "right_title": "LATERAL",
        "right_sub": "",
        "right_def": "Farther from\nthe MIDLINE",
        "right_eg": "Thumb is lateral\nto little finger",
        "left_bg": LGREEN,
        "right_bg": SILVER,
    },

    # ── CARD 6: Superior / Inferior ───────────────────
    {
        "type": "pair",
        "header": "Superior  ↔  Inferior",
        "header_bg": PURPLE,
        "header_fg": WHITE,
        "tag": "DIRECTIONAL TERM",
        "left_title": "SUPERIOR",
        "left_sub": "",
        "left_def": "Toward the TOP\n(toward the head)",
        "left_eg": "Head is superior\nto the shoulders",
        "right_title": "INFERIOR",
        "right_sub": "",
        "right_def": "Toward the BOTTOM\n(toward the feet)",
        "right_eg": "Knee is inferior\nto the hip joint",
        "left_bg": LPURP,
        "right_bg": SILVER,
    },

    # ── CARD 7: Proximal / Distal ─────────────────────
    {
        "type": "pair",
        "header": "Proximal  ↔  Distal",
        "header_bg": ORANGE,
        "header_fg": WHITE,
        "tag": "LIMB & BRANCHING TERM",
        "left_title": "PROXIMAL",
        "left_sub": "",
        "left_def": "Closer to the ORIGIN\nor point of attachment",
        "left_eg": "Shoulder is proximal\nto the elbow",
        "right_title": "DISTAL",
        "right_sub": "",
        "right_def": "Farther from\nthe ORIGIN",
        "right_eg": "Hand is distal\nto the elbow",
        "left_bg": LORAN,
        "right_bg": SILVER,
    },

    # ── CARD 8: Cranial / Caudal ──────────────────────
    {
        "type": "pair",
        "header": "Cranial  ↔  Caudal",
        "header_bg": RED,
        "header_fg": WHITE,
        "tag": "DIRECTIONAL TERM",
        "left_title": "CRANIAL",
        "left_sub": "(toward head)",
        "left_def": "Toward the HEAD end\nof the body",
        "left_eg": "Brain is cranial to\nthe spinal cord",
        "right_title": "CAUDAL",
        "right_sub": "(toward tail)",
        "right_def": "Toward the TAIL /\ninferior spine",
        "right_eg": "Sacrum is caudal to\nlumbar vertebrae",
        "left_bg": LRED,
        "right_bg": SILVER,
    },

    # ── CARD 9: Rostral ───────────────────────────────
    {
        "type": "term",
        "header": "Rostral",
        "header_bg": PURPLE,
        "header_fg": WHITE,
        "tag": "HEAD / BRAIN TERM",
        "rows": [
            ("Definition", "Toward the NOSE"),
            ("Used in", "Head & brain anatomy specifically"),
            ("Example", "Forebrain is rostral to hindbrain"),
            ("Note", "Not used for general body description"),
        ],
        "footer": "Rostral = 'toward the beak/nose'\nFrom Latin: rostrum (beak)",
        "footer_bg": LPURP,
        "footer_fg": DARK,
    },

    # ── CARD 10: Superficial / Deep ───────────────────
    {
        "type": "pair",
        "header": "Superficial  ↔  Deep",
        "header_bg": TEAL,
        "header_fg": NAVY,
        "tag": "DEPTH TERM",
        "left_title": "SUPERFICIAL",
        "left_sub": "(external to deep fascia)",
        "left_def": "Closer to the\nbody surface",
        "left_eg": "Skin, superficial fascia,\nmammary glands",
        "right_title": "DEEP",
        "right_sub": "(enclosed by deep fascia)",
        "right_def": "Farther from\nbody surface",
        "right_eg": "Skeletal muscles,\nviscera (organs)",
        "left_bg": LTEAL,
        "right_bg": SILVER,
    },

    # ── CARD 11: Wounds ───────────────────────────────
    {
        "type": "term",
        "header": "Wound Depth Classification",
        "header_bg": RED,
        "header_fg": WHITE,
        "tag": "CLINICAL APPLICATION",
        "rows": [
            ("Superficial wound", "External to outer layer of deep fascia"),
            ("Deep wound", "Penetrates through deep fascia"),
            ("Key boundary", "Outer layer of DEEP FASCIA"),
            ("Clinical note", "Determines wound management and risk"),
        ],
        "footer": "Sternum is SUPERFICIAL to heart\nStomach is DEEP to abdominal wall",
        "footer_bg": LRED,
        "footer_fg": DARK,
    },

    # ── CARD 12: Quick Summary Table ─────────────────
    {
        "type": "table",
        "header": "All Terms — Summary",
        "header_bg": NAVY,
        "header_fg": WHITE,
        "tag": "MASTER REFERENCE",
        "pairs": [
            ("Anterior", "Posterior", BLUE),
            ("Medial", "Lateral", GREEN),
            ("Superior", "Inferior", PURPLE),
            ("Proximal", "Distal", ORANGE),
            ("Cranial", "Caudal", RED),
            ("Superficial", "Deep", TEAL),
        ],
        "extra": "Rostral = toward nose (brain/head only)",
    },

    # ── CARD 13: Inclusive Terminology ───────────────
    {
        "type": "term",
        "header": "Inclusive Terminology",
        "header_bg": GREEN,
        "header_fg": WHITE,
        "tag": "CLINICAL PRACTICE",
        "rows": [
            ("Upper body", "Instead of: Chest / Breast"),
            ("Erectile tissue", "Instead of: Penis / Clitoris"),
            ("Gonads", "Instead of: Testes / Ovaries"),
        ],
        "footer": "Use patient-preferred terms.\nBase care on PRESENT ANATOMY,\nnot gender assumptions.",
        "footer_bg": LGREEN,
        "footer_fg": DARK,
    },

    # ── CARD 14: Planes Mnemonic ─────────────────────
    {
        "type": "mnemonic",
        "header": "Memory Aids",
        "header_bg": GOLD,
        "header_fg": NAVY,
        "tag": "STUDY TIPS",
        "items": [
            ("Coronal", "Crown on HEAD → front/back split"),
            ("Sagittal", "Sagitta (arrow) flies left-right"),
            ("Transverse", "Trans = across → top/bottom split"),
            ("Proximal", "PROX = close, like proximity"),
            ("Distal", "DiSTAL = far from starting point"),
            ("Rostral", "Rostrum (beak) → toward nose"),
        ],
    },
]

# ── Drawing functions ─────────────────────────────────────────

def rounded_rect(c, x, y, w, h, r, fill_color, stroke_color=None, stroke_width=0.5):
    """Draw a rounded rectangle."""
    p = c.beginPath()
    p.moveTo(x + r, y)
    p.lineTo(x + w - r, y)
    p.arcTo(x + w - r, y, x + w, y + r, 0, 90)  # bottom-right
    p.lineTo(x + w, y + h - r)
    p.arcTo(x + w - r, y + h - r, x + w, y + h, 0, 90)  # top-right
    p.lineTo(x + r, y + h)
    p.arcTo(x, y + h - r, x + r, y + h, 0, 90)  # top-left
    p.lineTo(x, y + r)
    p.arcTo(x, y, x + r, y + r, 0, 90)  # bottom-left
    p.close()
    c.setFillColor(fill_color)
    if stroke_color:
        c.setStrokeColor(stroke_color)
        c.setLineWidth(stroke_width)
        c.drawPath(p, fill=1, stroke=1)
    else:
        c.drawPath(p, fill=1, stroke=0)

def cut_marks(c, cx, cy, size=3*mm, gap=1.5*mm):
    """Draw small cross cut marks at corner positions."""
    c.setStrokeColor(GRAY)
    c.setLineWidth(0.3)
    # horizontal
    c.line(cx - size - gap, cy, cx - gap, cy)
    c.line(cx + gap, cy, cx + size + gap, cy)
    # vertical
    c.line(cx, cy - size - gap, cx, cy - gap)
    c.line(cx, cy + gap, cx, cy + size + gap)

def draw_card_base(c, x, y, w, h, bg=WHITE, border=TEAL):
    """Draw card background with shadow effect."""
    # Shadow
    rounded_rect(c, x+1.5, y-1.5, w, h, 4*mm, HexColor("#D0D0D0"))
    # Card
    rounded_rect(c, x, y, w, h, 4*mm, bg, border, 0.8)

def draw_header(c, x, y, w, header_text, bg, fg, tag=None):
    """Draw the colored header band."""
    hh = 11 * mm
    rounded_rect(c, x, y + CARD_H - hh, w, hh, 0, bg)
    # fix corners
    c.setFillColor(bg)
    c.rect(x, y + CARD_H - hh, w, hh/2, fill=1, stroke=0)
    # top-left/right round still from base card
    c.setFillColor(bg)
    c.rect(x, y + CARD_H - hh, w, hh, fill=1, stroke=0)

    # Tag pill
    if tag:
        tag_w = 30 * mm
        tag_h = 3.5 * mm
        c.setFillColor(HexColor("#FFFFFF") if bg != WHITE else NAVY)
        c.setFillAlpha(0.2)
        c.roundRect(x + w - tag_w - 2*mm, y + CARD_H - 5*mm, tag_w, tag_h, 1.5*mm, fill=1, stroke=0)
        c.setFillAlpha(1.0)
        c.setFillColor(WHITE if bg.hexval() not in ("#fffef5","#f0f7ff") else NAVY)
        c.setFont("Helvetica-Bold", 5.5)
        c.drawCentredString(x + w - tag_w/2 - 2*mm, y + CARD_H - 4.2*mm, tag)

    # Header text
    c.setFillColor(fg)
    lines = header_text.split("\n")
    fs = 9 if len(lines) > 1 else 10
    c.setFont("Helvetica-Bold", fs)
    for i, line in enumerate(lines):
        ty = y + CARD_H - 6.5*mm + (i * -3.8*mm) + ((len(lines)-1)*1.9*mm)
        c.drawString(x + 3*mm, ty, line)

def text_wrapped(c, text, x, y, max_w, font, size, color, leading=None):
    """Draw text, wrapping at max_w."""
    from reportlab.pdfbase.pdfmetrics import stringWidth
    if leading is None:
        leading = size * 1.3
    c.setFont(font, size)
    c.setFillColor(color)
    words = text.split()
    line = ""
    cy = y
    for word in words:
        test = (line + " " + word).strip()
        if stringWidth(test, font, size) <= max_w:
            line = test
        else:
            if line:
                c.drawString(x, cy, line)
                cy -= leading
            line = word
    if line:
        c.drawString(x, cy, line)
    return cy - leading  # return y after last line

# ── Card type renderers ────────────────────────────────────────

def render_cover(c, x, y, card):
    draw_card_base(c, x, y, CARD_W, CARD_H, card["bg"], card["accent"])
    # decorative circle
    c.setFillColor(HexColor("#1B3A52"))
    c.circle(x + CARD_W - 12*mm, y + CARD_H - 10*mm, 18*mm, fill=1, stroke=0)
    c.setFillColor(HexColor("#0F2535"))
    c.circle(x + 8*mm, y + 8*mm, 12*mm, fill=1, stroke=0)

    # accent stripe
    c.setFillColor(card["accent"])
    c.rect(x, y + CARD_H*0.42, CARD_W, 1*mm, fill=1, stroke=0)

    c.setFillColor(WHITE)
    c.setFont("Helvetica-Bold", 15)
    lines = card["title"].split("\n")
    for i, l in enumerate(lines):
        c.drawCentredString(x + CARD_W/2, y + CARD_H*0.7 - i*7*mm, l)

    c.setFillColor(card["accent"])
    c.setFont("Helvetica-Bold", 7)
    c.drawCentredString(x + CARD_W/2, y + CARD_H*0.36, card["subtitle"])

    c.setFillColor(GRAY)
    c.setFont("Helvetica-Oblique", 5.5)
    c.drawCentredString(x + CARD_W/2, y + 3*mm, card["note"])


def render_term(c, x, y, card):
    draw_card_base(c, x, y, CARD_W, CARD_H, CREAM, HexColor(card["header_bg"].hexval()))
    draw_header(c, x, y, CARD_W, card["header"], card["header_bg"], card["header_fg"], card.get("tag"))

    header_h = 11 * mm
    body_top = y + CARD_H - header_h - 2*mm
    row_h = 7.2 * mm
    pad = 3 * mm

    for i, (label, value) in enumerate(card["rows"]):
        ry = body_top - i * row_h
        if ry < y + 12*mm:
            break
        # alternating row bg
        bg_color = HexColor("#F8FAFC") if i % 2 == 0 else WHITE
        c.setFillColor(bg_color)
        c.rect(x + pad, ry - row_h + 1*mm, CARD_W - 2*pad, row_h - 1*mm, fill=1, stroke=0)

        # label
        c.setFillColor(card["header_bg"])
        c.setFont("Helvetica-Bold", 6.5)
        c.drawString(x + pad + 1*mm, ry - 4*mm, label)

        # value
        c.setFillColor(DARK)
        c.setFont("Helvetica", 6.5)
        # right side
        vx = x + pad + 26*mm
        c.drawString(vx, ry - 4*mm, value)

    # footer
    if "footer" in card:
        fc = card.get("footer_bg", LTEAL)
        ftc = card.get("footer_fg", DARK)
        c.setFillColor(fc)
        c.rect(x, y, CARD_W, 11*mm, fill=1, stroke=0)
        c.setFillColor(ftc)
        c.setFont("Helvetica-Oblique", 5.5)
        lines = card["footer"].split("\n")
        for i, l in enumerate(lines):
            c.drawCentredString(x + CARD_W/2, y + 7.5*mm - i*3.5*mm, l)


def render_pair(c, x, y, card):
    draw_card_base(c, x, y, CARD_W, CARD_H, CREAM, HexColor(card["header_bg"].hexval()))
    draw_header(c, x, y, CARD_W, card["header"], card["header_bg"], card["header_fg"], card.get("tag"))

    header_h = 11 * mm
    body_top = y + CARD_H - header_h
    half = (CARD_W - 2*mm) / 2

    # Left panel
    c.setFillColor(card["left_bg"])
    c.rect(x + 1*mm, y + 11*mm, half, body_top - y - 11*mm - 1*mm, fill=1, stroke=0)

    # Right panel
    c.setFillColor(card["right_bg"])
    c.rect(x + 1*mm + half, y + 11*mm, half, body_top - y - 11*mm - 1*mm, fill=1, stroke=0)

    # Divider
    c.setStrokeColor(GRAY)
    c.setLineWidth(0.4)
    c.line(x + CARD_W/2, y + 11*mm, x + CARD_W/2, body_top - 1*mm)

    def draw_side(tx, title, sub, defn, eg, title_color):
        c.setFillColor(title_color)
        c.setFont("Helvetica-Bold", 8.5)
        c.drawCentredString(tx + half/2, body_top - 5.5*mm, title)
        if sub:
            c.setFillColor(GRAY)
            c.setFont("Helvetica-Oblique", 5.5)
            c.drawCentredString(tx + half/2, body_top - 9*mm, sub)
        # divider under title
        c.setStrokeColor(title_color)
        c.setLineWidth(0.6)
        c.line(tx + 4*mm, body_top - 10.5*mm, tx + half - 4*mm, body_top - 10.5*mm)

        c.setFillColor(DARK)
        c.setFont("Helvetica-Bold", 6)
        c.drawCentredString(tx + half/2, body_top - 14.5*mm, "Definition:")

        c.setFillColor(DARK)
        c.setFont("Helvetica", 6)
        lines = defn.split("\n")
        for i, l in enumerate(lines):
            c.drawCentredString(tx + half/2, body_top - 18*mm - i*3.5*mm, l)

        c.setFillColor(GOLD)
        c.setFont("Helvetica-Bold", 5.5)
        c.drawCentredString(tx + half/2, body_top - 28*mm, "e.g.")
        c.setFillColor(HexColor("#92400E"))
        c.setFont("Helvetica-Oblique", 5.5)
        lines2 = eg.split("\n")
        for i, l in enumerate(lines2):
            c.drawCentredString(tx + half/2, body_top - 31.5*mm - i*3.2*mm, l)

    draw_side(x + 1*mm, card["left_title"], card["left_sub"], card["left_def"], card["left_eg"], card["header_bg"])
    draw_side(x + 1*mm + half, card["right_title"], card["right_sub"], card["right_def"], card["right_eg"], GRAY)

    # Footer strip
    c.setFillColor(HexColor("#F1F5F9"))
    c.rect(x, y, CARD_W, 11*mm, fill=1, stroke=0)
    c.setFillColor(GRAY)
    c.setFont("Helvetica-Oblique", 5)
    c.drawCentredString(x + CARD_W/2, y + 6.5*mm, "These terms describe relative position,")
    c.drawCentredString(x + CARD_W/2, y + 3.5*mm, "always referenced to the anatomical position.")


def render_table(c, x, y, card):
    draw_card_base(c, x, y, CARD_W, CARD_H, CREAM, card["header_bg"])
    draw_header(c, x, y, CARD_W, card["header"], card["header_bg"], card["header_fg"], card.get("tag"))

    header_h = 11 * mm
    body_top = y + CARD_H - header_h - 1*mm
    row_h = 6.2 * mm
    pad = 3 * mm
    col_mid = CARD_W / 2

    # column headings
    c.setFillColor(DARK)
    c.setFont("Helvetica-Bold", 6.5)
    c.drawCentredString(x + col_mid/2, body_top - 3*mm, "TERM A")
    c.drawCentredString(x + col_mid + col_mid/2, body_top - 3*mm, "OPPOSITE")

    c.setStrokeColor(GRAY)
    c.setLineWidth(0.4)
    c.line(x + pad, body_top - 4.5*mm, x + CARD_W - pad, body_top - 4.5*mm)
    c.line(x + col_mid, body_top - 1*mm, x + col_mid, y + 11*mm)

    for i, (a, b, clr) in enumerate(card["pairs"]):
        ry = body_top - 5.5*mm - i * row_h
        bg = HexColor("#F8FAFC") if i % 2 == 0 else WHITE
        c.setFillColor(bg)
        c.rect(x + pad, ry - row_h + 1.5*mm, CARD_W - 2*pad, row_h - 1*mm, fill=1, stroke=0)

        # colored dot
        c.setFillColor(clr)
        c.circle(x + pad + 2.5*mm, ry - 2.2*mm, 2*mm, fill=1, stroke=0)
        c.setFillColor(clr)
        c.setFont("Helvetica-Bold", 7)
        c.drawString(x + pad + 6*mm, ry - 3.5*mm, a)

        c.setFillColor(DARK)
        c.setFont("Helvetica", 7)
        c.drawString(x + col_mid + 3*mm, ry - 3.5*mm, b)

    # extra note
    c.setFillColor(LGOLD)
    c.rect(x, y, CARD_W, 11*mm, fill=1, stroke=0)
    c.setFillColor(GOLD)
    c.setFont("Helvetica-Bold", 6)
    c.drawString(x + 3*mm, y + 7*mm, "Note:")
    c.setFillColor(DARK)
    c.setFont("Helvetica-Oblique", 6)
    c.drawString(x + 12*mm, y + 7*mm, card["extra"])


def render_mnemonic(c, x, y, card):
    draw_card_base(c, x, y, CARD_W, CARD_H, LGOLD, GOLD)
    draw_header(c, x, y, CARD_W, card["header"], card["header_bg"], card["header_fg"], card.get("tag"))

    header_h = 11 * mm
    body_top = y + CARD_H - header_h - 1.5*mm
    row_h = 6.5 * mm
    pad = 3 * mm

    for i, (term, tip) in enumerate(card["items"]):
        ry = body_top - i * row_h
        if ry < y + 5*mm:
            break
        c.setFillColor(GOLD)
        c.setFont("Helvetica-Bold", 7)
        c.drawString(x + pad, ry - 3*mm, term + ":")
        c.setFillColor(DARK)
        c.setFont("Helvetica-Oblique", 6.5)
        c.drawString(x + pad + 22*mm, ry - 3*mm, tip)
        # light divider
        c.setStrokeColor(HexColor("#E5C55A"))
        c.setLineWidth(0.3)
        c.line(x + pad, ry - row_h + 1.5*mm, x + CARD_W - pad, ry - row_h + 1.5*mm)


# ── Main rendering loop ───────────────────────────────────────

c = canvas.Canvas(OUTPUT, pagesize=A4)
c.setTitle("Anatomical Nomenclature Flashcards")
c.setAuthor("Gray's Anatomy for Students / Orris")
c.setSubject("Quick Reference Laminated Flashcards")

CARDS_PER_ROW = COLS
CARDS_PER_PAGE = COLS * ROWS_PER_PAGE

total_pages = math.ceil(len(cards) / CARDS_PER_PAGE)

for pg in range(total_pages):
    page_cards = cards[pg * CARDS_PER_PAGE : (pg + 1) * CARDS_PER_PAGE]

    # Page header
    c.setFillColor(NAVY)
    c.rect(0, PAGE_H - 8*mm, PAGE_W, 8*mm, fill=1, stroke=0)
    c.setFillColor(WHITE)
    c.setFont("Helvetica-Bold", 7)
    c.drawString(5*mm, PAGE_H - 5.5*mm, "ANATOMICAL NOMENCLATURE  ·  Quick Reference Flashcards")
    c.setFont("Helvetica", 6)
    c.drawRightString(PAGE_W - 5*mm, PAGE_H - 5.5*mm, f"Page {pg+1} of {total_pages}  ·  Gray's Anatomy for Students")

    c.setFillColor(TEAL)
    c.rect(0, PAGE_H - 9*mm, PAGE_W, 1*mm, fill=1, stroke=0)

    # Instruction text (page 1 only)
    if pg == 0:
        c.setFillColor(GRAY)
        c.setFont("Helvetica-Oblique", 6)
        c.drawCentredString(PAGE_W/2, PAGE_H - 12*mm,
            "Print, cut along dotted lines, laminate for durable quick-reference cards.")

    for ci, card in enumerate(page_cards):
        col = ci % COLS
        row = ci // COLS

        cx = MARGIN_X + col * (CARD_W + GAP_X)
        # from top: below header + instruction
        top_offset = 14 * mm if pg == 0 else 12 * mm
        cy = PAGE_H - top_offset - CARD_H - row * (CARD_H + GAP_Y)

        # Cut marks at all 4 corners of the card
        for dx in [0, CARD_W]:
            for dy in [0, CARD_H]:
                cut_marks(c, cx + dx, cy + dy)

        # Render the card
        t = card.get("type", "term")
        if t == "cover":
            render_cover(c, cx, cy, card)
        elif t == "term":
            render_term(c, cx, cy, card)
        elif t == "pair":
            render_pair(c, cx, cy, card)
        elif t == "table":
            render_table(c, cx, cy, card)
        elif t == "mnemonic":
            render_mnemonic(c, cx, cy, card)

    c.showPage()

c.save()
print(f"DONE: {OUTPUT}")
Running Command

cd /home/daytona/workspace/anatomical-nomenclature-pptx && python make_flashcards.py 2>&1

Your flashcards PDF is ready!

Anatomical Nomenclature Flashcards

PDF Document · PDF


Here's what's inside - 14 laminate-sized cards (85×54mm - standard credit card size) laid out 2 per row on A4 pages, with cut marks at every corner:
CardContentStyle
1Cover - Title cardDark navy with teal accents
2Anatomical Position - 6-step checklistTeal header
3Body Planes - All 3 planes with meaningsBlue header
4Anterior ↔ PosteriorSplit left/right panel
5Medial ↔ LateralSplit left/right panel
6Superior ↔ InferiorSplit left/right panel
7Proximal ↔ DistalSplit left/right panel
8Cranial ↔ CaudalSplit left/right panel
9Rostral - Definition + etymologyPurple header
10Superficial ↔ DeepSplit left/right panel
11Wound Depth ClassificationRed header, clinical use
12All Terms Master TableNavy with colored dots
13Inclusive TerminologyGreen header
14Memory Aids & MnemonicsGold header
To use: Print on cardstock, cut along the dotted cross-marks, and laminate each card.

Make an anatomical body diagram poster showing all term relationships

Generating Image

A detailed anatomical nomenclature educational poster showing a full human body in anatomical position (standing upright, palms forward, feet together) as a clean medical illustration. The body is shown from the front with clear anatomical labels and directional arrows indicating all major anatomical terms: - SUPERIOR arrow pointing upward toward the head - INFERIOR arrow pointing downward toward the feet - ANTERIOR label on the front side of the body - POSTERIOR label on the back (shown with a small side silhouette) - MEDIAL arrows pointing toward the body midline with a dashed vertical centerline - LATERAL arrows pointing away from the midline on both sides - PROXIMAL and DISTAL labels on the arm and leg with arrows showing the direction toward and away from the body - CRANIAL arrow near the head, CAUDAL arrow near the base of the spine - ROSTRAL label near the nose/brain area Three body plane diagrams shown alongside the figure: - CORONAL PLANE (green) - vertical plane dividing front and back - SAGITTAL PLANE (blue) - vertical plane dividing left and right, with MEDIAN SAGITTAL highlighted - TRANSVERSE/AXIAL PLANE (purple) - horizontal plane dividing top and bottom SUPERFICIAL vs DEEP shown as a cross-section inset diagram of a body wall layer, with skin and fascia labeled as superficial, muscles and organs labeled as deep. Color scheme: clean white background, navy blue title, teal and blue accents, color-coded arrows. Medical textbook style, highly detailed, professional anatomy poster design with clean sans-serif labels and a legend box in the corner. Title at top: ANATOMICAL NOMENCLATURE - Standard Terms of Position & Direction

Anatomical Nomenclature Poster
Here is your anatomical body diagram poster. It shows:
  • Full body in anatomical position with directional arrows for Superior/Inferior, Medial/Lateral, Anterior/Posterior, Proximal/Distal, Cranial/Caudal, and Rostral
  • Three body planes - Coronal (green), Sagittal (blue), and Transverse/Axial (purple) shown cutting through the figure
  • Superficial vs Deep cross-section inset
  • Clean color-coded labels in medical textbook style
If you'd like this saved as a downloadable PDF poster (A3 or A4 print-ready), I can convert it into one. Just say the word!
This is a shared conversation. Sign in to Orris to start your own chat.