Help with interactive presentation on restoring pelvic floor muscles strength in women

Asking for Preferences

Can you please provide both Power point and html version A bit easy to explain.

Asking for Preferences

For online fitness clients

Finding Sources
Searching the Web

pelvic floor muscle strengthening exercises women fitness program

Reading File
Reading File
Reading File
Running Command

mkdir -p /home/daytona/workspace/pelvic-floor-presentation

Writing File

~/pelvic-floor-presentation/build_pptx.js

const pptxgen = require("pptxgenjs");

const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Restoring Pelvic Floor Muscle Strength";
pres.author = "Online Fitness Program";

// ─── COLOR PALETTE ───────────────────────────────────────────
const C = {
  teal:      "1A7A6E",   // dominant – dark teal
  tealLight: "26A699",   // accent teal
  cream:     "F5F0E8",   // light background
  creamDark: "EAE3D2",   // card bg
  coral:     "E05C4B",   // highlight / accent
  white:     "FFFFFF",
  dark:      "1C2B2A",   // near-black
  midGrey:   "6B7B7A",
};

// ─── HELPER: background fill ──────────────────────────────────
function bgRect(slide, color) {
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: "100%", h: "100%",
    fill: { color },
    line: { type: "none" },
  });
}

// ─── HELPER: accent bar ───────────────────────────────────────
function accentBar(slide, color, w = 1.2) {
  slide.addShape(pres.ShapeType.rect, {
    x: 0.55, y: 1.05, w, h: 0.07,
    fill: { color },
    line: { type: "none" },
  });
}

// ─── HELPER: section pill ─────────────────────────────────────
function pill(slide, label, x, y) {
  slide.addShape(pres.ShapeType.roundRect, {
    x, y, w: 1.8, h: 0.38,
    fill: { color: C.coral },
    line: { type: "none" },
    rectRadius: 0.15,
  });
  slide.addText(label, {
    x, y, w: 1.8, h: 0.38,
    fontSize: 11, bold: true, color: C.white,
    align: "center", valign: "middle", margin: 0,
  });
}

// ─── HELPER: icon circle ──────────────────────────────────────
function iconCircle(slide, emoji, x, y, size = 0.55, bgColor = C.tealLight) {
  slide.addShape(pres.ShapeType.ellipse, {
    x, y, w: size, h: size,
    fill: { color: bgColor },
    line: { type: "none" },
  });
  slide.addText(emoji, {
    x, y, w: size, h: size,
    fontSize: 20, align: "center", valign: "middle", margin: 0,
  });
}

