can you help me make a presentation for synopsis Defence i am attaching the sample for the presentation please make it according to that and suggest images too i am also attaching my synopsis too
cd /home/daytona/workspace/attachments/09355867-dcad-45f0-8830-c340272c12c4 && python -m markitdown "Sample ppt.pptx" 2>/dev/null
cd /home/daytona/workspace/attachments/09355867-dcad-45f0-8830-c340272c12c4 && pandoc "Awais Rafiq Synopsis 2.docx" -o /tmp/synopsis.md 2>/dev/null && cat /tmp/synopsis.md
cd /home/daytona/workspace/attachments/09355867-dcad-45f0-8830-c340272c12c4 && python /home/daytona/skills/pptx/scripts/thumbnail.py "Sample ppt.pptx" 2>&1 | head -30
cd /home/daytona/workspace/attachments/09355867-dcad-45f0-8830-c340272c12c4 && python /home/daytona/skills/pptx/scripts/office/unpack.py "Sample ppt.pptx" /tmp/sample_unpacked/ 2>&1 && ls /tmp/sample_unpacked/
ls /home/daytona/workspace/attachments/09355867-dcad-45f0-8830-c340272c12c4/ && ls /tmp/sample_unpacked/ppt/slides/ | head -20 && cat /tmp/sample_unpacked/ppt/slides/slide1.xml | python3 -c "import sys; from xml.dom.minidom import parseString; print(parseString(sys.stdin.read()).toprettyxml()[:3000])"
ls /tmp/sample_unpacked/ppt/theme/ && cat /tmp/sample_unpacked/ppt/theme/theme1.xml | python3 -c "import sys,re; content=sys.stdin.read(); colors=re.findall(r'<a:(dk1|dk2|lt1|lt2|accent1|accent2|accent3|accent4|accent5|accent6)[^>]*>.*?</a:\w+>', content, re.DOTALL); [print(c[:200]) for c in colors[:10]]"
python3 -c " import xml.etree.ElementTree as ET tree = ET.parse('/tmp/sample_unpacked/ppt/theme/theme1.xml') root = tree.getroot() ns = {'a': 'http://schemas.openxmlformats.org/drawingml/2006/main'} # Get all color elements for elem in root.iter(): tag = elem.tag.split('}')[-1] if '}' in elem.tag else elem.tag if tag in ['dk1','dk2','lt1','lt2','accent1','accent2','accent3','accent4','accent5','accent6']: for child in elem: ctag = child.tag.split('}')[-1] print(f'{tag}: {ctag} = {child.attrib}') "
# Extract text from all slides to understand the layout/structure python3 << 'EOF' import os, xml.etree.ElementTree as ET slides_dir = '/tmp/sample_unpacked/ppt/slides' ns = { 'a': 'http://schemas.openxmlformats.org/drawingml/2006/main', 'p': 'http://schemas.openxmlformats.org/presentationml/2006/main', 'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships' } slide_files = sorted([f for f in os.listdir(slides_dir) if f.startswith('slide') and f.endswith('.xml') and not 'Layout' in f and not 'Master' in f]) slide_files = sorted(slide_files, key=lambda x: int(''.join(filter(str.isdigit, x)) or 0)) for sf in slide_files[:15]: path = os.path.join(slides_dir, sf) tree = ET.parse(path) root = tree.getroot() texts = [] for t in root.iter('{http://schemas.openxmlformats.org/drawingml/2006/main}t'): if t.text and t.text.strip(): texts.append(t.text.strip()) if texts: print(f"\n=== {sf} ===") print(' | '.join(texts[:10])) EOF
# Check remaining slides and background colors python3 << 'EOF' import os, xml.etree.ElementTree as ET slides_dir = '/tmp/sample_unpacked/ppt/slides' slide_files = sorted([f for f in os.listdir(slides_dir) if f.startswith('slide') and f.endswith('.xml')]) slide_files = sorted(slide_files, key=lambda x: int(''.join(filter(str.isdigit, x)) or 0)) for sf in slide_files[15:]: path = os.path.join(slides_dir, sf) tree = ET.parse(path) root = tree.getroot() texts = [] for t in root.iter('{http://schemas.openxmlformats.org/drawingml/2006/main}t'): if t.text and t.text.strip(): texts.append(t.text.strip()) if texts: print(f"\n=== {sf} ===") print(' | '.join(texts[:8])) # Also check slide background colors from slide masters print("\n\n=== CHECKING SLIDE COLORS ===") master_path = '/tmp/sample_unpacked/ppt/slideLayouts/slideLayout1.xml' if os.path.exists(master_path): tree = ET.parse(master_path) root = tree.getroot() for elem in root.iter(): tag = elem.tag.split('}')[-1] if '}' in elem.tag else elem.tag if 'clr' in tag.lower() or 'fill' in tag.lower(): if elem.attrib: print(f'{tag}: {elem.attrib}') EOF
# Check slide backgrounds - look at master slide python3 << 'EOF' import xml.etree.ElementTree as ET, os # Check slide master for background masters = os.listdir('/tmp/sample_unpacked/ppt/slideMasters/') for m in masters[:2]: path = f'/tmp/sample_unpacked/ppt/slideMasters/{m}' tree = ET.parse(path) root = tree.getroot() # Get background fill for bg in root.iter('{http://schemas.openxmlformats.org/drawingml/2006/main}solidFill'): for child in bg: tag = child.tag.split('}')[-1] print(f'Master fill: {tag} = {child.attrib}') # Check for images for rel in root.iter(): tag = rel.tag.split('}')[-1] if 'embed' in str(rel.attrib): print(f'Image embed: {rel.attrib}') break # Check slide 2 (title slide) for text positions and colors tree2 = ET.parse('/tmp/sample_unpacked/ppt/slides/slide2.xml') root2 = tree2.getroot() print("\n=== Slide 2 shape positions & text ===") for sp in root2.iter('{http://schemas.openxmlformats.org/presentationml/2006/main}sp'): name_elem = sp.find('.//{http://schemas.openxmlformats.org/drawingml/2006/main}cNvPr', {'a': 'http://schemas.openxmlformats.org/drawingml/2006/main'}) for cNvPr in sp.iter('{http://schemas.openxmlformats.org/presentationml/2006/main}cNvPr'): pass texts = [t.text for t in sp.iter('{http://schemas.openxmlformats.org/drawingml/2006/main}t') if t.text] off = sp.find('.//{http://schemas.openxmlformats.org/drawingml/2006/main}off') ext = sp.find('.//{http://schemas.openxmlformats.org/drawingml/2006/main}ext') if texts and off is not None: print(f' Text: {" ".join(texts)[:60]}, pos: {off.attrib}, size: {ext.attrib if ext is not None else "?"}') EOF
stroke upper limb rehabilitation motor recovery
mirror therapy stroke upper limb hand rehabilitation
motor relearning programme stroke physiotherapy task practice
stroke brain ischemic neuroplasticity recovery diagram
randomized controlled trial CONSORT flow diagram study design
mkdir -p /home/daytona/workspace/awais-synopsis-ppt && ls /home/daytona/workspace/awais-synopsis-ppt/
~/awais-synopsis-ppt/create_ppt.js
const pptxgen = require("pptxgenjs");
const { execSync } = require("child_process");
// ─── Color Palette (matching sample: warm academic tones) ──────────────────
const C = {
darkBrown: "2C1A0E", // dominant dark background
midBrown: "5C3D1E", // secondary
gold: "C8901A", // accent / headings
lightGold: "E8B84B", // sub-accent
cream: "F5EFE0", // light text
white: "FFFFFF",
red: "A53010", // accent1 from theme
green: "4A7A3A", // accent4-like
teal: "1A6B6A", // accent6-like
bgLight: "FDF8F0", // slide background
headerBg: "2C1A0E",
stripeBg: "4A2E12",
textDark: "1C1008",
};
// ─── Image URLs ────────────────────────────────────────────────────────────
const IMG = {
mirrorTherapy: "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_46d719e1ee968cc2d230183226fbfe74781ab142b626095eee3dad75c335f47f.jpg",
mirrorTherapy2: "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_f6f29ccb448beda23c2ed42cee0df4bcd7dad6a36be4e25c3a5ecdf383782c36.jpg",
upperLimbRehab: "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_cdca8f38060850fd571f4a727c83e1212a80c31068b6580b336c402c2bd14823.jpg",
mrpMotor: "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_6322f4cc257404dbf1e68ce87ede394636af922eb8f44f6c48e7158dca74364d.jpg",
neuroplasticity: "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_269210a98b677f96100336bcf3571568ead42e21279be6dff60c5f7e39e03fab.jpg",
strokeBrain: "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_e5d1f6625acbbae2cf356750ecaaa9f5f6d79854d3f9cacab4a175e0e0d5fd24.jpg",
mirrorWeekly: "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_8521e88ddc305c748064a26a6046e57c002d3d366fb447dd68045c70bcae9bf2.jpg",
rehabDevice: "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_cdca8f38060850fd571f4a727c83e1212a80c31068b6580b336c402c2bd14823.jpg",
};
// Download all images as base64
console.log("Downloading images...");
const urls = Object.values(IMG);
let images = {};
try {
const raw = execSync(
`node /home/daytona/skills/shared/scripts/fetch_images.js ${urls.map(u => `"${u}"`).join(" ")}`,
{ maxBuffer: 50 * 1024 * 1024 }
).toString();
const arr = JSON.parse(raw);
const keys = Object.keys(IMG);
keys.forEach((k, i) => {
if (arr[i] && !arr[i].error) images[k] = arr[i].base64;
else console.warn(`Failed to load image: ${k}`);
});
} catch(e) {
console.warn("Image download failed:", e.message);
}
console.log("Images loaded:", Object.keys(images).length);
// ─── Create Presentation ────────────────────────────────────────────────────
let pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.author = "Awais Rafiq";
pres.title = "Synopsis Defence - MRP vs Mirror Therapy";
// ── Helper: add decorated header bar ──────────────────────────────────────
function addHeaderBar(slide, title, subtitle) {
// Dark top bar
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: "100%", h: 1.05,
fill: { color: C.darkBrown }
});
// Gold accent line under header
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 1.05, w: "100%", h: 0.06,
fill: { color: C.gold }
});
// Slide title
slide.addText(title, {
x: 0.35, y: 0.08, w: 9.3, h: 0.85,
fontSize: 22, bold: true, color: C.cream,
fontFace: "Calibri", valign: "middle", margin: 0
});
if (subtitle) {
slide.addText(subtitle, {
x: 0.35, y: 0.55, w: 9.3, h: 0.45,
fontSize: 12, color: C.lightGold,
fontFace: "Calibri", valign: "middle", margin: 0
});
}
}
// ── Helper: slide background ────────────────────────────────────────────────
function addBg(slide) {
slide.background = { color: C.bgLight };
}
// ── Helper: bottom footer bar ───────────────────────────────────────────────
function addFooter(slide, text) {
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 5.35, w: "100%", h: 0.28,
fill: { color: C.darkBrown }
});
slide.addText(text || "Awais Rafiq | MS Research Synopsis | Ibadat International University Islamabad | 2026", {
x: 0.2, y: 5.35, w: 9.6, h: 0.28,
fontSize: 8, color: C.cream, fontFace: "Calibri",
valign: "middle", align: "center", margin: 0
});
}
// ── Helper: section divider slide ──────────────────────────────────────────
function addDivider(pres, title, subtitle) {
let slide = pres.addSlide();
slide.background = { color: C.darkBrown };
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 2.3, w: "100%", h: 0.08,
fill: { color: C.gold }
});
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 3.1, w: "100%", h: 0.08,
fill: { color: C.gold }
});
slide.addText(title, {
x: 0.5, y: 2.4, w: 9, h: 0.7,
fontSize: 32, bold: true, color: C.cream,
fontFace: "Calibri", align: "center", valign: "middle"
});
if (subtitle) {
slide.addText(subtitle, {
x: 0.5, y: 3.15, w: 9, h: 0.45,
fontSize: 16, color: C.lightGold,
fontFace: "Calibri", align: "center", valign: "middle"
});
}
return slide;
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE SLIDE
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
slide.background = { color: C.darkBrown };
// Top decorative bar
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: 0.18, fill: { color: C.gold } });
slide.addShape(pres.ShapeType.rect, { x: 0, y: 5.44, w: "100%", h: 0.19, fill: { color: C.gold } });
// Left dark panel
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0.18, w: 3.2, h: 5.26, fill: { color: C.midBrown } });
// Right image panel
if (images.mirrorTherapy) {
slide.addImage({ data: images.mirrorTherapy, x: 3.2, y: 0.18, w: 6.8, h: 5.26 });
// Dark overlay on image
slide.addShape(pres.ShapeType.rect, {
x: 3.2, y: 0.18, w: 6.8, h: 5.26,
fill: { color: "000000", transparency: 35 }
});
} else {
slide.addShape(pres.ShapeType.rect, { x: 3.2, y: 0.18, w: 6.8, h: 5.26, fill: { color: C.stripeBg } });
}
// University logo placeholder / label
slide.addText("IBADAT INTERNATIONAL\nUNIVERSITY ISLAMABAD", {
x: 0.1, y: 0.3, w: 3.0, h: 0.8,
fontSize: 9.5, bold: true, color: C.lightGold,
fontFace: "Calibri", align: "center", valign: "middle"
});
// Gold divider
slide.addShape(pres.ShapeType.rect, { x: 0.15, y: 1.1, w: 2.9, h: 0.04, fill: { color: C.gold } });
// Left panel text
slide.addText("MS RESEARCH\nPROPOSAL", {
x: 0.1, y: 1.2, w: 3.0, h: 0.65,
fontSize: 14, bold: true, color: C.gold,
fontFace: "Calibri", align: "center"
});
slide.addText("Submitted By", {
x: 0.1, y: 1.95, w: 3.0, h: 0.3,
fontSize: 10, color: C.cream, fontFace: "Calibri", align: "center"
});
slide.addText("Awais Rafiq", {
x: 0.1, y: 2.2, w: 3.0, h: 0.38,
fontSize: 15, bold: true, color: C.lightGold,
fontFace: "Calibri", align: "center"
});
slide.addText("Roll No: 5012324038", {
x: 0.1, y: 2.55, w: 3.0, h: 0.28,
fontSize: 9.5, color: C.cream, fontFace: "Calibri", align: "center"
});
slide.addShape(pres.ShapeType.rect, { x: 0.15, y: 2.9, w: 2.9, h: 0.03, fill: { color: C.gold } });
slide.addText("Supervisor", {
x: 0.1, y: 2.97, w: 3.0, h: 0.28,
fontSize: 9.5, color: C.cream, fontFace: "Calibri", align: "center"
});
slide.addText("Dr. Nazish", {
x: 0.1, y: 3.2, w: 3.0, h: 0.32,
fontSize: 12, bold: true, color: C.lightGold,
fontFace: "Calibri", align: "center"
});
slide.addShape(pres.ShapeType.rect, { x: 0.15, y: 3.6, w: 2.9, h: 0.03, fill: { color: C.gold } });
slide.addText("Dept. of Biological Sciences\nFaculty of Physical Therapy", {
x: 0.1, y: 3.68, w: 3.0, h: 0.55,
fontSize: 9, color: C.cream, fontFace: "Calibri", align: "center"
});
slide.addText("February 2026", {
x: 0.1, y: 4.3, w: 3.0, h: 0.28,
fontSize: 9.5, color: C.lightGold, fontFace: "Calibri", align: "center"
});
// Main title on image
slide.addText("COMPARISON OF MOTOR RELEARNING PROGRAMME AND MIRROR THERAPY FOR UPPER LIMB FUNCTION IN POST-STROKE PATIENTS", {
x: 3.4, y: 1.2, w: 6.3, h: 2.5,
fontSize: 22, bold: true, color: C.white,
fontFace: "Calibri", align: "center", valign: "middle"
});
slide.addShape(pres.ShapeType.rect, { x: 3.4, y: 3.8, w: 6.3, h: 0.04, fill: { color: C.gold } });
slide.addText("A Randomized Controlled Trial", {
x: 3.4, y: 3.9, w: 6.3, h: 0.35,
fontSize: 14, color: C.lightGold, fontFace: "Calibri", align: "center"
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 2 — TABLE OF CONTENTS
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
addBg(slide);
addHeaderBar(slide, "Table of Contents");
addFooter(slide);
const items = [
["01", "Introduction & Background"],
["02", "Literature Review"],
["03", "Problem Statement"],
["04", "Objectives & Hypothesis"],
["05", "Significance of Research"],
["06", "Methodology"],
["07", "Outcome Measures"],
["08", "Treatment Protocol"],
["09", "Ethical Considerations"],
["10", "References"],
];
items.forEach(([num, text], i) => {
const col = i < 5 ? 0 : 1;
const row = i < 5 ? i : i - 5;
const x = col === 0 ? 0.4 : 5.2;
const y = 1.3 + row * 0.78;
// Number badge
slide.addShape(pres.ShapeType.rect, {
x, y, w: 0.52, h: 0.52,
fill: { color: C.darkBrown },
line: { color: C.gold, width: 1.5 }
});
slide.addText(num, {
x, y, w: 0.52, h: 0.52,
fontSize: 13, bold: true, color: C.gold,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
slide.addText(text, {
x: x + 0.6, y, w: 4.0, h: 0.52,
fontSize: 13, color: C.textDark,
fontFace: "Calibri", valign: "middle", margin: 0
});
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 3 — INTRODUCTION
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
addBg(slide);
addHeaderBar(slide, "Introduction");
addFooter(slide);
// Image on right
if (images.neuroplasticity) {
slide.addImage({ data: images.neuroplasticity, x: 6.55, y: 1.18, w: 3.2, h: 2.7 });
}
const bullets = [
"Stroke affects ~12.2 million people annually; >6.6 million deaths per year (GBD 2021).",
"Upper limb weakness is among the most debilitating post-stroke impairments.",
"More than 50% of survivors have persistent upper limb dysfunction at 6 months (Kwakkel et al., 2023).",
"Experience-dependent neuroplasticity offers hope — the brain can rewire with proper rehabilitation (Boyd et al., 2022).",
"Two major interventions have gained traction: Motor Relearning Programme (MRP) & Mirror Therapy (MT).",
"Despite individual evidence for both, head-to-head RCT comparisons remain limited and inconsistent.",
];
slide.addText(bullets.map((b, i) => ({
text: b,
options: { bullet: { type: "bullet", characterCode: "25B6", color: C.gold }, breakLine: i < bullets.length - 1, color: C.textDark, fontSize: 12.5, fontFace: "Calibri" }
})), {
x: 0.35, y: 1.2, w: 6.0, h: 4.0,
valign: "top", paraSpaceAfter: 6
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 4 — MRP vs MT Overview
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
addBg(slide);
addHeaderBar(slide, "The Two Interventions at a Glance");
addFooter(slide);
// MRP box
slide.addShape(pres.ShapeType.rect, {
x: 0.3, y: 1.22, w: 4.5, h: 3.9,
fill: { color: C.darkBrown },
line: { color: C.gold, width: 1.5 }
});
slide.addText("Motor Relearning\nProgramme (MRP)", {
x: 0.3, y: 1.22, w: 4.5, h: 0.75,
fontSize: 15, bold: true, color: C.gold,
fontFace: "Calibri", align: "center", valign: "middle"
});
if (images.mrpMotor) {
slide.addImage({ data: images.mrpMotor, x: 0.5, y: 2.0, w: 4.1, h: 1.6 });
}
slide.addText([
{ text: "Developed by Carr & Shepherd", options: { bullet: true, breakLine: true, color: C.cream, fontSize: 11 } },
{ text: "Task-analysis based problem solving", options: { bullet: true, breakLine: true, color: C.cream, fontSize: 11 } },
{ text: "4 steps: analyze → practice parts → practice whole → transfer", options: { bullet: true, breakLine: true, color: C.cream, fontSize: 11 } },
{ text: "Patient as active problem-solver", options: { bullet: true, color: C.cream, fontSize: 11 } },
], { x: 0.4, y: 3.65, w: 4.3, h: 1.35, fontFace: "Calibri" });
// MT box
slide.addShape(pres.ShapeType.rect, {
x: 5.1, y: 1.22, w: 4.5, h: 3.9,
fill: { color: C.darkBrown },
line: { color: C.gold, width: 1.5 }
});
slide.addText("Mirror Therapy (MT)", {
x: 5.1, y: 1.22, w: 4.5, h: 0.75,
fontSize: 15, bold: true, color: C.gold,
fontFace: "Calibri", align: "center", valign: "middle"
});
if (images.mirrorTherapy2) {
slide.addImage({ data: images.mirrorTherapy2, x: 5.3, y: 2.0, w: 4.1, h: 1.6 });
}
slide.addText([
{ text: "Visual illusion activates mirror neurons", options: { bullet: true, breakLine: true, color: C.cream, fontSize: 11 } },
{ text: "Mirror placed mid-sagittally, good arm reflected", options: { bullet: true, breakLine: true, color: C.cream, fontSize: 11 } },
{ text: "Activates motor cortex on damaged hemisphere (Formica et al., 2024)", options: { bullet: true, breakLine: true, color: C.cream, fontSize: 11 } },
{ text: "Cochrane review: moderate evidence for motor improvement (Thieme et al., 2023)", options: { bullet: true, color: C.cream, fontSize: 11 } },
], { x: 5.2, y: 3.65, w: 4.3, h: 1.35, fontFace: "Calibri" });
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 5 — LITERATURE REVIEW
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
addBg(slide);
addHeaderBar(slide, "Literature Review", "Key Evidence Base");
addFooter(slide);
if (images.strokeBrain) {
slide.addImage({ data: images.strokeBrain, x: 6.7, y: 1.22, w: 3.05, h: 2.4 });
slide.addText("Stroke neuroplasticity & recovery zones", {
x: 6.7, y: 3.62, w: 3.05, h: 0.3,
fontSize: 7.5, color: "888888", fontFace: "Calibri", align: "center", italic: true
});
}
const items = [
{ heading: "MRP Evidence:", text: "Pawar et al. (2025): MRP significantly improved Barthel Index in subacute stroke patients (RCT). O'Rourke & Edwards (2024): MRP superior for proximal functions (shoulder, elbow)." },
{ heading: "MT Evidence:", text: "Thieme et al. (2023) Cochrane review: 62 studies, >2000 participants — moderate but significant improvements in motor function. Formica et al. (2024): fNIRS imaging confirmed increased motor cortex activation." },
{ heading: "Head-to-Head Comparisons:", text: "Rauf et al. (2021): Both effective, no significant difference (p>0.05). Ashraf et al. (2025): MRP superior at 4 weeks (UL p=0.003, hand p=0.004). Hsieh et al. (2025): methodological gaps persist." },
{ heading: "Research Gap:", text: "No adequately powered, assessor-blinded RCT with ≥6-week follow-up directly comparing MRP and MT exists. This study fills that gap." },
];
items.forEach((item, i) => {
const y = 1.3 + i * 0.98;
slide.addShape(pres.ShapeType.rect, {
x: 0.3, y, w: 0.07, h: 0.75,
fill: { color: C.gold }
});
slide.addText(item.heading, {
x: 0.5, y, w: 5.9, h: 0.28,
fontSize: 12.5, bold: true, color: C.darkBrown,
fontFace: "Calibri", margin: 0
});
slide.addText(item.text, {
x: 0.5, y: y + 0.28, w: 5.9, h: 0.65,
fontSize: 10.5, color: C.textDark,
fontFace: "Calibri", margin: 0
});
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 6 — PROBLEM STATEMENT
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
slide.background = { color: C.midBrown };
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: 0.06, fill: { color: C.gold } });
slide.addShape(pres.ShapeType.rect, { x: 0, y: 5.57, w: "100%", h: 0.06, fill: { color: C.gold } });
slide.addText("Problem Statement", {
x: 0.5, y: 0.12, w: 9, h: 0.55,
fontSize: 24, bold: true, color: C.gold,
fontFace: "Calibri", align: "center"
});
slide.addText(
"After stroke, upper limb dysfunction is a severe limitation to independence and the best intervention is not completely understood. Clinicians are currently choosing between Motor Relearning Programme (MRP) and Mirror Therapy (MT) with NO high-quality comparative evidence.",
{
x: 0.6, y: 0.85, w: 8.8, h: 1.05,
fontSize: 13.5, color: C.cream, fontFace: "Calibri",
align: "center", italic: true
}
);
const gaps = [
{ icon: "⚠", label: "Small samples", detail: "Available RCTs limited to n=28 per group" },
{ icon: "⏱", label: "Short follow-up", detail: "Most studies only 4 weeks — no sustained outcomes" },
{ icon: "❓", label: "Inconsistent results", detail: "Some show MRP superior; others show no difference" },
{ icon: "🏥", label: "Clinical burden", detail: "Patients may receive sub-optimal therapy without clear evidence" },
];
gaps.forEach((g, i) => {
const x = 0.35 + i * 2.35;
slide.addShape(pres.ShapeType.rect, {
x, y: 2.1, w: 2.1, h: 2.8,
fill: { color: C.darkBrown },
line: { color: C.gold, width: 1.5 }
});
slide.addText(g.icon, { x, y: 2.15, w: 2.1, h: 0.55, fontSize: 24, align: "center" });
slide.addText(g.label, {
x, y: 2.7, w: 2.1, h: 0.38,
fontSize: 12, bold: true, color: C.lightGold,
fontFace: "Calibri", align: "center"
});
slide.addText(g.detail, {
x: x + 0.1, y: 3.1, w: 1.9, h: 0.75,
fontSize: 10, color: C.cream, fontFace: "Calibri", align: "center"
});
});
addFooter(slide);
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 7 — OBJECTIVES
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
addBg(slide);
addHeaderBar(slide, "Objectives of The Research");
addFooter(slide);
// Primary
slide.addShape(pres.ShapeType.rect, {
x: 0.3, y: 1.25, w: 9.4, h: 0.42,
fill: { color: C.darkBrown }
});
slide.addText("PRIMARY OBJECTIVE", {
x: 0.3, y: 1.25, w: 9.4, h: 0.42,
fontSize: 13, bold: true, color: C.gold,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
slide.addText("To compare the effects of Motor Relearning Programme (MRP) and Mirror Therapy (MT) on upper limb function in post-stroke patients.", {
x: 0.4, y: 1.72, w: 9.2, h: 0.6,
fontSize: 13, color: C.textDark, fontFace: "Calibri"
});
// Secondary
slide.addShape(pres.ShapeType.rect, {
x: 0.3, y: 2.45, w: 9.4, h: 0.42,
fill: { color: C.stripeBg }
});
slide.addText("SECONDARY OBJECTIVES", {
x: 0.3, y: 2.45, w: 9.4, h: 0.42,
fontSize: 13, bold: true, color: C.gold,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
slide.addText([
{ text: "1. To evaluate the effects of Motor Relearning Programme (MRP) on upper limb function in post-stroke patients.", options: { breakLine: true, color: C.textDark, fontSize: 12.5, fontFace: "Calibri" } },
{ text: "\n", options: { breakLine: true, fontSize: 6 } },
{ text: "2. To evaluate the effects of Mirror Therapy (MT) on upper limb function in post-stroke patients.", options: { color: C.textDark, fontSize: 12.5, fontFace: "Calibri" } },
], { x: 0.4, y: 3.0, w: 9.2, h: 1.2 });
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 8 — HYPOTHESIS
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
addBg(slide);
addHeaderBar(slide, "Hypothesis");
addFooter(slide);
// Null Hypothesis box
slide.addShape(pres.ShapeType.rect, {
x: 0.3, y: 1.22, w: 4.55, h: 3.9,
fill: { color: "FFF5E8" },
line: { color: C.red, width: 2 }
});
slide.addShape(pres.ShapeType.rect, {
x: 0.3, y: 1.22, w: 4.55, h: 0.52,
fill: { color: C.red }
});
slide.addText("Null Hypothesis (H₀)", {
x: 0.3, y: 1.22, w: 4.55, h: 0.52,
fontSize: 14, bold: true, color: C.white,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
slide.addText([
{ text: "No significant difference between MRP and MT on upper limb function.", options: { bullet: true, breakLine: true, color: C.textDark, fontSize: 11.5, fontFace: "Calibri" } },
{ text: " ", options: { breakLine: true, fontSize: 4 } },
{ text: "No significant effects of MRP on upper limb function in post-stroke patients.", options: { bullet: true, breakLine: true, color: C.textDark, fontSize: 11.5, fontFace: "Calibri" } },
{ text: " ", options: { breakLine: true, fontSize: 4 } },
{ text: "No significant effects of MT on upper limb function in post-stroke patients.", options: { bullet: true, color: C.textDark, fontSize: 11.5, fontFace: "Calibri" } },
], { x: 0.45, y: 1.82, w: 4.25, h: 3.2 });
// Alt Hypothesis box
slide.addShape(pres.ShapeType.rect, {
x: 5.15, y: 1.22, w: 4.55, h: 3.9,
fill: { color: "E8F5F0" },
line: { color: C.teal, width: 2 }
});
slide.addShape(pres.ShapeType.rect, {
x: 5.15, y: 1.22, w: 4.55, h: 0.52,
fill: { color: C.teal }
});
slide.addText("Alternative Hypothesis (H₁)", {
x: 5.15, y: 1.22, w: 4.55, h: 0.52,
fontSize: 14, bold: true, color: C.white,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
slide.addText([
{ text: "There will be a significant difference between MRP and MT on upper limb function.", options: { bullet: true, breakLine: true, color: C.textDark, fontSize: 11.5, fontFace: "Calibri" } },
{ text: " ", options: { breakLine: true, fontSize: 4 } },
{ text: "MRP will show significant effects on upper limb function in post-stroke patients.", options: { bullet: true, breakLine: true, color: C.textDark, fontSize: 11.5, fontFace: "Calibri" } },
{ text: " ", options: { breakLine: true, fontSize: 4 } },
{ text: "MT will show significant effects on upper limb function in post-stroke patients.", options: { bullet: true, color: C.textDark, fontSize: 11.5, fontFace: "Calibri" } },
], { x: 5.3, y: 1.82, w: 4.25, h: 3.2 });
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 9 — SIGNIFICANCE
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
addBg(slide);
addHeaderBar(slide, "Significance of The Research");
addFooter(slide);
const items = [
{ icon: "📋", title: "Clinical Decision-Making", text: "Provides RCT-level evidence to guide clinicians in selecting the optimal upper limb rehabilitation intervention post-stroke." },
{ icon: "🏥", title: "Evidence-Based Practice", text: "Enhances clinical practice through evidence-based guidelines offering specific, actionable instructions to practitioners." },
{ icon: "💰", title: "Resource Optimization", text: "Identifies the most cost-effective intervention, reducing disability burden and overall healthcare costs." },
{ icon: "🔬", title: "Fills Research Gap", text: "Addresses the critical gap with a 6-week RCT (n=60), larger sample and longer follow-up than previous studies (n=28, 4 weeks)." },
];
items.forEach((item, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = col === 0 ? 0.3 : 5.15;
const y = 1.3 + row * 1.92;
slide.addShape(pres.ShapeType.rect, {
x, y, w: 4.55, h: 1.75,
fill: { color: col === 0 ? C.darkBrown : C.stripeBg },
line: { color: C.gold, width: 1 }
});
slide.addText(item.icon + " " + item.title, {
x: x + 0.15, y, w: 4.25, h: 0.5,
fontSize: 13, bold: true, color: C.lightGold,
fontFace: "Calibri", valign: "middle"
});
slide.addText(item.text, {
x: x + 0.15, y: y + 0.5, w: 4.25, h: 1.15,
fontSize: 11, color: C.cream, fontFace: "Calibri"
});
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 10 — METHODOLOGY OVERVIEW
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
addBg(slide);
addHeaderBar(slide, "Methodology", "Research Design & Setting");
addFooter(slide);
const rows = [
["Research Design", "Randomized Controlled Trial (RCT)"],
["Study Setting", "Pillifarm Clinic | Orthofit Physiotherapy | PT of City Physiotherapy"],
["Sampling Technique", "Non-probability Purposive Sampling"],
["Randomization", "Lottery System"],
["Study Duration", "6 Weeks"],
["Sample Size Calculation", "GPower 3.1.9.7 | Effect size d=1.073 | α=0.05 | Power=0.95 (Ashraf et al., 2025)"],
["Total Sample (n)", "n = 60 (30 per group) — includes 20% attrition from base n=48"],
["Groups", "Group A: Motor Relearning Programme | Group B: Mirror Therapy"],
["Baseline Therapy", "20 min conventional PT (ROM, positioning, weight bearing) + 35 min specific intervention"],
];
rows.forEach(([label, value], i) => {
const y = 1.22 + i * 0.46;
const isEven = i % 2 === 0;
slide.addShape(pres.ShapeType.rect, {
x: 0.3, y, w: 9.4, h: 0.44,
fill: { color: isEven ? "EDE7DB" : "FAF6EE" }
});
slide.addText(label, {
x: 0.4, y, w: 2.6, h: 0.44,
fontSize: 11.5, bold: true, color: C.darkBrown,
fontFace: "Calibri", valign: "middle", margin: 4
});
slide.addShape(pres.ShapeType.rect, {
x: 3.05, y: y + 0.08, w: 0.03, h: 0.28,
fill: { color: C.gold }
});
slide.addText(value, {
x: 3.15, y, w: 6.45, h: 0.44,
fontSize: 11, color: C.textDark,
fontFace: "Calibri", valign: "middle", margin: 4
});
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 11 — INCLUSION / EXCLUSION CRITERIA
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
addBg(slide);
addHeaderBar(slide, "Inclusion & Exclusion Criteria");
addFooter(slide);
// Inclusion
slide.addShape(pres.ShapeType.rect, {
x: 0.3, y: 1.22, w: 4.55, h: 0.42,
fill: { color: C.teal }
});
slide.addText("✓ INCLUSION CRITERIA", {
x: 0.3, y: 1.22, w: 4.55, h: 0.42,
fontSize: 13, bold: true, color: C.white,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
const inc = [
"First-ever ischemic or hemorrhagic stroke (CT/MRI confirmed)",
"≤ 6 months post-stroke",
"Age 40–75 years",
"MAS Upper Limb score 2–5 (moderate impairment)",
"MMSE > 24 (adequate cognition)",
"Modified Ashworth Scale < 2",
"Manual Muscle Testing (MMT) > 3",
"Able to follow 2-step commands",
];
slide.addText(inc.map((t, i) => ({
text: t,
options: { bullet: { type: "bullet", characterCode: "2714", color: C.teal }, breakLine: i < inc.length - 1, color: C.textDark, fontSize: 11, fontFace: "Calibri" }
})), { x: 0.4, y: 1.7, w: 4.4, h: 3.55, paraSpaceAfter: 4 });
// Exclusion
slide.addShape(pres.ShapeType.rect, {
x: 5.15, y: 1.22, w: 4.55, h: 0.42,
fill: { color: C.red }
});
slide.addText("✗ EXCLUSION CRITERIA", {
x: 5.15, y: 1.22, w: 4.55, h: 0.42,
fontSize: 13, bold: true, color: C.white,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
const exc = [
"Bilateral or brainstem stroke",
"Severe neglect, apraxia, or global aphasia",
"Severe visual field defects (hemianopia)",
"Uncontrolled hypertension / unstable cardiac conditions",
"Uncontrolled diabetes mellitus",
"Neurological disorders (Parkinson's, MS, Alzheimer's)",
"Pre-existing musculoskeletal issues in the upper limb",
];
slide.addText(exc.map((t, i) => ({
text: t,
options: { bullet: { type: "bullet", characterCode: "2718", color: C.red }, breakLine: i < exc.length - 1, color: C.textDark, fontSize: 11, fontFace: "Calibri" }
})), { x: 5.25, y: 1.7, w: 4.4, h: 3.55, paraSpaceAfter: 4 });
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 12 — OUTCOME MEASURES
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
addBg(slide);
addHeaderBar(slide, "Outcome Measurement Tools");
addFooter(slide);
const tools = [
{ name: "Motor Assessment Scale (MAS)", measure: "Functional motor recovery — Upper Arm & Hand", icc: "ICC = 0.95 (Excellent)", color: C.darkBrown },
{ name: "Action Research Arm Test (ARAT)", measure: "Functional use of the arm in real tasks", icc: "ICC = 0.95–0.98 (Outstanding)", color: C.stripeBg },
{ name: "Barthel Index (BI)", measure: "Independence in activities of daily living", icc: "ICC = 0.89 (Good)", color: C.darkBrown },
{ name: "Modified Ashworth Scale (MAS)", measure: "Resistance to passive movement / spasticity grading", icc: "ICC = 0.78 (Good/Substantial)", color: C.stripeBg },
{ name: "Mini Mental State Exam (MMSE)", measure: "Global cognitive function (orientation, memory, language)", icc: "Cronbach's α = 0.80; high test-retest", color: C.darkBrown },
];
tools.forEach((tool, i) => {
const y = 1.22 + i * 0.84;
slide.addShape(pres.ShapeType.rect, {
x: 0.3, y, w: 9.4, h: 0.78,
fill: { color: tool.color }
});
slide.addText(tool.name, {
x: 0.45, y, w: 3.8, h: 0.78,
fontSize: 12, bold: true, color: C.gold,
fontFace: "Calibri", valign: "middle"
});
slide.addShape(pres.ShapeType.rect, { x: 4.3, y: y + 0.12, w: 0.03, h: 0.55, fill: { color: C.gold } });
slide.addText(tool.measure, {
x: 4.4, y, w: 3.6, h: 0.78,
fontSize: 11, color: C.cream, fontFace: "Calibri", valign: "middle"
});
slide.addShape(pres.ShapeType.rect, { x: 8.05, y: y + 0.12, w: 0.03, h: 0.55, fill: { color: C.gold } });
slide.addText(tool.icc, {
x: 8.1, y, w: 1.5, h: 0.78,
fontSize: 10, color: C.lightGold, fontFace: "Calibri", valign: "middle"
});
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 13 — TREATMENT PROTOCOL — GROUP A (MRP)
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
addBg(slide);
addHeaderBar(slide, "Treatment Protocol — Group A: Motor Relearning Programme");
addFooter(slide);
slide.addText("40 min/day • 5 days/week • 6 weeks • 10 reps × 3 sets • Based on Carr & Shepherd Protocol", {
x: 0.3, y: 1.22, w: 9.4, h: 0.35,
fontSize: 11, color: C.darkBrown, fontFace: "Calibri",
bold: true, align: "center"
});
const weeks = [
{ wk: "Wk 1", title: "Task Analysis\n& Shoulder Stability", color: "E8F4F8" },
{ wk: "Wk 2", title: "Elbow &\nWrist Control", color: "E8F0E8" },
{ wk: "Wk 3", title: "Basic\nGrasping", color: "F8F4E8" },
{ wk: "Wk 4", title: "Functional\nDexterity", color: "F0E8F0" },
{ wk: "Wk 5", title: "Object\nManipulation", color: "E8ECF8" },
{ wk: "Wk 6", title: "ADL\nIntegration", color: "F8E8E8" },
];
weeks.forEach((w, i) => {
const x = 0.3 + i * 1.6;
slide.addShape(pres.ShapeType.rect, {
x, y: 1.65, w: 1.5, h: 3.55,
fill: { color: w.color },
line: { color: C.gold, width: 1 }
});
slide.addShape(pres.ShapeType.rect, {
x, y: 1.65, w: 1.5, h: 0.42,
fill: { color: C.darkBrown }
});
slide.addText(w.wk, {
x, y: 1.65, w: 1.5, h: 0.42,
fontSize: 12, bold: true, color: C.gold,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
slide.addText(w.title, {
x: x + 0.06, y: 2.1, w: 1.38, h: 0.6,
fontSize: 10, bold: true, color: C.darkBrown,
fontFace: "Calibri", align: "center"
});
});
// Descriptions
const descs = [
"ID missing\nmovement\ncomponents;\nshoulder\nprotraction\n& reaching",
"Elbow ext\nduring reach;\nwrist ext\nto prevent\ndrop hand",
"Grasping &\nreleasing\nlarge objects\n(sponges,\nsoft balls)",
"Spoon &\ncomb tasks;\nadvanced\nhand\nmovements",
"Objects of\nvarying\nweight &\ntexture\n(pens, cups,\ncoins)",
"Transfer to\nreal ADLs:\ndrawer,\nbuttoning;\nfinal\nassessment",
];
descs.forEach((d, i) => {
const x = 0.3 + i * 1.6;
slide.addText(d, {
x: x + 0.06, y: 2.72, w: 1.38, h: 2.4,
fontSize: 9.5, color: C.textDark, fontFace: "Calibri", align: "center"
});
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 14 — TREATMENT PROTOCOL — GROUP B (MT)
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
addBg(slide);
addHeaderBar(slide, "Treatment Protocol — Group B: Mirror Therapy");
addFooter(slide);
slide.addText("40 min/day • 5 days/week • 6 weeks • 50×50 cm mirror • Mid-sagittal placement • Based on Thieme et al. (2023)", {
x: 0.3, y: 1.22, w: 9.4, h: 0.35,
fontSize: 11, color: C.darkBrown, fontFace: "Calibri",
bold: true, align: "center"
});
if (images.mirrorWeekly) {
slide.addImage({ data: images.mirrorWeekly, x: 0.3, y: 1.62, w: 2.5, h: 1.85 });
slide.addText("Weekly MT progression (Thieme et al.)", {
x: 0.3, y: 3.47, w: 2.5, h: 0.28,
fontSize: 7.5, color: "888888", fontFace: "Calibri", align: "center", italic: true
});
}
const weeks = [
{ wk: "Wk 1", title: "Illusion & Basic Mobility", desc: "Rhythmic movements, finger tapping, wrist circles, hand open/close; mental imagery if limb immobile" },
{ wk: "Wk 2", title: "Range of Motion", desc: "Wrist flexion/extension, forearm supination, bilateral synchronization if slight movement present" },
{ wk: "Wk 3", title: "Sensory Integration", desc: "Tactile feedback: touching textures (soft vs. rough), squeezing ball, patient 'feels' texture through mirror" },
{ wk: "Wk 4", title: "Functional Tasks", desc: "Pick up cup/spoon, turn cards, grasp/release objects of varying sizes; paretic arm attempts same movement" },
{ wk: "Wk 5", title: "Complexity & Speed", desc: "Finger opposition, tracing shapes, mimicking grooming tasks; increased speed and motor control" },
{ wk: "Wk 6", title: "Integration & Transition", desc: "Bilateral tasks, high-repetition functional activities; gradual reduction of mirror time, focus on actual affected hand" },
];
weeks.forEach((w, i) => {
const y = 1.62 + i * 0.65;
const xBase = 2.9;
slide.addShape(pres.ShapeType.rect, {
x: xBase, y, w: 1.1, h: 0.58,
fill: { color: C.darkBrown }
});
slide.addText(w.wk, {
x: xBase, y, w: 1.1, h: 0.58,
fontSize: 11, bold: true, color: C.gold,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
slide.addShape(pres.ShapeType.rect, {
x: xBase + 1.15, y, w: 2.4, h: 0.58,
fill: { color: "F0EAE0" }
});
slide.addText(w.title, {
x: xBase + 1.2, y, w: 2.3, h: 0.58,
fontSize: 11, bold: true, color: C.darkBrown,
fontFace: "Calibri", valign: "middle"
});
slide.addText(w.desc, {
x: xBase + 3.6, y, w: 3.75, h: 0.58,
fontSize: 10, color: C.textDark, fontFace: "Calibri", valign: "middle"
});
});
addFooter(slide);
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 15 — ETHICAL CONSIDERATIONS
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
addBg(slide);
addHeaderBar(slide, "Ethical Considerations");
addFooter(slide);
const items = [
{ icon: "📜", title: "Declaration of Helsinki", text: "Research conducted in accordance with the ethical principles of the Declaration of Helsinki." },
{ icon: "🏫", title: "Ethical Approval", text: "Formal approval obtained from the Research Ethics Committee at Ibadat International University Islamabad before commencement." },
{ icon: "✍", title: "Informed Consent", text: "All participants receive complete information on study objectives, procedures, risks, and benefits before signing written consent." },
{ icon: "🚪", title: "Voluntary Participation", text: "Participants may withdraw at any time without affecting their standard of care." },
{ icon: "🔒", title: "Confidentiality", text: "All identifiers replaced with numeric codes. Data stored in password-protected systems accessible only to the researcher." },
{ icon: "⚕", title: "Safety & Adverse Events", text: "Participant safety is paramount. All adverse events will be immediately reported to the Ethics Committee." },
];
items.forEach((item, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = col === 0 ? 0.3 : 5.15;
const y = 1.25 + row * 1.35;
slide.addShape(pres.ShapeType.rect, {
x, y, w: 4.55, h: 1.2,
fill: { color: col === 0 ? "F5F0E8" : "EAE8F5" },
line: { color: C.gold, width: 1 }
});
slide.addText(item.icon + " " + item.title, {
x: x + 0.15, y, w: 4.25, h: 0.42,
fontSize: 13, bold: true, color: C.darkBrown,
fontFace: "Calibri", valign: "middle"
});
slide.addText(item.text, {
x: x + 0.15, y: y + 0.42, w: 4.25, h: 0.72,
fontSize: 10.5, color: C.textDark, fontFace: "Calibri"
});
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 16 — REFERENCES (partial)
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
addBg(slide);
addHeaderBar(slide, "Key References");
addFooter(slide);
const refs = [
"GBD 2021 Stroke Collaborators. (2024). Global burden of stroke 1990–2021. Lancet Neurology, 23(10), 973–1003.",
"Ashraf, Z., et al. (2025). Comparison of MRP and Mirror Therapy in stroke upper limb recovery. JRCRS, 13(1), 28–32.",
"Thieme, H., et al. (2023). Mirror therapy for improving motor function after stroke. Cochrane Database Syst Rev, (8), CD008449.",
"Rauf, R., et al. (2021). Comparison of mirror therapy and motor relearning program in stroke. PAFMJ, 71(4), 1364–1367.",
"Hsieh, Y.L., et al. (2025). Mirror therapy in subacute stroke: Systematic review & meta-analysis. PM&R, 17(5), 567–582.",
"O'Rourke, C., & Edwards, D. (2024). Motor relearning program on upper limb post-stroke: systematized review. PTR, 29(1–3), 87–100.",
"Formica, C., et al. (2024). Near infrared spectroscopy and mirror therapy for upper limb rehab in stroke. JCM, 13(21), 6612.",
"Kwakkel, G., et al. (2023). Motor rehabilitation after stroke: ESO consensus framework. ESJ, 8(4), 880–894.",
"Pawar, V., et al. (2025). Motor relearning program for upper limb function post-stroke: RCT. JAMMR, 37(7), 211–219.",
"Carr, J.H., & Shepherd, R.B. Neurological Rehabilitation: Optimizing Motor Performance (2nd ed.). Elsevier.",
];
refs.forEach((ref, i) => {
const y = 1.22 + i * 0.418;
slide.addShape(pres.ShapeType.rect, {
x: 0.3, y: y + 0.06, w: 0.22, h: 0.22,
fill: { color: C.gold }
});
slide.addText(`${i + 1}`, {
x: 0.3, y: y + 0.06, w: 0.22, h: 0.22,
fontSize: 8, bold: true, color: C.white,
fontFace: "Calibri", align: "center", valign: "middle", margin: 0
});
slide.addText(ref, {
x: 0.6, y, w: 9.1, h: 0.4,
fontSize: 9.5, color: i % 2 === 0 ? C.textDark : C.midBrown,
fontFace: "Calibri"
});
});
}
// ══════════════════════════════════════════════════════════════════════════════
// SLIDE 17 — THANK YOU
// ══════════════════════════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
slide.background = { color: C.darkBrown };
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: "100%", h: 0.12, fill: { color: C.gold } });
slide.addShape(pres.ShapeType.rect, { x: 0, y: 5.5, w: "100%", h: 0.12, fill: { color: C.gold } });
if (images.upperLimbRehab) {
slide.addImage({ data: images.upperLimbRehab, x: 5.5, y: 0.12, w: 4.5, h: 5.38 });
slide.addShape(pres.ShapeType.rect, { x: 5.5, y: 0.12, w: 4.5, h: 5.38, fill: { color: "000000", transparency: 45 } });
}
slide.addText("Thank You", {
x: 0.3, y: 1.4, w: 5.0, h: 1.0,
fontSize: 44, bold: true, color: C.gold,
fontFace: "Calibri"
});
slide.addShape(pres.ShapeType.rect, { x: 0.3, y: 2.5, w: 4.6, h: 0.05, fill: { color: C.gold } });
slide.addText("Questions & Discussion Welcome", {
x: 0.3, y: 2.65, w: 4.8, h: 0.5,
fontSize: 16, color: C.lightGold, fontFace: "Calibri"
});
slide.addText([
{ text: "Awais Rafiq\n", options: { bold: true, fontSize: 14, color: C.cream } },
{ text: "MS Physical Therapy Research\n", options: { fontSize: 12, color: C.lightGold } },
{ text: "Ibadat International University Islamabad\n", options: { fontSize: 12, color: C.cream } },
{ text: "Supervisor: Dr. Nazish | 2026", options: { fontSize: 11, color: C.lightGold } },
], { x: 0.3, y: 3.5, w: 4.8, h: 1.5, fontFace: "Calibri" });
}
// ─── SAVE ───────────────────────────────────────────────────────────────────
const outPath = "/home/daytona/workspace/awais-synopsis-ppt/Awais_Rafiq_Synopsis_Defence.pptx";
pres.writeFile({ fileName: outPath })
.then(() => console.log("✅ Saved:", outPath))
.catch(e => { console.error("❌ Error:", e); process.exit(1); });