Help with interactive presentation on restoring pelvic floor muscles strength in women
Can you please provide both Power point and html version A bit easy to explain.
For online fitness clients
pelvic floor muscle strengthening exercises women fitness program
mkdir -p /home/daytona/workspace/pelvic-floor-presentation
~/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); });
~/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 & 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 • Quick flicks × 10 • 3×/day • 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 • Quick flicks × 15 • Glute bridge 3×10 • 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 • Deep squat 3×10 • Bird dog 3×8/side • 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 • Increase reps by 20% • 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>& 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>& 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 & 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>🎯 Do your first 10 Kegels today</li>
<li>📅 Book 3 sessions per week in your calendar</li>
<li>📲 Download a pelvic floor reminder app</li>
<li>👩⚕️ 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>←</button>
<div class="dots" id="dots"></div>
<span class="counter" id="counter">1 / 11</span>
<button id="nextBtn" onclick="changeSlide(1)">→</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>
cd /home/daytona/workspace/pelvic-floor-presentation && node build_pptx.js
cd /home/daytona/workspace/pelvic-floor-presentation && node -e " const fs = req…
cd /home/daytona/workspace/pelvic-floor-presentation && node -e " const fs = req…
cd /home/daytona/workspace/pelvic-floor-presentation && node build_pptx_fixed.js…
ls -lh /home/daytona/workspace/pelvic-floor-presentation/*.pptx /home/daytona/wo…
Pelvic Floor Strength
Presentation · PPTX
pelvic floor presentation
HTML File · HTML
| Slide | Content |
|---|---|
| 1 | Title - bold dark-teal design |
| 2 | What Is the Pelvic Floor? - anatomy facts + key stats (32% of women affected) |
| 3 | Signs of Weakness - 6 visual cards (leaking, urgency, heaviness, etc.) |
| 4 | How to Find Your Muscles - 4-step numbered guide |
| 5 | Foundational Exercises - Kegel Hold + Quick Flicks with step-by-step instructions |
| 6 | Functional Strength - Glute Bridge, Deep Squat, Bird Dog |
| 7 | 4-Week Progressive Programme - colour-coded week-by-week plan |
| 8 | Breathing-Core-Pelvic Floor Connection - inhale/exhale/effort diagram |
| 9 | What to Avoid + When to See a Physio |
| 10 | Daily Habits - 6 lifestyle tips (hydration, posture, sleep, etc.) |
| 11 | Call to Action - motivating closing with 4 next steps |