// ─── HELPER: exercise card ────────────────────────────────────
function exerciseCard(slide, emoji, title, steps, x, y, w = 4.1, h = 3.2) {
  slide.addShape(pres.ShapeType.roundRect, {
    x, y, w, h,
    fill: { color: C.white },
    line: { color: C.creamDark, pt: 1 },
    shadow: { type: "outer", blur: 8, offset: 3, angle: 45, color: "00000015" },
    rectRadius: 0.18,
  });
  // emoji header strip
  slide.addShape(pres.ShapeType.roundRect, {
    x, y, w, h: 0.72,
    fill: { color: C.teal },
    line: { type: "none" },
    rectRadius: 0.18,
  });
  // cover bottom corners of header strip
  slide.addShape(pres.ShapeType.rect, {
    x, y: y + 0.54, w, h: 0.2,
    fill: { color: C.teal },
    line: { type: "none" },
  });
  slide.addText(emoji + "  " + title, {
    x: x + 0.12, y: y + 0.1, w: w - 0.24, h: 0.52,
    fontSize: 13, bold: true, color: C.white,
    align: "left", valign: "middle", margin: 0,
  });
  // steps
  const stepItems = steps.map((s, i) => ({
    text: `${i + 1}.  ${s}`,
    options: { breakLine: true, fontSize: 10, color: C.dark, bullet: false },
  }));
  stepItems[stepItems.length - 1].options.breakLine = false;
  slide.addText(stepItems, {
    x: x + 0.18, y: y + 0.82, w: w - 0.36, h: h - 0.98,
    valign: "top", lineSpacingMultiple: 1.3,
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 1 – TITLE
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  bgRect(s, C.teal);

  // decorative circles
  s.addShape(pres.ShapeType.ellipse, { x: 7.8, y: -0.8, w: 3.5, h: 3.5, fill: { color: "FFFFFF08" }, line: { type: "none" } });
  s.addShape(pres.ShapeType.ellipse, { x: 8.6, y: 0.4,  w: 2.0, h: 2.0, fill: { color: "FFFFFF0F" }, line: { type: "none" } });
  s.addShape(pres.ShapeType.ellipse, { x: -0.8, y: 3.8, w: 2.2, h: 2.2, fill: { color: "FFFFFF0A" }, line: { type: "none" } });

  s.addText("WOMEN'S FITNESS", {
    x: 0.7, y: 1.2, w: 8, h: 0.45,
    fontSize: 12, bold: true, color: C.tealLight, charSpacing: 5,
    align: "left", margin: 0,
  });
  s.addText("Restoring\nPelvic Floor\nMuscle Strength", {
    x: 0.7, y: 1.7, w: 8.5, h: 2.8,
    fontSize: 44, bold: true, color: C.white,
    align: "left", valign: "top", margin: 0,
  });
  s.addShape(pres.ShapeType.rect, {
    x: 0.7, y: 4.6, w: 2.2, h: 0.06,
    fill: { color: C.coral }, line: { type: "none" },
  });
  s.addText("Your step-by-step guide to rebuilding core pelvic strength — safely, confidently, at home.", {
    x: 0.7, y: 4.78, w: 8.4, h: 0.6,
    fontSize: 13, color: "FFFFFFCC", italic: true,
    align: "left", margin: 0,
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 2 – WHAT IS THE PELVIC FLOOR?
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  bgRect(s, C.cream);

  pill(s, "FOUNDATIONS", 0.55, 0.25);
  s.addText("What Is the Pelvic Floor?", {
    x: 0.55, y: 0.72, w: 9, h: 0.6,
    fontSize: 28, bold: true, color: C.dark, margin: 0,
  });
  accentBar(s, C.teal, 3.5);

  // left text column
  const facts = [
    "A hammock-shaped group of muscles at the base of the pelvis",
    "Supports the bladder, uterus, and bowel",
    "Controls bladder and bowel openings (sphincter function)",
    "Works with your core, diaphragm, and glutes — not in isolation",
    "Can weaken from pregnancy, childbirth, ageing, or high-impact training",
  ];
  const factItems = facts.map(f => ({
    text: "  " + f,
    options: { breakLine: true, fontSize: 12.5, color: C.dark, bullet: { type: "bullet", code: "25B6", color: C.coral } },
  }));
  factItems[factItems.length - 1].options.breakLine = false;
  s.addText(factItems, {
    x: 0.55, y: 1.4, w: 5.5, h: 3.6,
    valign: "top", lineSpacingMultiple: 1.6,
  });

  // right info box
  s.addShape(pres.ShapeType.roundRect, {
    x: 6.3, y: 1.35, w: 3.3, h: 3.7,
    fill: { color: C.teal },
    line: { type: "none" },
    rectRadius: 0.2,
  });
  s.addText("KEY STATS", {
    x: 6.3, y: 1.55, w: 3.3, h: 0.4,
    fontSize: 11, bold: true, color: C.tealLight, charSpacing: 4,
    align: "center", margin: 0,
  });
  const stats = [
    ["~32%", "of women experience pelvic floor dysfunction"],
    ["1 in 3", "women leak urine during exercise"],
    ["12 wks", "typical time to notice improvement with consistent training"],
  ];
  let sy = 2.05;
  for (const [num, label] of stats) {
    s.addText(num, {
      x: 6.45, y: sy, w: 3.0, h: 0.5,
      fontSize: 26, bold: true, color: C.white, align: "center", margin: 0,
    });
    s.addText(label, {
      x: 6.45, y: sy + 0.48, w: 3.0, h: 0.45,
      fontSize: 10, color: "FFFFFFCC", align: "center", margin: 0,
    });
    sy += 1.05;
    if (sy < 4.8) {
      s.addShape(pres.ShapeType.rect, {
        x: 6.7, y: sy - 0.1, w: 2.6, h: 0.03,
        fill: { color: "FFFFFF22" }, line: { type: "none" },
      });
    }
  }
}

// ════════════════════════════════════════════════════════════════
// SLIDE 3 – SIGNS OF A WEAK PELVIC FLOOR
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  bgRect(s, C.cream);

  pill(s, "AWARENESS", 0.55, 0.25);
  s.addText("Signs Your Pelvic Floor Needs Attention", {
    x: 0.55, y: 0.72, w: 9, h: 0.6,
    fontSize: 26, bold: true, color: C.dark, margin: 0,
  });
  accentBar(s, C.coral, 4.0);

  const signs = [
    { icon: "💧", title: "Leaking",        desc: "Urine leaks when coughing, sneezing, laughing or jumping" },
    { icon: "🏃", title: "Exercise issues", desc: "Leaking or pressure during running, jumping jacks, or HIIT" },
    { icon: "🎯", title: "Poor control",   desc: "Urgent need to urinate that's hard to hold back" },
    { icon: "⬇️", title: "Heaviness",       desc: "Feeling of heaviness or bulging in the pelvic area" },
    { icon: "💔", title: "Discomfort",      desc: "Pelvic or lower back pain that doesn't resolve" },
    { icon: "🔇", title: "Low awareness",  desc: "Difficulty feeling or engaging pelvic floor muscles at all" },
  ];

  let col = 0, row = 0;
  for (const sign of signs) {
    const x = 0.55 + col * 3.2;
    const y = 1.55 + row * 1.75;
    s.addShape(pres.ShapeType.roundRect, {
      x, y, w: 3.0, h: 1.55,
      fill: { color: C.white },
      line: { color: C.creamDark, pt: 1 },
      rectRadius: 0.15,
    });
    iconCircle(s, sign.icon, x + 0.15, y + 0.12, 0.48, C.teal + "22");
    s.addText(sign.title, {
      x: x + 0.72, y: y + 0.12, w: 2.1, h: 0.32,
      fontSize: 12, bold: true, color: C.teal, margin: 0, valign: "middle",
    });
    s.addText(sign.desc, {
      x: x + 0.12, y: y + 0.52, w: 2.76, h: 0.88,
      fontSize: 10, color: C.midGrey, valign: "top", margin: 0,
    });
    col++;
    if (col > 2) { col = 0; row++; }
  }
}

// ════════════════════════════════════════════════════════════════
// SLIDE 4 – HOW TO FIND YOUR PELVIC FLOOR
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  bgRect(s, C.dark);

  s.addShape(pres.ShapeType.ellipse, { x: 7.5, y: -1.0, w: 4.0, h: 4.0, fill: { color: "FFFFFF05" }, line: { type: "none" } });

  pill(s, "STEP 1", 0.55, 0.25);
  s.addText("How to Find Your Pelvic Floor Muscles", {
    x: 0.55, y: 0.72, w: 9, h: 0.6,
    fontSize: 26, bold: true, color: C.white, margin: 0,
  });
  accentBar(s, C.tealLight, 3.8);

  s.addText("Before you train it — find it.", {
    x: 0.55, y: 1.28, w: 8, h: 0.45,
    fontSize: 14, italic: true, color: C.tealLight, margin: 0,
  });

  const steps = [
    { n: "01", title: "Sit or lie comfortably", body: "Find a relaxed position — lying on your back with knees bent works well." },
    { n: "02", title: "Imagine stopping urine flow", body: "Gently squeeze as if stopping yourself mid-stream. That squeeze is your pelvic floor." },
    { n: "03", title: "Check: nothing else should move", body: "Your glutes, thighs, and belly should stay relaxed. Only the pelvic floor contracts." },
    { n: "04", title: "Breathe normally", body: "Never hold your breath. Breathe out as you squeeze, breathe in as you relax." },
  ];

  let sy = 1.8;
  for (const step of steps) {
    s.addShape(pres.ShapeType.roundRect, {
      x: 0.55, y: sy, w: 9.1, h: 0.82,
      fill: { color: "FFFFFF08" },
      line: { color: "FFFFFF15", pt: 1 },
      rectRadius: 0.12,
    });
    s.addText(step.n, {
      x: 0.7, y: sy, w: 0.7, h: 0.82,
      fontSize: 20, bold: true, color: C.coral,
      align: "center", valign: "middle", margin: 0,
    });
    s.addShape(pres.ShapeType.rect, {
      x: 1.5, y: sy + 0.2, w: 0.03, h: 0.42,
      fill: { color: "FFFFFF25" }, line: { type: "none" },
    });
    s.addText(step.title, {
      x: 1.65, y: sy + 0.05, w: 3.5, h: 0.34,
      fontSize: 12, bold: true, color: C.white, valign: "middle", margin: 0,
    });
    s.addText(step.body, {
      x: 1.65, y: sy + 0.38, w: 7.5, h: 0.36,
      fontSize: 10.5, color: "FFFFFFBB", valign: "top", margin: 0,
    });
    sy += 0.95;
  }
}

// ════════════════════════════════════════════════════════════════
// SLIDE 5 – FOUNDATIONAL EXERCISES
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  bgRect(s, C.cream);

  pill(s, "EXERCISES", 0.55, 0.25);
  s.addText("Foundational Exercises", {
    x: 0.55, y: 0.72, w: 9, h: 0.6,
    fontSize: 28, bold: true, color: C.dark, margin: 0,
  });
  accentBar(s, C.tealLight, 2.8);

  exerciseCard(s, "🌟", "Kegel Hold",
    ["Lie or sit comfortably", "Squeeze pelvic floor & hold 5-10 sec", "Relax fully for 5 sec", "Repeat 10 times × 3 sets daily", "Build up gradually to 10-sec holds"],
    0.35, 1.35, 4.35, 3.8);

  exerciseCard(s, "⚡", "Quick Flicks",
    ["Same position as Kegel", "Squeeze tightly for 1 sec", "Release fully — this is key", "Do 10 quick contractions", "Rest 30 sec, repeat 3 sets"],
    5.05, 1.35, 4.35, 3.8);

  s.addText("💡  Always fully relax between contractions — the release is as important as the squeeze.", {
    x: 0.35, y: 5.22, w: 9.3, h: 0.3,
    fontSize: 10, color: C.coral, italic: true, margin: 0,
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 6 – FUNCTIONAL STRENGTH EXERCISES
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  bgRect(s, C.cream);

  pill(s, "BUILD STRENGTH", 0.55, 0.25);
  s.addText("Functional Strength Exercises", {
    x: 0.55, y: 0.72, w: 9, h: 0.6,
    fontSize: 28, bold: true, color: C.dark, margin: 0,
  });
  accentBar(s, C.coral, 3.5);

  const exercises = [
    {
      emoji: "🌉", title: "Glute Bridge",
      steps: ["Lie on back, knees bent, feet hip-width", "Exhale & squeeze pelvic floor", "Lift hips to form a straight line", "Hold 3-5 sec, lower slowly", "10-15 reps × 3 sets"],
      x: 0.35, y: 1.35,
    },
    {
      emoji: "🧘", title: "Deep Squat",
      steps: ["Stand feet shoulder-width apart", "Lower into a deep squat (3-5 sec)", "Feel pelvic floor lengthen/relax", "Drive up, squeezing pelvic floor", "8-12 reps × 3 sets"],
      x: 3.45, y: 1.35,
    },
    {
      emoji: "🐦", title: "Bird Dog",
      steps: ["Start on all fours, neutral spine", "Exhale & gently engage pelvic floor", "Extend opposite arm & leg", "Hold 5 sec, alternate sides", "8-10 reps per side × 3 sets"],
      x: 6.55, y: 1.35,
    },
  ];
  for (const ex of exercises) {
    exerciseCard(s, ex.emoji, ex.title, ex.steps, ex.x, ex.y, 2.9, 3.85);
  }

  s.addText("Tip: Connect your breath to movement — exhale on effort, engage pelvic floor at the same time.", {
    x: 0.35, y: 5.22, w: 9.3, h: 0.3,
    fontSize: 10, color: C.midGrey, italic: true, margin: 0,
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 7 – PROGRESSIVE 4-WEEK PLAN
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  bgRect(s, C.dark);

  pill(s, "YOUR PLAN", 0.55, 0.25);
  s.addText("4-Week Progressive Programme", {
    x: 0.55, y: 0.72, w: 9, h: 0.6,
    fontSize: 27, bold: true, color: C.white, margin: 0,
  });
  accentBar(s, C.coral, 3.4);

  const weeks = [
    { w: "Week 1", label: "Awareness", color: C.tealLight, tasks: "Kegel holds × 5 sec / 10 reps • Quick flicks × 10 • 3×/day • Focus: finding the muscles" },
    { w: "Week 2", label: "Foundation", color: "4CC9B0", tasks: "Kegel holds × 8 sec / 10 reps • Quick flicks × 15 • Glute bridge 3×10 • 3×/day" },
    { w: "Week 3", label: "Integration", color: C.coral, tasks: "Kegel holds × 10 sec • Deep squat 3×10 • Bird dog 3×8/side • Combine with daily movement" },
    { w: "Week 4", label: "Challenge",  color: "E8963C", tasks: "Full circuit: holds + flicks + bridge + squat + bird dog • Increase reps by 20% • Add resistance band" },
  ];

  let wy = 1.45;
  for (const wk of weeks) {
    s.addShape(pres.ShapeType.roundRect, {
      x: 0.55, y: wy, w: 9.1, h: 0.88,
      fill: { color: "FFFFFF0A" },
      line: { color: "FFFFFF12", pt: 1 },
      rectRadius: 0.12,
    });
    s.addShape(pres.ShapeType.roundRect, {
      x: 0.55, y: wy, w: 1.55, h: 0.88,
      fill: { color: wk.color },
      line: { type: "none" },
      rectRadius: 0.12,
    });
    s.addShape(pres.ShapeType.rect, {
      x: 0.9, y: wy, w: 0.65, h: 0.88,
      fill: { color: wk.color },
      line: { type: "none" },
    });
    s.addText(wk.w, {
      x: 0.55, y: wy, w: 1.55, h: 0.42,
      fontSize: 11, bold: true, color: C.white, align: "center", valign: "middle", margin: 0,
    });
    s.addText(wk.label.toUpperCase(), {
      x: 0.55, y: wy + 0.42, w: 1.55, h: 0.46,
      fontSize: 8.5, bold: true, color: "FFFFFFCC", charSpacing: 2,
      align: "center", valign: "middle", margin: 0,
    });
    s.addText(wk.tasks, {
      x: 2.25, y: wy + 0.1, w: 7.2, h: 0.68,
      fontSize: 10.5, color: "FFFFFFDD", valign: "middle", margin: 0,
    });
    wy += 1.0;
  }

  s.addText("Rest days matter — aim for 3-5 sessions per week, not every day.", {
    x: 0.55, y: 5.3, w: 9.1, h: 0.28,
    fontSize: 10, color: C.tealLight, italic: true, margin: 0,
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 8 – BREATHING & CORE CONNECTION
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  bgRect(s, C.cream);

  pill(s, "PRO TIP", 0.55, 0.25);
  s.addText("The Breathing-Core-Pelvic Floor Connection", {
    x: 0.55, y: 0.72, w: 9.1, h: 0.65,
    fontSize: 24, bold: true, color: C.dark, margin: 0,
  });
  accentBar(s, C.teal, 4.2);

  // left diagram-style visual
  const cycle = [
    { icon: "🫁", label: "INHALE",   desc: "Diaphragm drops\nPelvic floor lengthens\n& softens downward" },
    { icon: "💨", label: "EXHALE",   desc: "Diaphragm rises\nPelvic floor lifts\n& engages upward" },
    { icon: "💪", label: "EFFORT",   desc: "Always exhale on\nexertion (lift, push,\nsqueeze)" },
  ];
  let cx = 0.55;
  for (const c of cycle) {
    s.addShape(pres.ShapeType.roundRect, {
      x: cx, y: 1.5, w: 2.7, h: 3.6,
      fill: { color: C.teal },
      line: { type: "none" },
      rectRadius: 0.18,
    });
    s.addText(c.icon, { x: cx, y: 1.65, w: 2.7, h: 0.7, fontSize: 30, align: "center", valign: "middle", margin: 0 });
    s.addText(c.label, {
      x: cx + 0.1, y: 2.45, w: 2.5, h: 0.38,
      fontSize: 12, bold: true, color: C.white, charSpacing: 3,
      align: "center", valign: "middle", margin: 0,
    });
    s.addShape(pres.ShapeType.rect, { x: cx + 0.8, y: 2.88, w: 1.1, h: 0.04, fill: { color: C.coral }, line: { type: "none" } });
    s.addText(c.desc, {
      x: cx + 0.1, y: 2.98, w: 2.5, h: 1.8,
      fontSize: 11, color: "FFFFFFDD", align: "center", valign: "top", margin: 0,
    });
    if (cx < 5.5) {
      s.addText("→", { x: cx + 2.7, y: 2.9, w: 0.35, h: 0.5, fontSize: 22, color: C.coral, align: "center", valign: "middle", margin: 0 });
    }
    cx += 3.12;
  }

  s.addShape(pres.ShapeType.roundRect, {
    x: 0.55, y: 5.12, w: 9.1, h: 0.38,
    fill: { color: C.teal + "22" },
    line: { color: C.teal, pt: 1 },
    rectRadius: 0.1,
  });
  s.addText("360° Breathing Tip: As you inhale, feel your ribcage expand 360° — front, sides AND back. Avoid just lifting the chest.", {
    x: 0.65, y: 5.12, w: 9.0, h: 0.38,
    fontSize: 10, color: C.dark, valign: "middle", margin: 0,
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 9 – WHAT TO AVOID
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  bgRect(s, C.cream);

  pill(s, "SAFETY", 0.55, 0.25);
  s.addText("What to Avoid & When to Seek Help", {
    x: 0.55, y: 0.72, w: 9, h: 0.6,
    fontSize: 27, bold: true, color: C.dark, margin: 0,
  });
  accentBar(s, C.coral, 3.8);

  const avoids = [
    { icon: "🚫", text: "Overdoing Kegels — a tight pelvic floor is NOT a strong one; balance with relaxation" },
    { icon: "🚫", text: "Holding your breath during exercise — always breathe through movement" },
    { icon: "🚫", text: "Heavy lifting or high-impact exercise before re-establishing pelvic floor control" },
    { icon: "🚫", text: "Stopping mid-flow to 'test' pelvic floor — this can disrupt bladder muscle signals" },
    { icon: "🚫", text: "Pushing through pain — pelvic pain during exercise needs professional assessment" },
  ];
  let ay = 1.42;
  for (const av of avoids) {
    s.addShape(pres.ShapeType.roundRect, {
      x: 0.55, y: ay, w: 5.6, h: 0.62,
      fill: { color: C.white },
      line: { color: C.coral + "55", pt: 1 },
      rectRadius: 0.1,
    });
    s.addText(av.icon, { x: 0.62, y: ay, w: 0.55, h: 0.62, fontSize: 16, align: "center", valign: "middle", margin: 0 });
    s.addText(av.text, {
      x: 1.22, y: ay, w: 4.8, h: 0.62,
      fontSize: 10.5, color: C.dark, valign: "middle", margin: 0,
    });
    ay += 0.74;
  }

  // see a physio box
  s.addShape(pres.ShapeType.roundRect, {
    x: 6.45, y: 1.42, w: 3.2, h: 3.72,
    fill: { color: C.teal },
    line: { type: "none" },
    rectRadius: 0.18,
  });
  s.addText("👩‍⚕️", { x: 6.45, y: 1.6, w: 3.2, h: 0.7, fontSize: 36, align: "center", valign: "middle", margin: 0 });
  s.addText("See a Pelvic\nFloor Physio if:", {
    x: 6.55, y: 2.38, w: 3.0, h: 0.65,
    fontSize: 13, bold: true, color: C.white, align: "center", margin: 0,
  });
  const physioReasons = ["Symptoms persist > 3 months", "Pain during/after sex", "Symptoms worsening", "Post-surgery recovery", "Post-partum, any stage"];
  const phItems = physioReasons.map((p, i) => ({
    text: p,
    options: { breakLine: i < physioReasons.length - 1, fontSize: 10.5, color: "FFFFFFDD", bullet: { type: "bullet", code: "25CF", color: C.coral } },
  }));
  s.addText(phItems, {
    x: 6.7, y: 3.1, w: 2.8, h: 2.0,
    valign: "top", lineSpacingMultiple: 1.45,
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 10 – DAILY HABITS
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  bgRect(s, C.dark);

  pill(s, "LIFESTYLE", 0.55, 0.25);
  s.addText("Daily Habits for a Stronger Pelvic Floor", {
    x: 0.55, y: 0.72, w: 9, h: 0.6,
    fontSize: 26, bold: true, color: C.white, margin: 0,
  });
  accentBar(s, C.tealLight, 3.8);

  const habits = [
    { icon: "💧", title: "Stay Hydrated",      body: "Aim for 6-8 glasses of water daily. Concentrated urine irritates the bladder." },
    { icon: "🥗", title: "High-Fibre Diet",     body: "Prevents constipation — straining is one of the top causes of pelvic floor damage." },
    { icon: "🧘", title: "Posture Awareness",   body: "Sitting slumped collapses the pelvic floor. Sit tall, feet flat on the floor." },
    { icon: "🏋️", title: "Load Management",     body: "Exhale and brace (not bear-down) when lifting anything heavy — shopping, kids, weights." },
    { icon: "😴", title: "Quality Sleep",        body: "Rest and recovery allow muscle repair and hormonal regulation." },
    { icon: "📱", title: "Use a Reminder App",  body: "Set 3 daily reminders for your pelvic floor exercises. Consistency beats intensity." },
  ];

  let hcol = 0, hrow = 0;
  for (const h of habits) {
    const hx = 0.55 + hcol * 3.22;
    const hy = 1.5 + hrow * 1.88;
    s.addShape(pres.ShapeType.roundRect, {
      x: hx, y: hy, w: 3.0, h: 1.68,
      fill: { color: "FFFFFF0D" },
      line: { color: "FFFFFF14", pt: 1 },
      rectRadius: 0.15,
    });
    s.addText(h.icon, { x: hx + 0.12, y: hy + 0.12, w: 0.55, h: 0.55, fontSize: 22, align: "center", valign: "middle", margin: 0 });
    s.addText(h.title, {
      x: hx + 0.72, y: hy + 0.15, w: 2.15, h: 0.38,
      fontSize: 11.5, bold: true, color: C.tealLight, valign: "middle", margin: 0,
    });
    s.addText(h.body, {
      x: hx + 0.15, y: hy + 0.6, w: 2.72, h: 0.98,
      fontSize: 10, color: "FFFFFFCC", valign: "top", margin: 0,
    });
    hcol++;
    if (hcol > 2) { hcol = 0; hrow++; }
  }
}

// ════════════════════════════════════════════════════════════════
// SLIDE 11 – CLOSING / CALL TO ACTION
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  bgRect(s, C.teal);

  s.addShape(pres.ShapeType.ellipse, { x: -1.0, y: -1.0, w: 4.0, h: 4.0, fill: { color: "FFFFFF08" }, line: { type: "none" } });
  s.addShape(pres.ShapeType.ellipse, { x: 8.2, y: 3.2,  w: 3.0, h: 3.0, fill: { color: "FFFFFF08" }, line: { type: "none" } });

  s.addText("You've Got This. 💚", {
    x: 0.7, y: 1.0, w: 8.5, h: 0.75,
    fontSize: 38, bold: true, color: C.white, align: "center", margin: 0,
  });
  s.addShape(pres.ShapeType.rect, {
    x: 3.8, y: 1.9, w: 2.4, h: 0.07,
    fill: { color: C.coral }, line: { type: "none" },
  });
  s.addText("Your pelvic floor is trainable at any age. Start with awareness, build with consistency,\nand listen to your body every step of the way.", {
    x: 0.7, y: 2.1, w: 8.5, h: 0.85,
    fontSize: 13.5, color: "FFFFFFDD", align: "center", margin: 0,
  });

  const actions = ["🎯  Do your first 10 Kegels today", "📅  Book 3 sessions per week", "📲  Download a pelvic floor reminder app", "👩‍⚕️  See a physio if unsure where to start"];
  const actItems = actions.map((a, i) => ({
    text: a,
    options: { breakLine: i < actions.length - 1, fontSize: 12, color: C.white, bullet: false },
  }));
  s.addShape(pres.ShapeType.roundRect, {
    x: 2.2, y: 3.1, w: 5.5, h: 2.1,
    fill: { color: "FFFFFF15" },
    line: { color: "FFFFFF30", pt: 1 },
    rectRadius: 0.2,
  });
  s.addText(actItems, {
    x: 2.5, y: 3.2, w: 5.0, h: 1.9,
    valign: "middle", lineSpacingMultiple: 1.65,
  });
}

// ─── WRITE FILE ───────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/pelvic-floor-presentation/Pelvic_Floor_Strength.pptx" })
  .then(() => console.log("PPTX saved successfully"))
  .catch(err => { console.error(err); process.exit(1); });
Writing File

~/pelvic-floor-presentation/pelvic_floor_presentation.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Restoring Pelvic Floor Muscle Strength</title>
<style>
  :root {
    --teal:       #1A7A6E;
    --teal-light: #26A699;
    --cream:      #F5F0E8;
    --cream-dark: #EAE3D2;
    --coral:      #E05C4B;
    --dark:       #1C2B2A;
    --mid-grey:   #6B7B7A;
    --white:      #FFFFFF;
  }
  * { box-sizing: border-box; margin: 0; padding: 0; }

  body {
    font-family: 'Segoe UI', system-ui, sans-serif;
    background: var(--cream);
    color: var(--dark);
    overflow: hidden;
    height: 100vh;
    width: 100vw;
  }

  /* ─ SLIDE CONTAINER ─ */
  .deck {
    width: 100%; height: 100vh;
    position: relative;
  }
  .slide {
    position: absolute; inset: 0;
    opacity: 0; pointer-events: none;
    transition: opacity 0.45s ease, transform 0.45s ease;
    transform: translateX(60px);
    padding: clamp(24px, 4vw, 52px);
    display: flex; flex-direction: column; justify-content: center;
    overflow: hidden;
  }
  .slide.active {
    opacity: 1; pointer-events: all;
    transform: translateX(0);
  }
  .slide.exit {
    opacity: 0; transform: translateX(-60px);
  }

  /* ─ BACKGROUNDS ─ */
  .bg-teal   { background: var(--teal); }
  .bg-cream  { background: var(--cream); }
  .bg-dark   { background: var(--dark); }

  /* ─ DECORATION CIRCLES ─ */
  .deco-circle {
    position: absolute; border-radius: 50%;
    pointer-events: none;
    background: rgba(255,255,255,0.06);
  }

  /* ─ NAV ─ */
  .nav {
    position: fixed; bottom: 24px; left: 50%;
    transform: translateX(-50%);
    display: flex; align-items: center; gap: 16px;
    z-index: 100;
    background: rgba(28,43,42,0.75);
    backdrop-filter: blur(10px);
    border-radius: 50px;
    padding: 10px 24px;
    box-shadow: 0 4px 24px rgba(0,0,0,0.25);
  }
  .nav button {
    background: none; border: none; cursor: pointer;
    color: #fff; font-size: 18px; width: 32px; height: 32px;
    border-radius: 50%; display: flex; align-items: center; justify-content: center;
    transition: background 0.2s;
  }
  .nav button:hover { background: rgba(255,255,255,0.15); }
  .nav button:disabled { opacity: 0.3; cursor: default; }
  .nav .counter {
    font-size: 13px; color: rgba(255,255,255,0.8); min-width: 50px; text-align: center;
  }
  .nav .dots {
    display: flex; gap: 6px; align-items: center;
  }
  .nav .dots .dot {
    width: 7px; height: 7px; border-radius: 50%;
    background: rgba(255,255,255,0.35);
    transition: all 0.25s; cursor: pointer;
  }
  .nav .dots .dot.active {
    background: var(--teal-light); width: 18px; border-radius: 4px;
  }

  /* ─ PILL LABEL ─ */
  .pill {
    display: inline-block;
    background: var(--coral);
    color: #fff;
    font-size: 11px; font-weight: 700;
    letter-spacing: 2px;
    padding: 4px 14px; border-radius: 20px;
    margin-bottom: 12px;
    width: fit-content;
  }

  /* ─ HEADINGS ─ */
  h1 { font-size: clamp(28px, 5vw, 52px); line-height: 1.1; }
  h2 { font-size: clamp(20px, 3vw, 32px); line-height: 1.2; }
  h3 { font-size: 15px; }

  .accent-bar {
    height: 5px; width: 120px; background: var(--teal-light);
    border-radius: 3px; margin: 10px 0 18px;
  }
  .accent-bar.coral { background: var(--coral); }

  /* ─ CARDS ─ */
  .cards-grid {
    display: grid;
    gap: 16px;
  }
  .card {
    background: #fff;
    border-radius: 16px;
    overflow: hidden;
    box-shadow: 0 4px 20px rgba(0,0,0,0.08);
    display: flex; flex-direction: column;
  }
  .card-header {
    background: var(--teal);
    color: #fff;
    padding: 12px 16px;
    font-weight: 700; font-size: 14px;
    display: flex; align-items: center; gap: 8px;
  }
  .card-body {
    padding: 14px 16px;
    flex: 1;
  }
  .card-body ol {
    padding-left: 18px;
    font-size: 13px;
    line-height: 1.7;
    color: var(--dark);
  }

  /* ─ STEP ROWS ─ */
  .step-row {
    background: rgba(255,255,255,0.07);
    border: 1px solid rgba(255,255,255,0.1);
    border-radius: 12px;
    padding: 12px 16px;
    display: flex; align-items: flex-start; gap: 14px;
    margin-bottom: 10px;
  }
  .step-num {
    font-size: 22px; font-weight: 900;
    color: var(--coral); min-width: 36px;
    line-height: 1.1;
  }
  .step-title {
    font-weight: 700; color: #fff; font-size: 13px;
    margin-bottom: 4px;
  }
  .step-body { font-size: 12px; color: rgba(255,255,255,0.75); line-height: 1.5; }

  /* ─ WEEK ROWS ─ */
  .week-row {
    background: rgba(255,255,255,0.07);
    border: 1px solid rgba(255,255,255,0.1);
    border-radius: 12px;
    margin-bottom: 10px;
    display: flex; overflow: hidden;
    align-items: stretch;
  }
  .week-label {
    padding: 12px 18px;
    display: flex; flex-direction: column;
    align-items: center; justify-content: center;
    color: #fff; min-width: 90px;
    font-weight: 700; font-size: 13px; text-align: center;
  }
  .week-label span { font-size: 9px; letter-spacing: 2px; opacity: 0.85; margin-top: 3px; }
  .week-tasks {
    padding: 14px 18px;
    font-size: 12.5px; color: rgba(255,255,255,0.85);
    line-height: 1.6; display: flex; align-items: center;
  }

  /* ─ STAT BOX ─ */
  .stat-box {
    background: var(--teal);
    border-radius: 16px;
    padding: 20px 18px;
    display: flex; flex-direction: column; gap: 14px;
  }
  .stat-item { text-align: center; }
  .stat-item .num { font-size: 28px; font-weight: 900; color: #fff; line-height: 1; }
  .stat-item .lbl { font-size: 11px; color: rgba(255,255,255,0.75); line-height: 1.4; margin-top: 4px; }
  .stat-divider { height: 1px; background: rgba(255,255,255,0.15); }

  /* ─ SIGN CARDS ─ */
  .signs-grid {
    display: grid; grid-template-columns: repeat(3, 1fr);
    gap: 12px;
  }
  .sign-card {
    background: #fff; border-radius: 14px;
    padding: 14px;
    border: 1px solid var(--cream-dark);
    box-shadow: 0 2px 10px rgba(0,0,0,0.05);
  }
  .sign-icon-wrap {
    width: 40px; height: 40px; border-radius: 50%;
    background: rgba(26,122,110,0.12);
    display: flex; align-items: center; justify-content: center;
    font-size: 18px; margin-bottom: 8px;
  }
  .sign-title { font-size: 12px; font-weight: 700; color: var(--teal); margin-bottom: 4px; }
  .sign-desc  { font-size: 11px; color: var(--mid-grey); line-height: 1.5; }

  /* ─ HABIT CARDS ─ */
  .habit-card {
    background: rgba(255,255,255,0.08);
    border: 1px solid rgba(255,255,255,0.1);
    border-radius: 14px;
    padding: 14px;
    display: flex; gap: 12px; align-items: flex-start;
  }
  .habit-icon { font-size: 22px; min-width: 28px; }
  .habit-title { font-weight: 700; color: var(--teal-light); font-size: 13px; margin-bottom: 4px; }
  .habit-body  { font-size: 11.5px; color: rgba(255,255,255,0.8); line-height: 1.5; }

  /* ─ AVOID ROWS ─ */
  .avoid-row {
    background: #fff;
    border: 1px solid rgba(224,92,75,0.3);
    border-radius: 12px;
    padding: 10px 14px;
    display: flex; align-items: center; gap: 12px;
    margin-bottom: 8px;
    font-size: 12px; color: var(--dark); line-height: 1.5;
  }
  .avoid-icon { font-size: 18px; }

  /* ─ PHYSIO BOX ─ */
  .physio-box {
    background: var(--teal);
    border-radius: 16px;
    padding: 20px 18px; text-align: center; color: #fff;
  }
  .physio-box h3 { font-size: 14px; margin: 10px 0 8px; }
  .physio-box ul { list-style: none; font-size: 12px; line-height: 1.8; color: rgba(255,255,255,0.85); }
  .physio-box ul li::before { content: "◆  "; color: var(--coral); }

  /* ─ BREATH CARDS ─ */
  .breath-cards {
    display: grid; grid-template-columns: repeat(3, 1fr);
    gap: 14px;
  }
  .breath-card {
    background: var(--teal);
    border-radius: 16px;
    padding: 24px 16px;
    text-align: center; color: #fff;
  }
  .breath-emoji  { font-size: 36px; }
  .breath-label  { font-size: 12px; font-weight: 700; letter-spacing: 3px; margin: 12px 0 8px; }
  .breath-divider { height: 3px; width: 50px; background: var(--coral); margin: 0 auto 10px; border-radius: 2px; }
  .breath-desc   { font-size: 12px; color: rgba(255,255,255,0.85); line-height: 1.6; }

  /* ─ TITLE SLIDE ─ */
  .title-tagline {
    font-size: clamp(12px, 1.5vw, 15px);
    color: rgba(255,255,255,0.8); font-style: italic;
    margin-top: 18px; max-width: 700px;
  }
  .title-divider {
    height: 5px; width: 100px; background: var(--coral);
    border-radius: 3px; margin: 16px 0;
  }

  /* ─ CTA SLIDE ─ */
  .cta-actions {
    background: rgba(255,255,255,0.12);
    border: 1px solid rgba(255,255,255,0.25);
    border-radius: 18px;
    padding: 22px 30px;
    margin: 0 auto;
    max-width: 550px;
    width: 100%;
  }
  .cta-actions li {
    font-size: 14px; color: #fff; line-height: 2.0;
    list-style: none;
  }

  /* ─ PROGRESS BAR ─ */
  .progress-bar {
    position: fixed; top: 0; left: 0;
    height: 3px; background: var(--coral);
    transition: width 0.4s ease;
    z-index: 200;
  }

  /* ─ KEYBOARD HINT ─ */
  .kb-hint {
    position: fixed; bottom: 24px; right: 28px;
    font-size: 11px; color: rgba(255,255,255,0.4);
    z-index: 100;
  }

  /* ─ NOTE BOX ─ */
  .note-box {
    background: rgba(26,122,110,0.12);
    border: 1px solid var(--teal);
    border-radius: 10px;
    padding: 10px 14px;
    font-size: 11px; color: var(--dark);
    margin-top: 12px;
  }
  .note-box-dark {
    background: rgba(255,255,255,0.06);
    border: 1px solid rgba(255,255,255,0.15);
    border-radius: 10px;
    padding: 10px 14px;
    font-size: 11px; color: rgba(255,255,255,0.7);
    margin-top: 14px;
  }

  /* ─ TWO-COL LAYOUT ─ */
  .two-col { display: grid; grid-template-columns: 1fr auto; gap: 24px; align-items: start; }
  .three-col { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
  .two-col-equal { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }

  /* ─ BULLET LIST ─ */
  .fact-list { list-style: none; padding: 0; }
  .fact-list li {
    display: flex; align-items: flex-start; gap: 10px;
    font-size: 13px; line-height: 1.6; color: var(--dark);
    margin-bottom: 8px;
  }
  .fact-list li::before {
    content: "▶"; color: var(--coral); font-size: 9px; margin-top: 4px; flex-shrink: 0;
  }

  /* ─ SLIDE-SPECIFIC TWEAKS ─ */
  #slide-1 h1 { color: #fff; }
  #slide-1 .pill { background: rgba(255,255,255,0.18); color: var(--teal-light); letter-spacing: 4px; }

  .avoid-layout { display: grid; grid-template-columns: 1fr 240px; gap: 20px; align-items: start; }

  @media (max-width: 768px) {
    .signs-grid { grid-template-columns: repeat(2, 1fr); }
    .three-col  { grid-template-columns: 1fr 1fr; }
    .two-col    { grid-template-columns: 1fr; }
    .avoid-layout { grid-template-columns: 1fr; }
    .breath-cards { grid-template-columns: 1fr; }
    .cards-grid   { grid-template-columns: 1fr; }
  }
</style>
</head>
<body>

<div class="progress-bar" id="progressBar"></div>
<div class="kb-hint">← → keys to navigate</div>

<div class="deck" id="deck">

  <!-- ══════════════════════════════════════════════════════ -->
  <!-- SLIDE 1 – TITLE -->
  <!-- ══════════════════════════════════════════════════════ -->
  <div class="slide bg-teal active" id="slide-1">
    <div class="deco-circle" style="width:380px;height:380px;right:-60px;top:-80px;"></div>
    <div class="deco-circle" style="width:200px;height:200px;right:80px;top:60px;background:rgba(255,255,255,0.04);"></div>
    <div class="deco-circle" style="width:240px;height:240px;left:-60px;bottom:-40px;"></div>

    <div class="pill">WOMEN'S FITNESS</div>
    <h1>Restoring<br>Pelvic Floor<br>Muscle Strength</h1>
    <div class="title-divider"></div>
    <p class="title-tagline">Your step-by-step guide to rebuilding core pelvic strength — safely, confidently, at home.</p>
  </div>

  <!-- ══════════════════════════════════════════════════════ -->
  <!-- SLIDE 2 – WHAT IS THE PELVIC FLOOR? -->
  <!-- ══════════════════════════════════════════════════════ -->
  <div class="slide bg-cream" id="slide-2">
    <div class="pill">FOUNDATIONS</div>
    <h2>What Is the Pelvic Floor?</h2>
    <div class="accent-bar"></div>

    <div class="two-col">
      <ul class="fact-list">
        <li>A hammock-shaped group of muscles at the base of the pelvis</li>
        <li>Supports the bladder, uterus, and bowel</li>
        <li>Controls bladder and bowel openings (sphincter function)</li>
        <li>Works with your core, diaphragm, and glutes — not in isolation</li>
        <li>Can weaken from pregnancy, childbirth, ageing, or high-impact training</li>
        <li>Overlapping sheets of muscle &amp; connective tissue make it strong — but also vulnerable to damage</li>
      </ul>

      <div class="stat-box">
        <div class="stat-item">
          <div class="num">~32%</div>
          <div class="lbl">of women experience pelvic floor dysfunction</div>
        </div>
        <div class="stat-divider"></div>
        <div class="stat-item">
          <div class="num">1 in 3</div>
          <div class="lbl">women leak urine during exercise</div>
        </div>
        <div class="stat-divider"></div>
        <div class="stat-item">
          <div class="num">12 wks</div>
          <div class="lbl">typical time to notice improvement with consistent training</div>
        </div>
      </div>
    </div>
  </div>

  <!-- ══════════════════════════════════════════════════════ -->
  <!-- SLIDE 3 – SIGNS OF WEAKNESS -->
  <!-- ══════════════════════════════════════════════════════ -->
  <div class="slide bg-cream" id="slide-3">
    <div class="pill">AWARENESS</div>
    <h2>Signs Your Pelvic Floor Needs Attention</h2>
    <div class="accent-bar coral"></div>

    <div class="signs-grid">
      <div class="sign-card">
        <div class="sign-icon-wrap">💧</div>
        <div class="sign-title">Leaking</div>
        <div class="sign-desc">Urine leaks when coughing, sneezing, laughing, or jumping</div>
      </div>
      <div class="sign-card">
        <div class="sign-icon-wrap">🏃</div>
        <div class="sign-title">Exercise Issues</div>
        <div class="sign-desc">Leaking or pressure during running, jumping jacks, or HIIT workouts</div>
      </div>
      <div class="sign-card">
        <div class="sign-icon-wrap">🎯</div>
        <div class="sign-title">Poor Control</div>
        <div class="sign-desc">Urgent need to urinate that's difficult to hold back</div>
      </div>
      <div class="sign-card">
        <div class="sign-icon-wrap">⬇️</div>
        <div class="sign-title">Heaviness</div>
        <div class="sign-desc">Feeling of heaviness or bulging sensation in the pelvic area</div>
      </div>
      <div class="sign-card">
        <div class="sign-icon-wrap">💔</div>
        <div class="sign-title">Discomfort</div>
        <div class="sign-desc">Pelvic or lower back pain that doesn't resolve with rest</div>
      </div>
      <div class="sign-card">
        <div class="sign-icon-wrap">🔇</div>
        <div class="sign-title">Low Awareness</div>
        <div class="sign-desc">Difficulty feeling or engaging pelvic floor muscles at all</div>
      </div>
    </div>
  </div>

  <!-- ══════════════════════════════════════════════════════ -->
  <!-- SLIDE 4 – FIND YOUR PELVIC FLOOR -->
  <!-- ══════════════════════════════════════════════════════ -->
  <div class="slide bg-dark" id="slide-4">
    <div class="deco-circle" style="width:300px;height:300px;right:-40px;top:-60px;"></div>

    <div class="pill">STEP 1</div>
    <h2 style="color:#fff;">How to Find Your Pelvic Floor Muscles</h2>
    <div class="accent-bar" style="background:var(--teal-light);"></div>
    <p style="color:var(--teal-light);font-style:italic;font-size:14px;margin-bottom:16px;">Before you train it — find it.</p>

    <div>
      <div class="step-row">
        <div class="step-num">01</div>
        <div>
          <div class="step-title">Sit or lie comfortably</div>
          <div class="step-body">Find a relaxed position — lying on your back with knees bent works well for beginners.</div>
        </div>
      </div>
      <div class="step-row">
        <div class="step-num">02</div>
        <div>
          <div class="step-title">Imagine stopping urine flow</div>
          <div class="step-body">Gently squeeze as if stopping yourself mid-stream. That squeeze is your pelvic floor contracting.</div>
        </div>
      </div>
      <div class="step-row">
        <div class="step-num">03</div>
        <div>
          <div class="step-title">Check: nothing else should move</div>
          <div class="step-body">Your glutes, thighs, and belly should remain relaxed. Only the pelvic floor contracts — no bracing elsewhere.</div>
        </div>
      </div>
      <div class="step-row">
        <div class="step-num">04</div>
        <div>
          <div class="step-title">Breathe normally throughout</div>
          <div class="step-body">Never hold your breath. Breathe out as you squeeze, breathe in as you fully relax and let go.</div>
        </div>
      </div>
    </div>
  </div>

  <!-- ══════════════════════════════════════════════════════ -->
  <!-- SLIDE 5 – FOUNDATIONAL EXERCISES -->
  <!-- ══════════════════════════════════════════════════════ -->
  <div class="slide bg-cream" id="slide-5">
    <div class="pill">EXERCISES</div>
    <h2>Foundational Exercises</h2>
    <div class="accent-bar" style="background:var(--teal-light);"></div>

    <div class="two-col-equal">
      <div class="card">
        <div class="card-header">🌟 Kegel Hold</div>
        <div class="card-body">
          <ol>
            <li>Lie or sit comfortably</li>
            <li>Squeeze pelvic floor and hold 5-10 seconds</li>
            <li>Relax fully for 5 seconds — this is just as important</li>
            <li>Repeat 10 times × 3 sets daily</li>
            <li>Build up gradually to 10-second holds over 2-3 weeks</li>
          </ol>
        </div>
      </div>
      <div class="card">
        <div class="card-header">⚡ Quick Flicks</div>
        <div class="card-body">
          <ol>
            <li>Start in the same relaxed position</li>
            <li>Squeeze tightly and quickly for 1 second</li>
            <li>Release fully — do not rush onto the next rep</li>
            <li>Do 10 quick contractions in a row</li>
            <li>Rest 30 seconds, then repeat 3 sets</li>
          </ol>
        </div>
      </div>
    </div>

    <div class="note-box">
      💡 <strong>Key reminder:</strong> Always fully relax between contractions. The release phase is as important as the squeeze for building a balanced, functional pelvic floor.
    </div>
  </div>

  <!-- ══════════════════════════════════════════════════════ -->
  <!-- SLIDE 6 – FUNCTIONAL STRENGTH EXERCISES -->
  <!-- ══════════════════════════════════════════════════════ -->
  <div class="slide bg-cream" id="slide-6">
    <div class="pill">BUILD STRENGTH</div>
    <h2>Functional Strength Exercises</h2>
    <div class="accent-bar coral"></div>

    <div class="three-col">
      <div class="card">
        <div class="card-header">🌉 Glute Bridge</div>
        <div class="card-body">
          <ol>
            <li>Lie on back, knees bent, feet hip-width apart</li>
            <li>Exhale and squeeze pelvic floor</li>
            <li>Lift hips to form a straight line shoulder to knee</li>
            <li>Hold 3-5 seconds, lower slowly</li>
            <li>10-15 reps × 3 sets</li>
          </ol>
        </div>
      </div>
      <div class="card">
        <div class="card-header">🧘 Deep Squat</div>
        <div class="card-body">
          <ol>
            <li>Stand feet shoulder-width apart</li>
            <li>Lower slowly into a deep squat (3-5 seconds down)</li>
            <li>Feel pelvic floor lengthen and relax at the bottom</li>
            <li>Drive upward, squeezing pelvic floor as you rise</li>
            <li>8-12 reps × 3 sets</li>
          </ol>
        </div>
      </div>
      <div class="card">
        <div class="card-header">🐦 Bird Dog</div>
        <div class="card-body">
          <ol>
            <li>Start on all fours, neutral spine</li>
            <li>Exhale and gently engage pelvic floor</li>
            <li>Extend opposite arm and leg simultaneously</li>
            <li>Hold 5 seconds — no rotation in the hips</li>
            <li>8-10 reps per side × 3 sets</li>
          </ol>
        </div>
      </div>
    </div>

    <p style="font-size:11.5px;color:var(--mid-grey);font-style:italic;margin-top:12px;">
      Tip: Connect your breath to every movement — exhale on effort and engage pelvic floor at the same time.
    </p>
  </div>

  <!-- ══════════════════════════════════════════════════════ -->
  <!-- SLIDE 7 – 4-WEEK PROGRAMME -->
  <!-- ══════════════════════════════════════════════════════ -->
  <div class="slide bg-dark" id="slide-7">
    <div class="pill">YOUR PLAN</div>
    <h2 style="color:#fff;">4-Week Progressive Programme</h2>
    <div class="accent-bar coral"></div>

    <div class="week-row">
      <div class="week-label" style="background:#26A699;">Week 1<span>AWARENESS</span></div>
      <div class="week-tasks">Kegel holds × 5 sec / 10 reps &nbsp;•&nbsp; Quick flicks × 10 &nbsp;•&nbsp; 3×/day &nbsp;•&nbsp; Focus: finding and feeling the muscles</div>
    </div>
    <div class="week-row">
      <div class="week-label" style="background:#4CC9B0;">Week 2<span>FOUNDATION</span></div>
      <div class="week-tasks">Kegel holds × 8 sec / 10 reps &nbsp;•&nbsp; Quick flicks × 15 &nbsp;•&nbsp; Glute bridge 3×10 &nbsp;•&nbsp; Continue 3×/day</div>
    </div>
    <div class="week-row">
      <div class="week-label" style="background:#E05C4B;">Week 3<span>INTEGRATION</span></div>
      <div class="week-tasks">Kegel holds × 10 sec &nbsp;•&nbsp; Deep squat 3×10 &nbsp;•&nbsp; Bird dog 3×8/side &nbsp;•&nbsp; Combine with daily movement patterns</div>
    </div>
    <div class="week-row">
      <div class="week-label" style="background:#E8963C;">Week 4<span>CHALLENGE</span></div>
      <div class="week-tasks">Full circuit: holds + flicks + bridge + squat + bird dog &nbsp;•&nbsp; Increase reps by 20% &nbsp;•&nbsp; Optional: add resistance band</div>
    </div>

    <div class="note-box-dark">
      Rest days matter — aim for 3-5 sessions per week, not every single day. Recovery is when muscles actually get stronger.
    </div>
  </div>

  <!-- ══════════════════════════════════════════════════════ -->
  <!-- SLIDE 8 – BREATHING & CORE CONNECTION -->
  <!-- ══════════════════════════════════════════════════════ -->
  <div class="slide bg-cream" id="slide-8">
    <div class="pill">PRO TIP</div>
    <h2>The Breathing-Core-Pelvic Floor Connection</h2>
    <div class="accent-bar"></div>

    <div class="breath-cards">
      <div class="breath-card">
        <div class="breath-emoji">🫁</div>
        <div class="breath-label">INHALE</div>
        <div class="breath-divider"></div>
        <div class="breath-desc">Diaphragm drops<br>Pelvic floor lengthens<br>&amp; softens downward</div>
      </div>
      <div class="breath-card">
        <div class="breath-emoji">💨</div>
        <div class="breath-label">EXHALE</div>
        <div class="breath-divider"></div>
        <div class="breath-desc">Diaphragm rises<br>Pelvic floor lifts<br>&amp; engages upward</div>
      </div>
      <div class="breath-card">
        <div class="breath-emoji">💪</div>
        <div class="breath-label">EFFORT</div>
        <div class="breath-divider"></div>
        <div class="breath-desc">Always exhale on<br>exertion — lifting,<br>pushing, squeezing</div>
      </div>
    </div>

    <div class="note-box" style="margin-top:16px;">
      <strong>360° Breathing Tip:</strong> As you inhale, feel your ribcage expand in all directions — front, sides AND back. Avoid just lifting the chest. This activates the full pelvic floor system.
    </div>
  </div>

  <!-- ══════════════════════════════════════════════════════ -->
  <!-- SLIDE 9 – WHAT TO AVOID -->
  <!-- ══════════════════════════════════════════════════════ -->
  <div class="slide bg-cream" id="slide-9">
    <div class="pill">SAFETY</div>
    <h2>What to Avoid &amp; When to Seek Help</h2>
    <div class="accent-bar coral"></div>

    <div class="avoid-layout">
      <div>
        <div class="avoid-row"><span class="avoid-icon">🚫</span> Overdoing Kegels — a tight pelvic floor is NOT a strong one. Balance squeezing with full relaxation.</div>
        <div class="avoid-row"><span class="avoid-icon">🚫</span> Holding your breath during exercise — always breathe continuously through all movements.</div>
        <div class="avoid-row"><span class="avoid-icon">🚫</span> Heavy lifting or high-impact exercise before re-establishing pelvic floor control and pressure management.</div>
        <div class="avoid-row"><span class="avoid-icon">🚫</span> Stopping mid-flow to "test" pelvic floor repeatedly — this can disrupt normal bladder muscle signals.</div>
        <div class="avoid-row"><span class="avoid-icon">🚫</span> Pushing through pain — pelvic pain during exercise always needs professional assessment.</div>
      </div>

      <div class="physio-box">
        <div style="font-size:40px;">👩‍⚕️</div>
        <h3>See a Pelvic Floor Physio if:</h3>
        <ul>
          <li>Symptoms persist > 3 months</li>
          <li>Pain during or after sex</li>
          <li>Symptoms are worsening</li>
          <li>Post-surgery recovery</li>
          <li>Post-partum, any stage</li>
        </ul>
      </div>
    </div>
  </div>

  <!-- ══════════════════════════════════════════════════════ -->
  <!-- SLIDE 10 – DAILY HABITS -->
  <!-- ══════════════════════════════════════════════════════ -->
  <div class="slide bg-dark" id="slide-10">
    <div class="pill">LIFESTYLE</div>
    <h2 style="color:#fff;">Daily Habits for a Stronger Pelvic Floor</h2>
    <div class="accent-bar" style="background:var(--teal-light);"></div>

    <div style="display:grid;grid-template-columns:repeat(3,1fr);gap:12px;">
      <div class="habit-card">
        <div class="habit-icon">💧</div>
        <div><div class="habit-title">Stay Hydrated</div><div class="habit-body">Aim for 6-8 glasses of water daily. Concentrated urine irritates the bladder wall.</div></div>
      </div>
      <div class="habit-card">
        <div class="habit-icon">🥗</div>
        <div><div class="habit-title">High-Fibre Diet</div><div class="habit-body">Prevents constipation — straining is one of the top causes of pelvic floor damage.</div></div>
      </div>
      <div class="habit-card">
        <div class="habit-icon">🧘</div>
        <div><div class="habit-title">Posture Awareness</div><div class="habit-body">Sitting slumped collapses the pelvic floor. Sit tall with feet flat on the floor.</div></div>
      </div>
      <div class="habit-card">
        <div class="habit-icon">🏋️</div>
        <div><div class="habit-title">Load Management</div><div class="habit-body">Exhale and brace (not bear down) when lifting anything heavy — shopping, kids, weights.</div></div>
      </div>
      <div class="habit-card">
        <div class="habit-icon">😴</div>
        <div><div class="habit-title">Quality Sleep</div><div class="habit-body">Rest and recovery allow muscle repair and healthy hormonal regulation.</div></div>
      </div>
      <div class="habit-card">
        <div class="habit-icon">📱</div>
        <div><div class="habit-title">Use a Reminder App</div><div class="habit-body">Set 3 daily reminders for your exercises. Consistency beats intensity every time.</div></div>
      </div>
    </div>
  </div>

  <!-- ══════════════════════════════════════════════════════ -->
  <!-- SLIDE 11 – CLOSING -->
  <!-- ══════════════════════════════════════════════════════ -->
  <div class="slide bg-teal" id="slide-11">
    <div class="deco-circle" style="width:320px;height:320px;left:-80px;top:-80px;"></div>
    <div class="deco-circle" style="width:240px;height:240px;right:-40px;bottom:-40px;"></div>

    <div style="text-align:center;">
      <h1 style="color:#fff;">You've Got This. 💚</h1>
      <div style="height:5px;width:120px;background:var(--coral);border-radius:3px;margin:16px auto 20px;"></div>
      <p style="font-size:15px;color:rgba(255,255,255,0.85);max-width:640px;margin:0 auto 28px;line-height:1.7;">
        Your pelvic floor is trainable at any age. Start with awareness, build with consistency,
        and listen to your body every step of the way.
      </p>

      <div class="cta-actions">
        <ul>
          <li>🎯 &nbsp; Do your first 10 Kegels today</li>
          <li>📅 &nbsp; Book 3 sessions per week in your calendar</li>
          <li>📲 &nbsp; Download a pelvic floor reminder app</li>
          <li>👩‍⚕️ &nbsp; See a physio if you're unsure where to start</li>
        </ul>
      </div>
    </div>
  </div>

</div><!-- end deck -->

<!-- ─── NAVIGATION ──────────────────────────────────────── -->
<nav class="nav" id="nav">
  <button id="prevBtn" onclick="changeSlide(-1)" disabled>&#8592;</button>
  <div class="dots" id="dots"></div>
  <span class="counter" id="counter">1 / 11</span>
  <button id="nextBtn" onclick="changeSlide(1)">&#8594;</button>
</nav>

<script>
  const slides = document.querySelectorAll('.slide');
  const total  = slides.length;
  let current  = 0;

  // Build dots
  const dotsEl = document.getElementById('dots');
  for (let i = 0; i < total; i++) {
    const d = document.createElement('div');
    d.className = 'dot' + (i === 0 ? ' active' : '');
    d.addEventListener('click', () => goTo(i));
    dotsEl.appendChild(d);
  }

  function goTo(n) {
    slides[current].classList.remove('active');
    slides[current].classList.add('exit');
    setTimeout(() => slides[current - (n > current ? 0 : 0)].classList.remove('exit'), 450);

    // remove exit class after transition
    const prev = current;
    setTimeout(() => slides[prev].classList.remove('exit'), 500);

    current = n;
    slides[current].classList.add('active');

    // update dots
    document.querySelectorAll('.dot').forEach((d, i) => d.classList.toggle('active', i === current));

    // update counter
    document.getElementById('counter').textContent = (current + 1) + ' / ' + total;

    // update buttons
    document.getElementById('prevBtn').disabled = current === 0;
    document.getElementById('nextBtn').disabled = current === total - 1;

    // update progress bar
    document.getElementById('progressBar').style.width = ((current + 1) / total * 100) + '%';
  }

  function changeSlide(dir) {
    const n = current + dir;
    if (n >= 0 && n < total) goTo(n);
  }

  // Keyboard navigation
  document.addEventListener('keydown', e => {
    if (e.key === 'ArrowRight' || e.key === 'ArrowDown') changeSlide(1);
    if (e.key === 'ArrowLeft'  || e.key === 'ArrowUp')   changeSlide(-1);
  });

  // Touch/swipe support
  let touchStartX = 0;
  document.addEventListener('touchstart', e => { touchStartX = e.touches[0].clientX; });
  document.addEventListener('touchend',   e => {
    const dx = e.changedTouches[0].clientX - touchStartX;
    if (Math.abs(dx) > 50) changeSlide(dx < 0 ? 1 : -1);
  });

  // Init progress bar
  document.getElementById('progressBar').style.width = (1 / total * 100) + '%';
</script>
</body>
</html>
Running Command

cd /home/daytona/workspace/pelvic-floor-presentation && node build_pptx.js

Running Command

cd /home/daytona/workspace/pelvic-floor-presentation && node -e " const fs = req…

Running Command

cd /home/daytona/workspace/pelvic-floor-presentation && node -e " const fs = req…

Running Command

cd /home/daytona/workspace/pelvic-floor-presentation && node build_pptx_fixed.js…

Running Command

ls -lh /home/daytona/workspace/pelvic-floor-presentation/*.pptx /home/daytona/wo…

Both files are ready to download! Here they are:

Your Pelvic Floor Strength Presentations

PowerPoint (.pptx)

Pelvic Floor Strength

Presentation · PPTX

Interactive HTML (open in any browser)

pelvic floor presentation

HTML File · HTML


What's inside - 11 slides covering:

SlideContent
1Title - bold dark-teal design
2What Is the Pelvic Floor? - anatomy facts + key stats (32% of women affected)
3Signs of Weakness - 6 visual cards (leaking, urgency, heaviness, etc.)
4How to Find Your Muscles - 4-step numbered guide
5Foundational Exercises - Kegel Hold + Quick Flicks with step-by-step instructions
6Functional Strength - Glute Bridge, Deep Squat, Bird Dog
74-Week Progressive Programme - colour-coded week-by-week plan
8Breathing-Core-Pelvic Floor Connection - inhale/exhale/effort diagram
9What to Avoid + When to See a Physio
10Daily Habits - 6 lifestyle tips (hydration, posture, sleep, etc.)
11Call to Action - motivating closing with 4 next steps

HTML Features

  • Navigate with arrow keys, swipe (mobile), or on-screen buttons
  • Progress bar at top tracks how far through the presentation you are
  • Clickable dot navigation to jump to any slide
  • Smooth animated transitions between slides
  • Fully responsive for phone/tablet use with your online clients
This is a shared conversation. Sign in to Orris to start your own chat.