Make to a nice presentation

Reading File
Reading File
Reading File
Running Command

python -m markitdown "/home/daytona/workspace/attachments/3b2b0ef4-3580-4565-b239-85a9af501a0f/neck dissection ppt.pptx" 2>&1

Running Command

cd /home/daytona/workspace && python /home/daytona/skills/pptx/scripts/thumbnail.py "/home/daytona/workspace/attachments/3b2b0ef4-3580-4565-b239-85a9af501a0f/neck dissection ppt.pptx" 2>&1 | head -50

Running Command

ls /home/daytona/workspace/thumbnails*.jpg 2>/dev/null; ls /home/daytona/workspace/*.jpg 2>/dev/null | head -20

Reading File
Reading File
Reading File
Reading File
Reading File
Running Command

python /home/daytona/skills/pptx/scripts/office/unpack.py "/home/daytona/workspace/attachments/3b2b0ef4-3580-4565-b239-85a9af501a0f/neck dissection ppt.pptx" /home/daytona/workspace/neck-dissection-unpacked/ 2>&1 | head -20

Running Command

# Extract text from all slides using python-pptx python3 -c " from pptx import Presentation from pptx.util import Inches, Pt import json prs = Presentation('/home/daytona/workspace/attachments/3b2b0ef4-3580-4565-b239-85a9af501a0f/neck dissection ppt.pptx') slides_data = [] for i, slide in enumerate(prs.slides): slide_content = {'slide': i+1, 'shapes': []} for shape in slide.shapes: if hasattr(shape, 'text') and shape.text.strip(): slide_content['shapes'].append({'text': shape.text.strip()}) slides_data.append(slide_content) # Print first 30 slides for s in slides_data[:30]: print(f'=== SLIDE {s[\"slide\"]} ===') for sh in s['shapes']: print(sh['text'][:200]) print() " 2>&1

Running Command

# Extract text from slide XML files ls /home/daytona/workspace/neck-dissection-unpacked/ppt/slides/ | head -20

Running Command

mkdir -p /home/daytona/workspace/neck-dissection-output && ls /home/daytona/workspace/neck-dissection-unpacked/ppt/media/ | head -20

Running Command

ls /home/daytona/workspace/neck-dissection-unpacked/ppt/media/ | wc -l && ls /home/daytona/workspace/neck-dissection-unpacked/ppt/media/

Writing File

~/neck-dissection-output/build.js

const pptxgen = require("pptxgenjs");
const fs = require("fs");
const path = require("path");

const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Neck Dissection";
pres.author = "Dr. Madhuri";

// ─── COLOUR PALETTE ─────────────────────────────────────────────────────────
const C = {
  navy:    "0B1F3A",   // dominant dark background
  teal:    "0E7C7B",   // accent headers
  gold:    "E8B84B",   // highlight / keypoints
  slate:   "1C3454",   // mid-tone panel
  white:   "FFFFFF",
  offWhite:"EEF2F7",
  light:   "C9D6E8",
  muted:   "8FA3BE",
  red:     "D94F3D",
  green:   "2ECC71",
};

const MEDIA = "/home/daytona/workspace/neck-dissection-unpacked/ppt/media/";

// Helper: add image if file exists
function addImg(slide, file, opts) {
  const p = MEDIA + file;
  if (fs.existsSync(p)) {
    slide.addImage({ path: p, ...opts });
  }
}

// Helper: section divider slide
function sectionSlide(title, subtitle) {
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.navy } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 2.4, w: 10, h: 0.8, fill: { color: C.teal } });
  s.addText(title, {
    x: 0.5, y: 2.45, w: 9, h: 0.7,
    fontSize: 32, bold: true, color: C.white, fontFace: "Calibri",
    align: "center", valign: "middle", margin: 0,
  });
  if (subtitle) {
    s.addText(subtitle, {
      x: 1, y: 3.3, w: 8, h: 0.5,
      fontSize: 14, color: C.light, fontFace: "Calibri",
      align: "center", italic: true, margin: 0,
    });
  }
  return s;
}

// Helper: standard content slide (dark)
function contentSlide(title, bullets, imgFile, imgOpts) {
  const s = pres.addSlide();
  // background
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.navy } });
  // title bar
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.7, fill: { color: C.slate } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0.7, w: 10, h: 0.04, fill: { color: C.teal } });
  s.addText(title, {
    x: 0.3, y: 0, w: 9.4, h: 0.7,
    fontSize: 22, bold: true, color: C.gold, fontFace: "Calibri",
    valign: "middle", margin: 0,
  });

  const hasImg = imgFile && fs.existsSync(MEDIA + imgFile);
  const textW = hasImg ? 5.2 : 9.2;

  if (bullets && bullets.length > 0) {
    const items = bullets.map((b, i) => {
      if (typeof b === "string") {
        return { text: b, options: { bullet: { indent: 15 }, breakLine: i < bullets.length - 1, fontSize: 13, color: C.offWhite, fontFace: "Calibri" } };
      }
      // object with {text, bold, color, sub}
      return {
        text: b.text,
        options: {
          bullet: b.sub ? { indent: 30 } : { indent: 15 },
          breakLine: i < bullets.length - 1,
          fontSize: b.sub ? 12 : 13,
          bold: b.bold || false,
          color: b.color || C.offWhite,
          fontFace: "Calibri",
        },
      };
    });
    s.addText(items, { x: 0.4, y: 0.85, w: textW, h: 4.6, valign: "top", margin: 0 });
  }

  if (hasImg) {
    const io = imgOpts || { x: 5.7, y: 0.85, w: 4.0, h: 4.0 };
    s.addImage({ path: MEDIA + imgFile, ...io });
  }
  return s;
}

// Helper: two-column slide
function twoColSlide(title, leftBullets, rightBullets, color1, color2) {
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.navy } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.7, fill: { color: C.slate } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0.7, w: 10, h: 0.04, fill: { color: C.teal } });
  s.addText(title, {
    x: 0.3, y: 0, w: 9.4, h: 0.7,
    fontSize: 22, bold: true, color: C.gold, fontFace: "Calibri",
    valign: "middle", margin: 0,
  });
  // left panel
  s.addShape(pres.ShapeType.rect, { x: 0.3, y: 0.85, w: 4.5, h: 4.5, fill: { color: C.slate }, line: { color: C.teal, width: 1 } });
  // right panel
  s.addShape(pres.ShapeType.rect, { x: 5.1, y: 0.85, w: 4.5, h: 4.5, fill: { color: C.slate }, line: { color: C.gold, width: 1 } });

  const makeItems = (arr) => arr.map((b, i) => ({
    text: typeof b === "string" ? b : b.text,
    options: {
      bullet: { indent: 12 },
      breakLine: i < arr.length - 1,
      fontSize: 12,
      bold: typeof b === "object" && b.bold,
      color: typeof b === "object" && b.color ? b.color : C.offWhite,
      fontFace: "Calibri",
    },
  }));

  if (leftBullets && leftBullets.length)
    s.addText(makeItems(leftBullets), { x: 0.45, y: 1.0, w: 4.2, h: 4.2, valign: "top", margin: 0 });
  if (rightBullets && rightBullets.length)
    s.addText(makeItems(rightBullets), { x: 5.25, y: 1.0, w: 4.2, h: 4.2, valign: "top", margin: 0 });
  return s;
}

// ────────────────────────────────────────────────────────────────────────────
// SLIDE 1 – TITLE
// ────────────────────────────────────────────────────────────────────────────
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.navy } });
  // teal accent stripe
  s.addShape(pres.ShapeType.rect, { x: 0, y: 1.6, w: 10, h: 2.5, fill: { color: C.slate } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 1.6, w: 10, h: 0.06, fill: { color: C.teal } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 4.1, w: 10, h: 0.06, fill: { color: C.teal } });
  // gold left bar
  s.addShape(pres.ShapeType.rect, { x: 0, y: 1.6, w: 0.12, h: 2.5, fill: { color: C.gold } });

  s.addText("NECK DISSECTION", {
    x: 0.5, y: 1.72, w: 9, h: 1.1,
    fontSize: 48, bold: true, color: C.white, fontFace: "Calibri",
    align: "center", valign: "middle", charSpacing: 4, margin: 0,
  });
  s.addText("Surgical Anatomy, Techniques & Complications", {
    x: 0.5, y: 2.9, w: 9, h: 0.6,
    fontSize: 16, color: C.light, fontFace: "Calibri",
    align: "center", italic: true, margin: 0,
  });
  s.addText("Dr. Madhuri  |  2nd Year ENT PG\nModerator: Dr. Yasaswi", {
    x: 0.5, y: 4.3, w: 9, h: 0.9,
    fontSize: 13, color: C.muted, fontFace: "Calibri",
    align: "center", margin: 0,
  });
}

// ────────────────────────────────────────────────────────────────────────────
// SLIDE 2 – CONTENTS
// ────────────────────────────────────────────────────────────────────────────
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.navy } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.7, fill: { color: C.slate } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0.7, w: 10, h: 0.04, fill: { color: C.gold } });
  s.addText("CONTENTS", {
    x: 0.3, y: 0, w: 9.4, h: 0.7,
    fontSize: 24, bold: true, color: C.gold, fontFace: "Calibri",
    valign: "middle", align: "center", charSpacing: 6, margin: 0,
  });

  const topics = [
    "Surgical Anatomy of Neck",
    "Triangle of Neck",
    "Fascial Layers",
    "Embryology of Neck",
    "Lymphatic System",
    "Lymphatic Drainage of Skin",
    "Lymphatic Drainage of Head & Neck",
    "Lymph Node Levels",
    "Radical Neck Dissection",
    "Modified Radical Neck Dissection",
    "Selective Neck Dissection",
    "Extended Neck Dissection",
    "Complications of Neck Dissection",
  ];

  // Two columns
  const col1 = topics.slice(0, 7);
  const col2 = topics.slice(7);

  const mkItems = (arr) => arr.map((t, i) => ({
    text: `${String(i + 1).padStart(2, "0")}  ${t}`,
    options: {
      breakLine: i < arr.length - 1,
      fontSize: 13.5, color: C.offWhite, fontFace: "Calibri",
    },
  }));

  s.addText(mkItems(col1), { x: 0.6, y: 0.9, w: 4.0, h: 4.5, valign: "top", margin: 0 });
  s.addText(mkItems(col2), { x: 5.3, y: 0.9, w: 4.0, h: 4.5, valign: "top", margin: 0 });

  // vertical divider
  s.addShape(pres.ShapeType.line, { x: 5.0, y: 0.9, w: 0, h: 4.4, line: { color: C.teal, width: 1 } });
}

// ────────────────────────────────────────────────────────────────────────────
// SLIDE 3 – SURGICAL ANATOMY: NECK BOUNDARIES
// ────────────────────────────────────────────────────────────────────────────
contentSlide("SURGICAL ANATOMY OF NECK — Boundaries", [
  { text: "NECK BOUNDARIES", bold: true, color: C.gold },
  "1. Mandible",
  "2. Zygomatic process of temporal bone",
  "3. External auditory canal",
  "4. Mastoid",
  "5. Superior nuchal line",
  "6. External occipital protuberance",
  "7. Manubrium sterni",
  "8. Clavicle",
  "9. Acromioclavicular joint",
  "10. Spinous process of 7th cervical vertebrae",
]);

// ────────────────────────────────────────────────────────────────────────────
// SLIDES 4–6 – FASCIAL LAYERS OF NECK
// ────────────────────────────────────────────────────────────────────────────
contentSlide("FASCIAL LAYERS OF NECK", [
  { text: "SUPERFICIAL CERVICAL FASCIA:", bold: true, color: C.gold },
  "Invests the platysma muscle; penetrated by small vessels supplying skin",
  "Creates an aponeurosis attaching to skin of neck or continuing inferiorly becoming continuous with fascia of deltoid and pectoralis major",
  "",
  { text: "DEEP CERVICAL FASCIA — Investing Layer:", bold: true, color: C.teal },
  "Arises from ligament of nuchae and spinous processes of cervical vertebrae posteriorly",
  "Anteriorly attaches to hyoid bone, acromion, clavicle, sternum inferiorly",
  "Encloses SCM, omohyoid, infrahyoid muscles",
], "image3.png", { x: 5.8, y: 0.85, w: 3.9, h: 4.4 });

contentSlide("FASCIAL LAYERS — Deep Fascia (continued)", [
  { text: "CAROTID SHEATH:", bold: true, color: C.gold },
  "Derived from all 3 layers of deep cervical fascia",
  "Encloses: IJV, CCA/ICA, ECA, Vagus nerve",
  "Superiorly fuses, inferiorly continues",
  "",
  { text: "PRETRACHEAL FASCIA:", bold: true, color: C.teal },
  "Derived from carotid sheath",
  "Attaches to hyoid; laterally fuses with carotid sheath",
  "Superior mediastinum fascia inferiorly",
  "",
  { text: "PREVERTEBRAL FASCIA:", bold: true, color: C.gold },
  "Encloses posterior neck muscles",
  "",
  { text: "SURGICAL KEYPOINTS:", bold: true, color: C.red },
  "Fascial planes = dissection clue following them unlocks neck",
  "Investing layer encloses all nodal zones",
  "Prevertebral fascia in deep margin — protects phrenic nerve & brachial plexus",
]);

contentSlide("FASCIAL LAYERS — Summary", [
  { text: "4 Key Fascial Layers:", bold: true, color: C.gold },
  "1. Superficial Cervical Fascia — invests platysma",
  "2. Investing Layer — encloses SCM, omohyoid, trapezius",
  "3. Pretracheal Fascia — attaches to hyoid, encloses thyroid",
  "4. Prevertebral Fascia — covers posterior muscles",
  "",
  { text: "Carotid Sheath (formed by all 3 deep layers):", bold: true, color: C.teal },
  "Contains: IJV, CCA/ICA/ECA, Vagus nerve (CN X)",
  "Superiorly derived, fuses and blends inferiorly",
]);

// ────────────────────────────────────────────────────────────────────────────
// SLIDES 7–9 – TRIANGLES OF NECK
// ────────────────────────────────────────────────────────────────────────────
sectionSlide("TRIANGLES OF NECK", "Anterior & Posterior Triangles");

contentSlide("TRIANGLES OF NECK — Anterior Triangle", [
  { text: "ANTERIOR TRIANGLES:", bold: true, color: C.gold },
  "Submental Triangle — medially by anterior midline of neck",
  "  - Superiorly: mandible; laterally: ant. belly of digastric",
  "  - Contents: Level I lymph nodes",
  "",
  { text: "SUBMANDIBULAR TRIANGLE:", bold: true, color: C.teal },
  "Anteriorly: anterior belly of digastric",
  "Posteriorly: posterior belly of digastric + stylohyoid",
  "Contents: Level I/B lymph nodes, Facial artery/vein, Marginal mandibular branch of facial nerve, Submandibular gland",
], "image7.jpg", { x: 5.7, y: 0.85, w: 4.0, h: 4.3 });

contentSlide("TRIANGLES OF NECK — Posterior Triangles", [
  { text: "CAROTID TRIANGLE:", bold: true, color: C.gold },
  "Superiorly: posterior belly of digastric",
  "Laterally: posterior border of SCM",
  "Medially: superior belly of omohyoid",
  "Contents: carotid sheath, CCA, carotid bifurcation, ICA, ECA, thyroid artery, ascending pharyngeal artery, lingual, facial, vagus nerve, ansa cervicalis, superior laryngeal nerve, hypoglossal nerve",
  "",
  { text: "MUSCULAR TRIANGLE:", bold: true, color: C.teal },
  "Inferolaterally: posterior border of SCM",
  "Superomedially: superior border of omohyoid",
  "Medially: midline",
  "Contents: strap muscles, thyroid, parathyroids",
], "image8.jpg", { x: 5.8, y: 0.85, w: 3.9, h: 4.3 });

contentSlide("TRIANGLES — Posterior Triangle", [
  { text: "POSTERIOR TRIANGLE:", bold: true, color: C.gold },
  "Anteriorly: SCM",
  "Posteriorly: anterior border of trapezius",
  "Floor: Splenius capitis, levator scapulae, scalenes",
  "",
  { text: "CONTENTS:", bold: true, color: C.teal },
  "Occipital vessels",
  "Transverse cervical, supraclavicular arteries & veins",
  "Subclavian arteries & vein",
  "Cervical & brachial plexus",
  "Level V lymph nodes",
  "Omohyoid muscle",
], "image9.jpg", { x: 5.8, y: 0.85, w: 3.9, h: 4.0 });

// ────────────────────────────────────────────────────────────────────────────
// SLIDE – EMBRYOLOGY OF NECK LYMPHATICS
// ────────────────────────────────────────────────────────────────────────────
contentSlide("EMBRYOLOGY OF NECK LYMPHATICS", [
  "Lymph sac appears between 2nd and 6th week of IUL",
  "7th week: jugular channel spreads to connect with subclavian lymph sacs",
  "9th week: cranial duct is continuous channel draining into internal jugular-subclavian vein junction",
  "12th week: all processes complete",
  "5th month: valves begin to start",
], "image10.jpg", { x: 5.4, y: 0.85, w: 4.3, h: 4.3 });

// ────────────────────────────────────────────────────────────────────────────
// SLIDES – LYMPHATIC SYSTEM
// ────────────────────────────────────────────────────────────────────────────
contentSlide("THE LYMPHATIC SYSTEM", [
  { text: "Components:", bold: true, color: C.gold },
  "1. Complex capillary networks collecting lymph from various organs & tissues",
  "2. Collecting vessels conducting lymph from capillaries",
  "3. Lymph trunks & ducts — empty lymph into large veins of neck where lymph is poured into blood stream",
  "4. Lymph nodes — interspersed in pathways of collecting vessels, filtering lymph and contributing lymphocytes",
  "5. Extra nodal (lymphoid) tissues",
]);

contentSlide("FORMATION OF LYMPH", [
  "Blood flows through capillaries — two opposing forces are exerted:",
  "",
  { text: "Blood pressure → forces fluid through walls of capillaries into tissue spaces", color: C.teal },
  { text: "Osmotic pressure of blood → draws fluid back into vessels", color: C.gold },
  "",
  "About 90% of fluid returns to blood vessels; 10% enters lymphatic vessels that carry lymph back to venous circulation after passing through lymph nodes",
], "image11.jpg", { x: 5.7, y: 0.85, w: 4.0, h: 3.8 });

// ────────────────────────────────────────────────────────────────────────────
// SLIDES – LYMPHATIC DRAINAGE OF SKIN & HEAD/NECK
// ────────────────────────────────────────────────────────────────────────────
sectionSlide("LYMPHATIC DRAINAGE", "Skin of Neck · Head & Neck · Deep Neck");

contentSlide("LYMPHATIC DRAINAGE OF SKIN OF NECK", [
  { text: "General:", bold: true, color: C.gold },
  "Neck skin drains into SUPERFICIAL CERVICAL LYMPH NODES",
  "Anterior neck skin areas inferior to hyoid bone drain into nodes related to anterior jugular vessels which then drain into deep cervical lymph nodes",
  "Skin below hyoid drains into submental and submandibular nodes",
  "",
  { text: "SURGICAL IMPORTANCE:", bold: true, color: C.red },
  "Skin incision placed in crease gives cosmetically better scars",
  "Skin flaps should be raised in the subplatysmal plane to avoid skin necrosis",
  "Parotid lymph nodes are common site for occult nodal involvement in skin cancers — parotidectomy should be considered for any neck dissection procedure for skin cancers",
]);

twoColSlide(
  "LYMPHATIC DRAINAGE — Head & Neck",
  [
    { text: "SUPERFICIAL NECK:", bold: true, color: C.gold },
    "Submental — SUBMENTAL nodes",
    "Submandibular — SUBMANDIBULAR nodes",
    "Parotid — PAROTID nodes",
    "Occipital — OCCIPITAL nodes",
    "Mastoid — MASTOID nodes",
    "Retroauricular — RETROAURICULAR nodes",
    "Retropharyngeal — RETROPHARYNGEAL nodes",
    "Prelaryngeal — PRELARYNGEAL nodes",
  ],
  [
    { text: "DEEP NECK:", bold: true, color: C.teal },
    "Superior — JUGULODIGASTRIC nodes",
    "Middle — JUGULO-OMOHYOID nodes",
    "Inferior — LOWER DEEP CERVICAL nodes",
    "",
    { text: "HEAD drainage follows territory of scalp vessels", color: C.muted },
    "Anterior scalp → parotid nodes",
    "Posterior scalp → occipital & mastoid nodes",
    "Forehead → submandibular nodes",
    "Ear → parotid + retroauricular nodes",
  ]
);

// SUPERFICIAL LYMPH NODES TABLE-like slide
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.navy } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.7, fill: { color: C.slate } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0.7, w: 10, h: 0.04, fill: { color: C.teal } });
  s.addText("SUPERFICIAL LYMPH NODES OF HEAD", {
    x: 0.3, y: 0, w: 9.4, h: 0.7,
    fontSize: 22, bold: true, color: C.gold, fontFace: "Calibri",
    valign: "middle", margin: 0,
  });

  const rows = [
    ["Group", "Location", "Areas Drained", "Drains Into"],
    ["Occipital (2-4)", "Location on the occipital bone", "Occipital part of scalp", "Superficial cervical / Accessory lymph nodes"],
    ["Mastoid (1-3)", "Superficial to sternocleidomastoid over mastoid", "Skin of ear / Post auricular scalp", "Superior deep cervical / Accessory lymph nodes"],
    ["Preauricular (2-3)", "Anterior to ear over parotid fascia", "Anterior surface of ear", "Superior deep cervical nodes"],
    ["Facial", "Along course of facial artery & vein", "Skin & mucous membranes of eyelids, nose, cheek", "Submandibular nodes"],
  ];

  const colW = [1.8, 2.2, 2.6, 3.1];
  const startX = 0.2;
  let x = startX;
  rows[0].forEach((h, ci) => {
    s.addShape(pres.ShapeType.rect, { x, y: 0.8, w: colW[ci], h: 0.45, fill: { color: C.teal } });
    s.addText(h, { x: x + 0.05, y: 0.8, w: colW[ci] - 0.1, h: 0.45, fontSize: 11, bold: true, color: C.white, fontFace: "Calibri", valign: "middle", margin: 0 });
    x += colW[ci];
  });

  rows.slice(1).forEach((row, ri) => {
    let x2 = startX;
    const bg = ri % 2 === 0 ? C.slate : C.navy;
    const rowY = 1.3 + ri * 0.9;
    row.forEach((cell, ci) => {
      s.addShape(pres.ShapeType.rect, { x: x2, y: rowY, w: colW[ci], h: 0.85, fill: { color: bg } });
      s.addText(cell, { x: x2 + 0.05, y: rowY + 0.02, w: colW[ci] - 0.1, h: 0.8, fontSize: 10, color: C.offWhite, fontFace: "Calibri", valign: "middle", margin: 0 });
      x2 += colW[ci];
    });
  });
}

// ────────────────────────────────────────────────────────────────────────────
// DEEP NECK LYMPHATICS
// ────────────────────────────────────────────────────────────────────────────
twoColSlide(
  "DEEP NECK LYMPHATICS",
  [
    { text: "JUGULO-DIAGASTRIC NODES:", bold: true, color: C.gold },
    "Present within the triangle formed by IJV and anterior/posterior bellies of digastric muscle",
    "AT LEVEL 2 OF DEEP CERVICAL LYMPH NODE",
    "",
    "DRAINS: submandibular region, oropharynx, oral cavity",
  ],
  [
    { text: "JUGULO-OMOHYOID NODES:", bold: true, color: C.teal },
    "Present between middle and lower cervical group where omohyoid muscles crosses the IJV",
    "AT LOW LEVEL 3 / HIGH LEVEL 4",
    "",
    "DRAINS: anterior floor of mouth, oropharynx, larynx",
  ]
);

// DRAINING AREAS
contentSlide("DRAINING AREAS — Lymph Node Levels", [
  { text: "Level I/II:", bold: true, color: C.gold },
  "Submental, submandibular nodes — lips, ear, skin of face",
  "",
  { text: "Level II — upper jugular:", bold: true, color: C.teal },
  "Thyroid, parotid, hypopharynx, thyroid, larynx",
  "",
  { text: "Level III/IV — mid & lower jugular:", bold: true, color: C.gold },
  "Hypopharynx, thyroid, breast, lung, prostate, genitourinary tract",
  "",
  { text: "Level V — posterior triangle:", bold: true, color: C.teal },
  "Nasopharynx, soft tissue sarcomas of neck/scalp",
], "image19.jpg", { x: 5.7, y: 0.85, w: 4.0, h: 4.3 });

// ────────────────────────────────────────────────────────────────────────────
// CLINICAL EXAMINATION + N STAGING
// ────────────────────────────────────────────────────────────────────────────
sectionSlide("CLINICAL EXAMINATION & N-STAGING", "Cervical Lymph Nodes · TNM Classification");

contentSlide("CLINICAL EXAMINATION OF NODES", [
  { text: "Palpation technique:", bold: true, color: C.gold },
  "Examine all triangles systematically",
  "Note: Size, site, shape, surface, consistency, tenderness, fixity, transillumination, pulsatility",
  "",
  { text: "Clinical significance of findings:", bold: true, color: C.teal },
  "Hard, fixed: likely malignant",
  "Tender, fluctuant: likely inflammatory/infective",
  "Rubbery, non-tender: lymphoma",
  "",
  { text: "Imaging adjuncts:", bold: true, color: C.gold },
  "USG neck with FNAC — first line",
  "CECT neck — defines extent & level",
  "PET-CT — for unknown primary",
], "image20.jpg", { x: 5.7, y: 0.85, w: 3.9, h: 4.3 });

// N STAGING
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.navy } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.7, fill: { color: C.slate } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0.7, w: 10, h: 0.04, fill: { color: C.teal } });
  s.addText("CLINICAL N-STAGE FOR CERVICAL METASTASIS (Non-HPV)", {
    x: 0.3, y: 0, w: 9.4, h: 0.7,
    fontSize: 19, bold: true, color: C.gold, fontFace: "Calibri",
    valign: "middle", margin: 0,
  });

  const nrows = [
    ["Stage", "Criteria"],
    ["NX", "Regional nodal status cannot be assessed"],
    ["N0", "No regional lymph node metastasis"],
    ["N1", "Single ipsilateral node ≤3 cm, no ENE"],
    ["N2a", "Single ipsilateral node >3 cm but ≤6 cm, no ENE"],
    ["N2b", "Multiple ipsilateral nodes, none >6 cm, no ENE"],
    ["N2c", "Bilateral or contralateral nodes, none >6 cm, no ENE"],
    ["N3a", "Lymph node >6 cm, no ENE"],
    ["N3b", "Any node with clinical ENE"],
  ];
  const cw = [1.5, 8.0];
  nrows.forEach((row, ri) => {
    const y = 0.85 + ri * 0.53;
    const bg = ri === 0 ? C.teal : ri % 2 === 0 ? C.slate : C.navy;
    s.addShape(pres.ShapeType.rect, { x: 0.3, y, w: cw[0], h: 0.5, fill: { color: bg } });
    s.addShape(pres.ShapeType.rect, { x: 0.3 + cw[0], y, w: cw[1], h: 0.5, fill: { color: bg } });
    s.addText(row[0], { x: 0.35, y: y + 0.02, w: cw[0] - 0.1, h: 0.46, fontSize: 12, bold: ri === 0, color: ri === 0 ? C.white : C.gold, fontFace: "Calibri", valign: "middle", margin: 0 });
    s.addText(row[1], { x: 0.35 + cw[0], y: y + 0.02, w: cw[1] - 0.1, h: 0.46, fontSize: 12, bold: ri === 0, color: ri === 0 ? C.white : C.offWhite, fontFace: "Calibri", valign: "middle", margin: 0 });
  });
}

// ────────────────────────────────────────────────────────────────────────────
// ACADEMY'S CLASSIFICATION / TYPES
// ────────────────────────────────────────────────────────────────────────────
sectionSlide("TYPES OF NECK DISSECTION", "Academy's Classification");

contentSlide("ACADEMY'S CLASSIFICATION OF NECK DISSECTION", [
  { text: "RADICAL NECK DISSECTION (RND):", bold: true, color: C.red },
  "Removal of level 1–5, accessory nerve (CN XI), IJV, SCM",
  "",
  { text: "MODIFIED RADICAL NECK DISSECTION (MRND):", bold: true, color: C.gold },
  "Removal of level 1–5",
  "Type 1: preservation of accessory nerve",
  "Type 2: preservation of accessory nerve and IJV",
  "Type 3: preservation of accessory nerve, IJV and SCM",
  "",
  { text: "SELECTIVE NECK DISSECTION (SND):", bold: true, color: C.teal },
  "SND(Ia-b): submental/submandibular",
  "SND(2-4): anterior/posterior jugular chain",
  "SND(2-5): posterolateral; SND(6) level 6 central",
  "",
  { text: "EXTENDED NECK DISSECTION:", bold: true, color: C.muted },
  "Removal of additional lymph node levels or non-lymphatic structures relative to RND",
]);

// ────────────────────────────────────────────────────────────────────────────
// INCISIONS
// ────────────────────────────────────────────────────────────────────────────
contentSlide("INCISIONS FOR NECK DISSECTION", [
  { text: "Main goals of incision:", bold: true, color: C.gold },
  "1. Assure adequate vascularisation of skin flaps",
  "2. Adequate exposure of the surgical field",
  "3. Adequate protection of major vessels",
  "4. Consider localisation of primary tumours",
  "5. Include previous surgical fields (scars/incisions)",
  "",
  { text: "SURGICAL IMPORTANCE:", bold: true, color: C.red },
  "Trifurcation to be AVOIDED — causes flap breakdown especially in previously radiated neck",
  "Classic incisions: CRILE, SCHOBINGER, CONLEY",
], "image24.jpg", { x: 5.7, y: 0.85, w: 3.9, h: 4.3 });

// ────────────────────────────────────────────────────────────────────────────
// RADICAL NECK DISSECTION
// ────────────────────────────────────────────────────────────────────────────
sectionSlide("RADICAL NECK DISSECTION", "Indications · Boundaries · Steps");

contentSlide("RADICAL NECK DISSECTION — Indications & Contraindications", [
  { text: "INDICATIONS:", bold: true, color: C.gold },
  "Significant operable neck disease (N2a, N2b, N3) with spinal accessory or IJV involvement",
  "Extensive recurrent disease after previous selective surgery or radiotherapy",
  "Clinical signs of gross extranodal disease",
  "",
  { text: "CONTRAINDICATIONS:", bold: true, color: C.red },
  "Untreatable primary tumour / unresectable neck disease (involvement of ICA, brachial plexus, prevertebral fascia)",
  "Distant metastasis",
  "Simultaneous bilateral neck dissection (preserve one IJV)",
]);

contentSlide("RADICAL NECK DISSECTION — Surgical Boundaries", [
  { text: "SUPERIOR:", bold: true, color: C.gold },
  "Angle of mandible",
  "",
  { text: "ANTERIOR:", bold: true, color: C.teal },
  "Contralateral anterior belly of digastric",
  "",
  { text: "INFERIOR:", bold: true, color: C.gold },
  "Clavicle",
  "",
  { text: "POSTERIOR:", bold: true, color: C.teal },
  "Anterior border of trapezius",
  "",
  { text: "PATIENT POSITION:", bold: true, color: C.muted },
  "Supine, head turned to opposite side",
  "Head elevation 30°",
  "Sandbag under shoulders",
], "image26.jpg", { x: 5.6, y: 0.85, w: 4.1, h: 3.8 });

contentSlide("FOUR AREAS OF SPECIAL ATTENTION", [
  { text: "1. Lower end of IJV", bold: true, color: C.gold },
  { text: "2. Junction of lateral border of clavicle with lower edge of trapezius", bold: true, color: C.teal },
  { text: "3. Upper end of IJV", bold: true, color: C.gold },
  { text: "4. Submandibular triangle", bold: true, color: C.teal },
], "image27.jpg", { x: 5.7, y: 0.85, w: 4.0, h: 4.0 });

contentSlide("STEPS OF RADICAL NECK DISSECTION", [
  { text: "INCISION:", bold: true, color: C.gold },
  "Through skin down to platysma",
  "Raise flap 1 subplatysmal plane",
  "Preserve MARGINAL MANDIBULAR NERVE and if possible cervical branch of facial nerve",
  "",
  { text: "KEY STEPS:", bold: true, color: C.teal },
  "Divide SCM above clavicle",
  "Ligate facial artery and vein",
  "Expose carotid sheath; open it",
  "IJV visualised between sternal and clavicular heads of SCM",
  "Place 3 ligating sutures (vicryl 0/0)",
  "Retract carotid artery and vagus nerve medially",
  "Extend dissection towards CHAISSAIGNAC'S TRIANGLE",
  "Remove scalene nodes",
]);

contentSlide("FIRST AREA OF SPECIAL ATTENTION — Lower IJV", [
  { text: "Lower end of IJV:", bold: true, color: C.gold },
  "Dissecting along upper border of clavicle from trapezius to suprasternal",
  "Divide supraclavicular nerves and vessels",
  "Divide SCM above clavicle",
  "IJV visualised between sternal and clavicular heads of SCM",
  "Open carotid sheath",
  "Expose few centimetres of IJV",
  "Place 3 ligating sutures (vicryl 0/0)",
  "Retract carotid artery and vagus nerve medially",
  "Extend dissection laterally towards CHAISSAIGNAC'S TRIANGLE",
  "Remove scalene nodes",
], "image29.jpg", { x: 5.7, y: 0.85, w: 3.9, h: 4.3 });

contentSlide("SECOND AREA — Clavicle/Trapezius Junction", [
  "Junction of clavicle and anterior border of trapezius",
  "Begin dissection at lower end of trapezius",
  "Divide fatty tissues in supraclavicular region",
  "Divide SCM above clavicle",
  { text: "Ligate transverse cervical vessels", color: C.gold },
  "Continue dissection on to underlying level of prevertebral fascia",
  { text: "Identify and preserve brachial plexus and phrenic nerve", color: C.teal },
  "Continue dissection to anterior border of Trapezius",
  "Proceed upward direction, dissecting posterior triangle",
], "image30.jpg", { x: 5.7, y: 0.85, w: 3.9, h: 4.2 });

contentSlide("DISSECTION OF POSTERIOR TRIANGLE", [
  "Continue dissection to uppermost point of triangle at mastoid tip",
  "Clear posterior triangle",
  "Dissect",
  "Proximal attachment of SCM at lower border of parotid",
], "image32.jpg", { x: 5.6, y: 0.85, w: 4.1, h: 4.3 });

contentSlide("THIRD AREA — Upper IJV (Jugulodigastric)", [
  "Upper end of IJV",
  "Clear posterior belly of digastric",
  { text: "Retract superiorly to expose IJV and accessory nerve", color: C.gold },
  "Clear vein and mobilize over a few centimetres",
  "Divide IJV after ligation and transfixation",
  "Mobilize from caudal to cranial direction",
  { text: "Follow anterior belly of omohyoid to insertion at hyoid bone and divide", color: C.teal },
]);

contentSlide("FOURTH AREA — Submandibular Triangle", [
  "Divide fatty tissue on dissection plane",
  "Dissect fascia including SMG",
  "Ligate facial artery and vein",
  "Retract mylohyoid muscle medially and SMG inferolaterally",
  "Floor: visible and identify lingual and hypoglossal nerve",
  "Divide submandibular gland",
  { text: "Ligate facial artery: posterior inferior border of SMG", color: C.gold },
  "Remove entire specimen",
  "Complete haemostasis",
  "Wound irrigation with saline",
  "Neck drain",
  "Closure of incision in two layers",
], "image35.jpg", { x: 5.7, y: 0.85, w: 3.9, h: 4.3 });

// ────────────────────────────────────────────────────────────────────────────
// MODIFIED RADICAL NECK DISSECTION
// ────────────────────────────────────────────────────────────────────────────
contentSlide("MODIFIED RADICAL NECK DISSECTION", [
  { text: "MRDM TYPE 1 — Preserve Spinal Accessory Nerve:", bold: true, color: C.gold },
  "INDICATIONS: Clinically obvious lymph node metastasis without SAN involvement",
  "",
  { text: "MRDM TYPE 2 — Preserve SAN and IJV:", bold: true, color: C.teal },
  "INDICATIONS: Rarely planned",
  "Intraoperative tumour found adherent to SCM but not IJV",
  "",
  { text: "MRDM TYPE 3 — Preserve SAN, IJV, SCM:", bold: true, color: C.gold },
  "N0 neck in SCC of hypopharynx/larynx",
  "Differentiated Ca Thyroid with palpable LN metastasis in posterior triangle",
]);

// SPARING SLIDES
contentSlide("SPARING OF SPINAL ACCESSORY NERVE", [
  "Careful elevation of flap in posterior triangle",
  "Identification of SAN",
  "1 located 1cm above Erb's point",
  "2 entry point in anterior border of trapezius 5cm above clavicle",
  "3 cranial part of SAN runs along IJV and crosses it medially to laterally and transverses process of atlas",
  "",
  { text: "SPARING OF INTERNAL JUGULAR VEIN:", bold: true, color: C.gold },
  "Runs parallel to IJV",
  "Care with ligation and transfixation",
]);

// ────────────────────────────────────────────────────────────────────────────
// SELECTIVE NECK DISSECTION
// ────────────────────────────────────────────────────────────────────────────
sectionSlide("SELECTIVE NECK DISSECTION", "Subtypes & Indications");

contentSlide("SELECTIVE NECK DISSECTION — Overview", [
  { text: "Definition:", bold: true, color: C.gold },
  "Procedure where one or more lymph node groups are preserved in addition to non-lymphatic structures",
  "",
  { text: "4 Common Subtypes:", bold: true, color: C.teal },
  "1. Supraomohyoid neck dissection (SND 1–3)",
  "2. Lateral neck dissection (SND 2–4)",
  "3. Posterolateral neck dissection",
  "4. Anterior neck dissection (central compartment — Level 6)",
], "image39.jpg", { x: 5.7, y: 0.85, w: 3.9, h: 3.5 });

contentSlide("SND (1–3): Supraomohyoid", [
  { text: "Supraomohyoid neck dissection:", bold: true, color: C.gold },
  "En bloc removal of cervical lymph nodes group 1 to 3",
  "",
  { text: "INDICATIONS:", bold: true, color: C.teal },
  "N0 neck — oral cavity Ca (T1–T4) with N0 neck",
  "N1 in upper neck if post operative radiation therapy planned",
  "",
  { text: "BILATERAL SUPRAOMOHYOID NECK DISSECTION:", bold: true, color: C.gold },
  "Anterior tongue Ca (pT2–4)",
], "image40.jpg", { x: 5.7, y: 0.85, w: 3.9, h: 4.0 });

contentSlide("SND (1–4): Lateral Neck Dissection", [
  { text: "Extended supraomohyoid neck dissection:", bold: true, color: C.gold },
  "",
  { text: "SELECTIVE NECK DISSECTION: LEVEL 2–4:", bold: true, color: C.teal },
  "LATERAL NECK DISSECTION",
  "EN BLOC removal of jugular lymph nodes (level 2–4)",
  "",
  { text: "INDICATIONS:", bold: true, color: C.gold },
  "N0 neck in Ca of oropharynx, hypopharynx, larynx",
  "Laryngeal Ca with subglottic extension, hypopharyngeal Ca",
  "SND (2-4–6) — if risk for bilateral metastasis: BILATERAL SND (2–4)",
]);

contentSlide("SND: Posterolateral (Level 2-5+)", [
  { text: "POSTEROLATERAL NECK DISSECTION:", bold: true, color: C.gold },
  "",
  { text: "INDICATIONS:", bold: true, color: C.teal },
  "Cutaneous malignancies",
  "Melanomas",
  "Squamous cell carcinoma",
  "Merkel cell carcinomas",
  "Soft tissue sarcomas of scalp and neck",
  "",
  "Includes suboccipital and post auricular nodal groups in addition to levels 2–5",
]);

contentSlide("SND: Level 6 — Central Compartment Dissection", [
  { text: "SELECTIVE NECK DISSECTION LEVEL 6:", bold: true, color: C.gold },
  "Central compartment dissection",
  "En bloc removal of level 6 lymph nodes",
  "",
  { text: "INDICATIONS:", bold: true, color: C.teal },
  "Thyroid Ca",
  "Laryngeal Ca",
  "Advanced glottic and subglottic Ca",
  "Advanced pyriform sinus Ca",
  "Advanced cervical oesophagus Cancer",
  "Tracheal cancer",
], "image43.jpg", { x: 5.7, y: 0.85, w: 3.9, h: 3.8 });

// ────────────────────────────────────────────────────────────────────────────
// EXTENDED NECK DISSECTION
// ────────────────────────────────────────────────────────────────────────────
contentSlide("EXTENDED NECK DISSECTION", [
  "Removal of one or more additional lymph node groups and/or non-lymphatic structures relative to RND",
  "",
  { text: "Examples:", bold: true, color: C.gold },
  "Level 7: Retropharyngeal nodes",
  "Hypoglossal nerve",
  "Carotid artery",
  "Skin of neck",
], "image44.jpg", { x: 5.7, y: 0.85, w: 3.9, h: 3.5 });

// ────────────────────────────────────────────────────────────────────────────
// COMPLICATIONS
// ────────────────────────────────────────────────────────────────────────────
sectionSlide("COMPLICATIONS OF NECK DISSECTION", "Intraoperative · Early · Intermediate · Late");

contentSlide("INTRAOPERATIVE COMPLICATIONS", [
  { text: "Injury to local blood vessels and nerves:", bold: true, color: C.red },
  "SAN (Spinal Accessory Nerve)",
  "Marginal mandibular nerve",
  "Cervical plexus",
  "Brachial plexus",
  "Vagus nerve",
  "Hypoglossal nerve",
  "Phrenic nerve",
  "Thoracic duct injury",
]);

contentSlide("EARLY POST-OPERATIVE COMPLICATIONS", [
  { text: "HAEMORRHAGE:", bold: true, color: C.red },
  "May need re-exploration",
  "",
  { text: "AIRWAY OBSTRUCTION:", bold: true, color: C.gold },
  "Temporary elective tracheostomy to protect airway",
  "",
  { text: "INCREASED INTRACRANIAL PRESSURE:", bold: true, color: C.teal },
  "If persists, head elevation, steroids and mannitol",
  "",
  { text: "CAROTID SINUS SYNDROME:", bold: true, color: C.gold },
  "May result in hypotension and bradycardia",
  "",
  { text: "PNEUMOTHORAX", bold: true, color: C.red },
  "",
  { text: "AIR LEAK", bold: true, color: C.red },
]);

contentSlide("INTERMEDIATE POST-OPERATIVE COMPLICATIONS", [
  { text: "CAROTID ARTERY RUPTURE:", bold: true, color: C.red },
  "Fatal complication resulting in immediate mortality",
  "Immediate finger pressure, airway management, blood transfusion and exploration in OT",
  "Prevention: use of free and pedicled flap for closure of defect",
  "",
  { text: "DEEP VEIN THROMBOSIS", bold: true, color: C.gold },
  "",
  { text: "PULMONARY COMPLICATIONS:", bold: true, color: C.teal },
  "Basal collapse and bronchopneumonia",
]);

contentSlide("CHYLOUS LEAK", [
  { text: "INTRAOPERATIVE:", bold: true, color: C.gold },
  "Apparent as clear fluid — confirmed by increased flow on Valsalva manoeuvre",
  "Vessels — quite fragile and surrounded by fatty tissue: prone to tearing",
  "",
  { text: "MANAGEMENT:", bold: true, color: C.teal },
  "Direct clamping and ligation",
  "If this fails: fibrin sealant or vicryl mesh may be used",
  "Muscle flaps can be used in severe cases",
  "Diathermy does not seal fragile lymphatic vessels",
  "",
  { text: "POST-OPERATIVE:", bold: true, color: C.gold },
  "Presence of milky appearance in neck drain after starting feed",
  "Confirmed either by identifying triglycerides >100mg/dl OR reducing volume of drain fluid on stopping enteral feeds",
]);

contentSlide("CHYLOUS LEAK — Management", [
  { text: "1. Low output leak:", bold: true, color: C.gold },
  "Close spontaneously or managed with aspiration, pressure dressing and low fat elemental diet",
  "",
  { text: "2. Surgical re-exploration and ligation of the duct:", bold: true, color: C.teal },
  "Advised if:",
  "   a) Presence of complications (e.g. flap necrosis)",
  "   b) High output leak (>300 ml/day)",
  "",
  { text: "3. If neck exploration fails:", bold: true, color: C.gold },
  "Thoracoscopic ligation of thoracic duct is advised 1",
]);

contentSlide("LATE POST-OPERATIVE COMPLICATIONS", [
  { text: "LYMPH OEDEMA:", bold: true, color: C.gold },
  "If both IJVs ligated, block of lymphatic drainage from face/neck causing lymphoedema",
  "",
  { text: "HYPERTROPHIC SCARS", bold: true, color: C.teal },
  "",
  { text: "SEQUELAE OF RADICAL NECK DISSECTION:", bold: true, color: C.red },
  "Removal of spinal accessory nerve",
  "Loss of trapezius function",
  "Decreased ability to abduct shoulder greater than 90 degrees",
  "Destabilization of scapula",
  "Shoulder syndrome of pain, weakness and deformity of shoulder girdle",
], "image45.jpg", { x: 5.7, y: 0.85, w: 3.9, h: 3.8 });

// ────────────────────────────────────────────────────────────────────────────
// BIBLIOGRAPHY
// ────────────────────────────────────────────────────────────────────────────
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.navy } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.7, fill: { color: C.slate } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0.7, w: 10, h: 0.04, fill: { color: C.teal } });
  s.addText("BIBLIOGRAPHY", {
    x: 0.3, y: 0, w: 9.4, h: 0.7,
    fontSize: 24, bold: true, color: C.gold, fontFace: "Calibri",
    valign: "middle", align: "center", charSpacing: 6, margin: 0,
  });
  const refs = [
    { text: "Scott-Brown's Otorhinolaryngology, Head & Neck Surgery", bold: true, color: C.gold },
    { text: "8th Edition — Primary Reference", color: C.light },
    { text: "", color: C.white },
    { text: "Cummings Otolaryngology — Head & Neck Surgery", bold: true, color: C.gold },
    { text: "7th Edition", color: C.light },
    { text: "", color: C.white },
    { text: "Stell & Maran's Textbook of Head & Neck Surgery", bold: true, color: C.gold },
    { text: "and Oncology", color: C.light },
    { text: "", color: C.white },
    { text: "Internet & Published Literature", bold: true, color: C.muted },
  ];
  const items = refs.map((r, i) => ({
    text: r.text,
    options: { breakLine: i < refs.length - 1, fontSize: 15, bold: r.bold || false, color: r.color, fontFace: "Calibri" },
  }));
  s.addText(items, { x: 2.0, y: 1.0, w: 6.0, h: 4.3, valign: "top", margin: 0 });
}

// ────────────────────────────────────────────────────────────────────────────
// THANK YOU
// ────────────────────────────────────────────────────────────────────────────
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.navy } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 1.8, w: 10, h: 2.0, fill: { color: C.slate } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 1.8, w: 10, h: 0.06, fill: { color: C.teal } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 3.8, w: 10, h: 0.06, fill: { color: C.teal } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 1.8, w: 0.15, h: 2.0, fill: { color: C.gold } });
  s.addText("THANK YOU", {
    x: 0.5, y: 1.9, w: 9, h: 0.9,
    fontSize: 54, bold: true, color: C.white, fontFace: "Calibri",
    align: "center", charSpacing: 8, margin: 0,
  });
  s.addText("Questions & Discussion", {
    x: 0.5, y: 2.9, w: 9, h: 0.5,
    fontSize: 16, color: C.gold, fontFace: "Calibri",
    align: "center", italic: true, margin: 0,
  });
  s.addText("Dr. Madhuri  |  2nd Year ENT PG  |  Moderator: Dr. Yasaswi", {
    x: 0.5, y: 4.6, w: 9, h: 0.6,
    fontSize: 12, color: C.muted, fontFace: "Calibri",
    align: "center", margin: 0,
  });
}

// ────────────────────────────────────────────────────────────────────────────
// WRITE FILE
// ────────────────────────────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/neck-dissection-output/Neck_Dissection_Presentation.pptx" })
  .then(() => console.log("✅ Done: /home/daytona/workspace/neck-dissection-output/Neck_Dissection_Presentation.pptx"))
  .catch(e => { console.error("ERROR:", e); process.exit(1); });
You've run out of free credits. Sign up for a free account to continue using Orris.
This is a shared conversation. Sign in to Orris to start your own chat.