Make poster presentations about hd adequacy and depending on factors affect and calculation, how to improve, so on which I missed to mention.

Reading File
Reading File
Reading File
Finding Sources
Finding Sources
Reading File
Finding Sources
Reading File
Reading File
Running Command

ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or missing"

Running Command

mkdir -p /home/daytona/workspace/hd-adequacy-poster

Writing File

~/hd-adequacy-poster/build.js

const pptxgen = require("pptxgenjs");

const pres = new pptxgen();
pres.layout = "LAYOUT_WIDE"; // 13.3" x 7.5"
pres.title = "Hemodialysis Adequacy";

// ─── COLOR PALETTE ───────────────────────────────────────────
const C = {
  navy:     "0B1F4B",   // dominant background
  teal:     "0D7377",   // section headers & accent bars
  cyan:     "14A8B5",   // highlights / icons
  gold:     "F0A500",   // key numbers / emphasis
  white:    "FFFFFF",
  offwhite: "E8F4F8",
  lightbg:  "112244",   // slide body bg
  muted:    "A8C4D0",   // sub-text
  red:      "E05252",
  green:    "3DBE7A",
};

// ─── HELPERS ─────────────────────────────────────────────────
function addBG(slide, color) {
  slide.addShape(pres.ShapeType.rect, {
    x: 0, y: 0, w: "100%", h: "100%",
    fill: { color: color || C.navy },
    line: { type: "none" },
  });
}

function accentBar(slide, x, y, w, h, color) {
  slide.addShape(pres.ShapeType.rect, {
    x, y, w, h,
    fill: { color: color || C.teal },
    line: { type: "none" },
  });
}

function sectionTitle(slide, text, x, y, w, color) {
  accentBar(slide, x, y, w, 0.05, color || C.gold);
  slide.addText(text.toUpperCase(), {
    x, y: y + 0.07, w, h: 0.38,
    fontSize: 13, bold: true, color: C.gold,
    fontFace: "Calibri", margin: 0,
  });
}

function card(slide, x, y, w, h, fillColor) {
  slide.addShape(pres.ShapeType.roundRect, {
    x, y, w, h,
    fill: { color: fillColor || C.lightbg },
    line: { color: C.teal, pt: 1.2 },
    rectRadius: 0.08,
  });
}

function bulletBlock(slide, items, x, y, w, h, opts = {}) {
  const rows = items.map((t, i) => ({
    text: t,
    options: { bullet: { type: "bullet", indent: 12 }, breakLine: i < items.length - 1, fontSize: opts.fontSize || 10.5, color: opts.color || C.white, fontFace: "Calibri" },
  }));
  slide.addText(rows, { x, y, w, h, valign: "top", margin: 6 });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 1 — TITLE / OVERVIEW
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  addBG(s, C.navy);

  // Decorative teal strip left
  accentBar(s, 0, 0, 0.18, 7.5, C.teal);
  // Gold accent right
  accentBar(s, 13.12, 0, 0.18, 7.5, C.gold);

  // Main title
  s.addText("HEMODIALYSIS ADEQUACY", {
    x: 0.4, y: 1.1, w: 12.5, h: 1.2,
    fontSize: 44, bold: true, color: C.white,
    fontFace: "Calibri", align: "center", charSpacing: 4,
  });

  // Subtitle bar
  accentBar(s, 2.5, 2.5, 8.3, 0.06, C.gold);
  s.addText("Measurement · Determinants · Targets · Strategies to Improve", {
    x: 0.4, y: 2.6, w: 12.5, h: 0.55,
    fontSize: 18, color: C.muted, fontFace: "Calibri", align: "center", italic: true,
  });

  // Four overview boxes
  const boxes = [
    { icon: "📐", label: "Kt/V & URR", sub: "Gold-standard metrics" },
    { icon: "⚖️", label: "Influencing Factors", sub: "Dialyzer · Time · Access · RKF" },
    { icon: "🎯", label: "Target Values", sub: "spKt/V ≥ 1.4 | URR > 65%" },
    { icon: "🔧", label: "How to Improve", sub: "Practical clinical strategies" },
  ];
  boxes.forEach((b, i) => {
    const bx = 0.5 + i * 3.1;
    card(s, bx, 3.4, 2.9, 2.5, C.lightbg);
    s.addText(b.icon, { x: bx, y: 3.55, w: 2.9, h: 0.6, align: "center", fontSize: 26 });
    s.addText(b.label, { x: bx, y: 4.2, w: 2.9, h: 0.45, align: "center", fontSize: 14, bold: true, color: C.cyan, fontFace: "Calibri" });
    s.addText(b.sub, { x: bx, y: 4.65, w: 2.9, h: 0.5, align: "center", fontSize: 10, color: C.muted, fontFace: "Calibri", italic: true });
  });

  // Source note
  s.addText("Source: Brenner & Rector's The Kidney | KDOQI Clinical Practice Guidelines", {
    x: 0.4, y: 7.1, w: 12.5, h: 0.3,
    fontSize: 8.5, color: C.muted, fontFace: "Calibri", align: "center", italic: true,
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 2 — WHAT IS HD ADEQUACY & WHY IT MATTERS
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  addBG(s, C.navy);
  accentBar(s, 0, 0, 13.3, 0.9, C.teal);

  s.addText("WHAT IS HEMODIALYSIS ADEQUACY?", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.7,
    fontSize: 22, bold: true, color: C.white, fontFace: "Calibri", valign: "middle",
  });

  // Definition card
  card(s, 0.3, 1.05, 12.7, 1.35, "0D1E40");
  s.addText([
    { text: "Definition: ", options: { bold: true, color: C.gold } },
    { text: "HD adequacy refers to the sufficiency of solute and water removal during dialysis — primarily quantified by the fractional clearance of urea (Kt/V) — to maintain patient health and reduce uremic morbidity and mortality.", options: { color: C.white } },
  ], { x: 0.5, y: 1.12, w: 12.3, h: 1.1, fontSize: 12, fontFace: "Calibri", valign: "middle" });

  // Two columns
  // Left: Historical context
  card(s, 0.3, 2.6, 6.1, 3.8, C.lightbg);
  sectionTitle(s, "Historical Milestones", 0.45, 2.65, 5.8, C.gold);
  bulletBlock(s, [
    "1973 — Medicare funded ESRD dialysis; adequacy largely ignored",
    "1974 — National Cooperative Dialysis Study (NCDS) launched",
    "NCDS found strong association between Kt/V and patient outcome",
    "Mortality risk rises significantly when spKt/V falls below 1.2",
    "Hemo Study (NIH, late 1990s): no added benefit if spKt/V > 1.3 (3×/week)",
    "Guidelines now mandate minimum Kt/V standards of care worldwide",
    "Failure to achieve target dose is an independent mortality risk factor",
  ], 0.45, 3.1, 5.8, 3.1, { fontSize: 10.5 });

  // Right: Scope
  card(s, 6.9, 2.6, 6.1, 3.8, C.lightbg);
  sectionTitle(s, "Scope of Adequacy", 7.05, 2.65, 5.8, C.gold);
  bulletBlock(s, [
    "Primary goal: removal of uremic toxins (urea as surrogate marker)",
    "Considers solute removal + fluid balance (ultrafiltration)",
    "Separate from: anemia management, nutrition, CVD risk",
    "Protein-bound & sequestered toxins are not fully dialyzed",
    "High-MW solute flux may affect outcomes beyond urea",
    "Residual kidney function (RKF) contributes substantially between sessions",
    "Global kidney replacement therapy ≠ dialysis adequacy alone",
  ], 7.05, 3.1, 5.8, 3.1, { fontSize: 10.5 });

  s.addText("Brenner & Rector's The Kidney, 10th ed.", {
    x: 0.3, y: 7.15, w: 12.7, h: 0.25, fontSize: 8, color: C.muted, fontFace: "Calibri", italic: true, align: "right",
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 3 — MEASURING ADEQUACY: Kt/V & URR
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  addBG(s, C.navy);
  accentBar(s, 0, 0, 13.3, 0.9, C.teal);

  s.addText("MEASURING HD ADEQUACY: Kt/V & URR", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.7,
    fontSize: 22, bold: true, color: C.white, fontFace: "Calibri", valign: "middle",
  });

  // Kt/V card
  card(s, 0.3, 1.0, 8.0, 5.6, C.lightbg);
  sectionTitle(s, "Kt/V — The Gold Standard", 0.45, 1.05, 7.7);

  s.addText([
    { text: "K", options: { bold: true, color: C.cyan } },
    { text: " = urea clearance (mL/min)   ", options: { color: C.white } },
    { text: "t", options: { bold: true, color: C.cyan } },
    { text: " = treatment time (min)   ", options: { color: C.white } },
    { text: "V", options: { bold: true, color: C.cyan } },
    { text: " = urea distribution volume (body water, mL)", options: { color: C.white } },
  ], { x: 0.5, y: 1.52, w: 7.6, h: 0.5, fontSize: 11, fontFace: "Calibri" });

  // Formula box
  accentBar(s, 0.5, 2.12, 7.6, 0.04, C.teal);
  card(s, 0.5, 2.2, 7.6, 0.85, "091830");
  s.addText("spKt/V = −ln(R − 0.008×t) + (4 − 3.5R) × UF/W", {
    x: 0.6, y: 2.28, w: 7.4, h: 0.6,
    fontSize: 13, bold: true, color: C.gold, fontFace: "Courier New", align: "center",
  });
  s.addText("Daugirdas II Equation  (R = post-BUN/pre-BUN, UF = ultrafiltrate volume L, W = post-dialysis weight kg)", {
    x: 0.5, y: 3.08, w: 7.6, h: 0.35, fontSize: 9, color: C.muted, fontFace: "Calibri", italic: true,
  });

  bulletBlock(s, [
    "Single-pool Kt/V (spKt/V): simpler, derived from pre/post BUN",
    "Double-pool Kt/V: accounts for urea rebound (access recirculation); more accurate",
    "Equilibrated Kt/V (eKt/V): corrects for post-dialysis urea rebound",
    "Standard Kt/V (stdKt/V): allows comparison across frequencies & modalities",
    "Minimum target: spKt/V ≥ 1.4 per treatment (KDOQI 2015); eKt/V ≥ 1.2",
    "For women and smaller patients: higher weight-indexed dose recommended",
  ], 0.45, 3.5, 7.7, 2.85, { fontSize: 10.5 });

  // URR card
  card(s, 8.7, 1.0, 4.3, 5.6, C.lightbg);
  sectionTitle(s, "URR — Urea Reduction Ratio", 8.85, 1.05, 4.0);

  card(s, 8.85, 1.52, 4.0, 0.75, "091830");
  s.addText("URR = (C₀ − Cf) / C₀ × 100%", {
    x: 8.95, y: 1.58, w: 3.8, h: 0.55,
    fontSize: 13, bold: true, color: C.gold, fontFace: "Courier New", align: "center",
  });
  s.addText("C₀ = pre-dialysis BUN   Cf = post-dialysis BUN", {
    x: 8.85, y: 2.32, w: 4.0, h: 0.3, fontSize: 9, color: C.muted, fontFace: "Calibri", italic: true, align: "center",
  });

  bulletBlock(s, [
    "Target: URR > 65% (minimum)",
    "Simple to calculate from blood tests",
    "Limitation: less accurate than Kt/V",
    "Does NOT account for ultrafiltration",
    "URR decreases as dialysis frequency increases — paradox",
    "Cannot be summed across multiple sessions",
    "Replaced by Kt/V as CMS reporting standard",
    "Still used as a quick bedside check",
  ], 8.85, 2.7, 4.0, 3.7, { fontSize: 10 });

  s.addText("Brenner & Rector's The Kidney, 10th ed.", {
    x: 0.3, y: 7.15, w: 12.7, h: 0.25, fontSize: 8, color: C.muted, fontFace: "Calibri", italic: true, align: "right",
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 4 — FACTORS AFFECTING HD ADEQUACY
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  addBG(s, C.navy);
  accentBar(s, 0, 0, 13.3, 0.9, C.teal);

  s.addText("FACTORS AFFECTING HD ADEQUACY", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.7,
    fontSize: 22, bold: true, color: C.white, fontFace: "Calibri", valign: "middle",
  });

  const factors = [
    {
      title: "1. Dialyzer (Artificial Kidney)",
      color: C.teal,
      items: [
        "KoA (mass transfer coefficient × area) — key dialyzer property",
        "High-flux vs low-flux membranes (β₂-microglobulin clearance)",
        "Membrane surface area (m²): larger = better clearance",
        "Dialyzer reuse: efficiency drops with each reuse",
        "Fibre clotting: reduces effective surface area",
      ],
    },
    {
      title: "2. Blood Flow Rate (Qb)",
      color: C.cyan,
      items: [
        "Standard: 300–500 mL/min",
        "Higher Qb → increased urea clearance",
        "Limited by vascular access adequacy",
        "Recirculation reduces effective Qb",
        "AV fistula recirculation: 5–10%; graft: higher",
      ],
    },
    {
      title: "3. Dialysate Flow Rate (Qd)",
      color: "5B9BD5",
      items: [
        "Standard: 500–800 mL/min",
        "Increasing Qd from 500→800: ~10% Kt/V gain",
        "Counter-current flow maximizes concentration gradient",
        "Online hemodiafiltration uses high Qd effectively",
        "Cost and machine limitations may restrict Qd",
      ],
    },
    {
      title: "4. Treatment Time (Td)",
      color: C.gold,
      items: [
        "Most sessions: 3–4.5 hours, 3×/week conventional",
        "Longer Td → better solute clearance & BP control",
        "Patient shortening of sessions = major adequacy risk",
        "Population studies: longer Td associated with better survival",
        "Nocturnal or extended HD: superior fluid/solute balance",
      ],
    },
    {
      title: "5. Vascular Access",
      color: C.red,
      items: [
        "Arteriovenous fistula (AVF): preferred — lowest recirculation",
        "AV graft: higher recirculation than AVF",
        "Central venous catheter (CVC): highest recirculation",
        "Access recirculation directly lowers effective clearance",
        "Needle position & reversal affect recirculation significantly",
      ],
    },
    {
      title: "6. Residual Kidney Function (RKF)",
      color: C.green,
      items: [
        "Continuous clearance between sessions (vs intermittent dialysis)",
        "Even small RKF (1–3 mL/min) has major clinical impact",
        "RKF contributes to sodium, phosphate, and middle-molecule removal",
        "Loss of RKF associated with worse outcomes",
        "Nephrotoxic drugs, contrast, volume depletion accelerate RKF loss",
      ],
    },
    {
      title: "7. Patient-Related Factors",
      color: "9B59B6",
      items: [
        "Body size: larger V (urea distribution) → harder to achieve target",
        "Gender: women may need higher weight-normalized dose (Hemo study)",
        "Urea generation rate (G) reflects protein intake",
        "Urea rebound: post-dialysis rebound overestimates clearance",
        "Patient compliance: skipping/shortening sessions → inadequate Kt/V",
      ],
    },
    {
      title: "8. Prescription & Technical Factors",
      color: "E67E22",
      items: [
        "Incorrect pre/post sample timing → inaccurate Kt/V calculation",
        "Slow pump speed at session start or end",
        "Air traps and clotted segments reduce effective blood flow",
        "Anticoagulation failure causes circuit clotting",
        "Dialysate temperature: affects hemodynamics & tolerability",
      ],
    },
  ];

  const cols = [
    [0, 1, 2, 3],
    [4, 5, 6, 7],
  ];

  const colX = [0.28, 6.82];
  const rowY = [1.0, 2.8, 4.6];
  const boxW = 6.4;
  const boxH = 1.58;

  factors.forEach((f, idx) => {
    const col = idx < 4 ? 0 : 1;
    const row = idx % 4;
    const x = colX[col];
    const y = rowY[row >= 2 ? row - 2 + (row >= 2 ? 0 : 0) : row] + (row > 1 ? (row - 2) * 1.78 : row * 1.78);

    // recompute simply
    const bx = colX[col];
    const by = 1.0 + (idx % 4) * 1.63;

    card(s, bx, by, boxW, 1.55, C.lightbg);
    accentBar(s, bx, by, 0.06, 1.55, f.color);

    s.addText(f.title, {
      x: bx + 0.15, y: by + 0.05, w: boxW - 0.2, h: 0.32,
      fontSize: 10.5, bold: true, color: f.color, fontFace: "Calibri",
    });

    const rows2 = f.items.slice(0, 3).map((t, i) => ({
      text: "• " + t,
      options: { breakLine: i < 2, fontSize: 9.2, color: C.white, fontFace: "Calibri" },
    }));
    s.addText(rows2, { x: bx + 0.15, y: by + 0.38, w: boxW - 0.2, h: 1.1, valign: "top", margin: 2 });
  });

  s.addText("Brenner & Rector's The Kidney, 10th ed.", {
    x: 0.3, y: 7.15, w: 12.7, h: 0.25, fontSize: 8, color: C.muted, fontFace: "Calibri", italic: true, align: "right",
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 5 — CALCULATING Kt/V STEP BY STEP
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  addBG(s, C.navy);
  accentBar(s, 0, 0, 13.3, 0.9, C.teal);

  s.addText("CALCULATING Kt/V — STEP-BY-STEP", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.7,
    fontSize: 22, bold: true, color: C.white, fontFace: "Calibri", valign: "middle",
  });

  // Steps flow
  const steps = [
    { n: "1", title: "Collect Blood Samples", desc: "Pre-dialysis BUN (C₀): draw before session starts\nPost-dialysis BUN (Cf): draw at session end — slow pump to 50 mL/min for 15 sec, then sample to avoid recirculation artifact" },
    { n: "2", title: "Record Parameters", desc: "Treatment time (t) in minutes\nPost-dialysis weight (W) in kg\nUltrafiltration volume (UF) in litres = pre-weight − post-weight" },
    { n: "3", title: "Calculate R", desc: "R = Cf / C₀\nExample: pre-BUN = 60 mg/dL, post-BUN = 18 mg/dL\nR = 18/60 = 0.30" },
    { n: "4", title: "Apply Daugirdas II Formula", desc: "spKt/V = −ln(R − 0.008 × t) + (4 − 3.5 × R) × UF/W\nExample: t=240 min, UF=2.5 L, W=70 kg\nspKt/V = −ln(0.30 − 0.008×240) + (4 − 3.5×0.30) × 2.5/70" },
    { n: "5", title: "Interpret Result", desc: "spKt/V ≥ 1.4 per session → Adequate\nspKt/V 1.2–1.39 → Borderline — investigate\nspKt/V < 1.2 → Inadequate — intervention required" },
    { n: "6", title: "Calculate eKt/V (if needed)", desc: "eKt/V = spKt/V × (1 − 0.6/t) + 0.03 (Tattersall equation)\nCorrects for post-dialysis urea rebound\nTarget: eKt/V ≥ 1.2" },
  ];

  steps.forEach((st, i) => {
    const col = i % 2 === 0 ? 0 : 1;
    const row = Math.floor(i / 2);
    const bx = col === 0 ? 0.3 : 6.85;
    const by = 1.05 + row * 2.1;

    card(s, bx, by, 6.25, 1.95, C.lightbg);
    // Step circle
    s.addShape(pres.ShapeType.ellipse, {
      x: bx + 0.12, y: by + 0.55, w: 0.52, h: 0.52,
      fill: { color: C.gold }, line: { type: "none" },
    });
    s.addText(st.n, {
      x: bx + 0.12, y: by + 0.56, w: 0.52, h: 0.5,
      fontSize: 14, bold: true, color: C.navy, fontFace: "Calibri", align: "center", valign: "middle",
    });
    s.addText(st.title, {
      x: bx + 0.75, y: by + 0.08, w: 5.4, h: 0.38,
      fontSize: 12, bold: true, color: C.cyan, fontFace: "Calibri",
    });
    s.addText(st.desc, {
      x: bx + 0.75, y: by + 0.48, w: 5.4, h: 1.38,
      fontSize: 9.8, color: C.white, fontFace: "Calibri", valign: "top",
    });
  });

  s.addText("Brenner & Rector's The Kidney, 10th ed. | Daugirdas JT, 1993", {
    x: 0.3, y: 7.15, w: 12.7, h: 0.25, fontSize: 8, color: C.muted, fontFace: "Calibri", italic: true, align: "right",
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 6 — TARGET VALUES & GUIDELINES
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  addBG(s, C.navy);
  accentBar(s, 0, 0, 13.3, 0.9, C.teal);

  s.addText("TARGET VALUES & CLINICAL GUIDELINES", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.7,
    fontSize: 22, bold: true, color: C.white, fontFace: "Calibri", valign: "middle",
  });

  // Big target boxes
  const targets = [
    { label: "spKt/V", value: "≥ 1.4", sub: "per session (3×/week)", note: "KDOQI 2015 minimum", color: C.green },
    { label: "eKt/V", value: "≥ 1.2", sub: "equilibrated Kt/V", note: "Corrects for rebound", color: C.cyan },
    { label: "URR", value: "> 65%", sub: "urea reduction ratio", note: "CMS monitoring metric", color: C.gold },
    { label: "stdKt/V", value: "≥ 2.0 /wk", sub: "standard Kt/V (weekly)", note: "Across all frequencies", color: "9B59B6" },
  ];

  targets.forEach((t, i) => {
    const bx = 0.3 + i * 3.18;
    card(s, bx, 1.05, 3.0, 2.5, C.lightbg);
    accentBar(s, bx, 1.05, 3.0, 0.08, t.color);
    s.addText(t.label, { x: bx, y: 1.18, w: 3.0, h: 0.45, align: "center", fontSize: 14, bold: true, color: t.color, fontFace: "Calibri" });
    s.addText(t.value, { x: bx, y: 1.65, w: 3.0, h: 0.8, align: "center", fontSize: 34, bold: true, color: C.white, fontFace: "Calibri" });
    s.addText(t.sub, { x: bx, y: 2.48, w: 3.0, h: 0.35, align: "center", fontSize: 10, color: C.muted, fontFace: "Calibri", italic: true });
    s.addText(t.note, { x: bx, y: 2.85, w: 3.0, h: 0.35, align: "center", fontSize: 9.5, color: t.color, fontFace: "Calibri", bold: true });
  });

  // Guideline comparison table
  card(s, 0.3, 3.75, 12.7, 3.2, C.lightbg);
  sectionTitle(s, "Guideline Comparison", 0.45, 3.8, 12.4);

  // Table header
  accentBar(s, 0.3, 4.3, 12.7, 0.42, "0D2244");
  const hdr = ["Guideline", "Minimum spKt/V", "Target spKt/V", "URR", "Frequency", "Special Notes"];
  const colW = [2.5, 2.0, 2.0, 1.5, 2.0, 2.7];
  let cx2 = 0.35;
  hdr.forEach((h, i) => {
    s.addText(h, { x: cx2, y: 4.32, w: colW[i], h: 0.38, fontSize: 10, bold: true, color: C.gold, fontFace: "Calibri", valign: "middle" });
    cx2 += colW[i];
  });

  const rows = [
    ["KDOQI 2015 (USA)", "1.2", "1.4", "> 65%", "3×/week", "Dose targeting for women"],
    ["KDIGO 2012", "1.2", "1.4", "> 65%", "3×/week", "Adjust for residual kidney function"],
    ["ERA-EDTA", "1.2", "1.4", "> 65%", "3×/week", "stdKt/V ≥ 2.0/wk preferred"],
    ["UK Renal Association", "1.2", "1.4", "> 65%", "3×/week", "High-flux membrane recommended"],
  ];
  rows.forEach((row, ri) => {
    const rowBg = ri % 2 === 0 ? "0D1E40" : "091630";
    accentBar(s, 0.3, 4.72 + ri * 0.52, 12.7, 0.52, rowBg);
    let cx3 = 0.35;
    row.forEach((cell, ci) => {
      s.addText(cell, { x: cx3, y: 4.74 + ri * 0.52, w: colW[ci], h: 0.48, fontSize: 9.5, color: ci === 0 ? C.cyan : C.white, fontFace: "Calibri", valign: "middle", bold: ci === 0 });
      cx3 += colW[ci];
    });
  });

  s.addText("KDOQI = Kidney Disease Outcomes Quality Initiative | KDIGO = Kidney Disease Improving Global Outcomes | ERA-EDTA = European Renal Association", {
    x: 0.3, y: 7.15, w: 12.7, h: 0.25, fontSize: 8, color: C.muted, fontFace: "Calibri", italic: true,
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 7 — HOW TO IMPROVE HD ADEQUACY
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  addBG(s, C.navy);
  accentBar(s, 0, 0, 13.3, 0.9, C.teal);

  s.addText("STRATEGIES TO IMPROVE HD ADEQUACY", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.7,
    fontSize: 22, bold: true, color: C.white, fontFace: "Calibri", valign: "middle",
  });

  const strategies = [
    {
      icon: "🕐", color: C.gold,
      title: "Extend Treatment Time",
      items: [
        "Increase session duration from 3 → 4–4.5 hours",
        "Nocturnal HD (6–8 hrs, 3–6×/week): superior adequacy",
        "Longer time reduces ultrafiltration rate → fewer cramps",
        "Slow extended dialysis (SLED): slower, better tolerated",
      ],
    },
    {
      icon: "💉", color: C.red,
      title: "Optimize Vascular Access",
      items: [
        "Promote AVF creation; avoid long-term catheter use",
        "Correct access stenosis promptly (fistulogram + intervention)",
        "Check recirculation regularly with urea step-test",
        "Proper needle placement: arterial distal, venous proximal",
        "Avoid needle reversal — doubles recirculation",
      ],
    },
    {
      icon: "⚡", color: C.cyan,
      title: "Increase Blood Flow Rate",
      items: [
        "Target Qb 350–500 mL/min if access allows",
        "Verify pump speed matches actual delivered flow",
        "Treat access stenosis to achieve target Qb",
        "Check for arterial line collapse/kinking",
      ],
    },
    {
      icon: "💧", color: "5B9BD5",
      title: "Increase Dialysate Flow Rate",
      items: [
        "Increase Qd from 500 → 800 mL/min",
        "Use counter-current flow configuration",
        "HDF (hemodiafiltration): higher convective clearance",
        "Online HDF: convective volumes 20–25 L/session",
      ],
    },
    {
      icon: "🔬", color: C.green,
      title: "Upgrade Dialyzer",
      items: [
        "Switch to high-flux membrane dialyzer",
        "High KoA dialyzers improve urea & middle-molecule clearance",
        "Larger surface area (2.0–2.2 m²) for large patients",
        "Avoid dialyzer reuse if clearance declines",
      ],
    },
    {
      icon: "📅", color: "9B59B6",
      title: "Increase Dialysis Frequency",
      items: [
        "5–6×/week short daily HD: improves phosphate & fluid control",
        "stdKt/V better reflects cumulative weekly clearance",
        "Home HD: enables flexibility in frequency & duration",
        "More frequent dialysis preserves residual kidney function",
      ],
    },
    {
      icon: "🩺", color: "E67E22",
      title: "Preserve Residual Kidney Function",
      items: [
        "Avoid nephrotoxins: NSAIDs, IV contrast, aminoglycosides",
        "Maintain euvolemia — prevent volume depletion episodes",
        "Control BP: ACE-I/ARB may slow RKF decline",
        "Regular 24-hr urine collection to track RKF",
        "Include RKF in total weekly Kt/V calculation",
      ],
    },
    {
      icon: "📋", color: C.muted,
      title: "Patient & Prescription Factors",
      items: [
        "Educate patients: never shorten or skip sessions",
        "Address intradialytic symptoms to improve compliance",
        "Review prescription monthly: adjust if Kt/V < target",
        "Correct sample timing: slow pump method for post-BUN",
        "Confirm actual treatment time vs prescribed time",
      ],
    },
  ];

  const colX2 = [0.28, 3.58, 6.88, 10.18];
  const rowY2 = [1.0, 3.52];

  strategies.forEach((st, i) => {
    const col = i % 4;
    const row = Math.floor(i / 4);
    const bx = colX2[col];
    const by = rowY2[row];

    card(s, bx, by, 3.1, 2.35, C.lightbg);
    accentBar(s, bx, by, 3.1, 0.06, st.color);

    s.addText(st.icon + " " + st.title, {
      x: bx + 0.1, y: by + 0.1, w: 2.9, h: 0.45,
      fontSize: 10.5, bold: true, color: st.color, fontFace: "Calibri",
    });

    const brows = st.items.map((t, i2) => ({
      text: "• " + t,
      options: { breakLine: i2 < st.items.length - 1, fontSize: 9, color: C.white, fontFace: "Calibri" },
    }));
    s.addText(brows, { x: bx + 0.1, y: by + 0.58, w: 2.9, h: 1.68, valign: "top", margin: 2 });
  });

  s.addText("KDOQI 2015 | Brenner & Rector's The Kidney | HEMO Study", {
    x: 0.3, y: 7.15, w: 12.7, h: 0.25, fontSize: 8, color: C.muted, fontFace: "Calibri", italic: true, align: "right",
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 8 — RESIDUAL KIDNEY FUNCTION & MIDDLE MOLECULES
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  addBG(s, C.navy);
  accentBar(s, 0, 0, 13.3, 0.9, C.teal);

  s.addText("BEYOND UREA: RKF, MIDDLE MOLECULES & HIGH-FLUX HD", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.7,
    fontSize: 22, bold: true, color: C.white, fontFace: "Calibri", valign: "middle",
  });

  // RKF
  card(s, 0.3, 1.0, 4.1, 5.8, C.lightbg);
  sectionTitle(s, "Residual Kidney Function", 0.45, 1.05, 3.8, C.green);
  bulletBlock(s, [
    "Any native kidney clearance remaining in ESRD patients",
    "Even 1–2 mL/min GFR removes ~1.5 L/day of solute",
    "Provides continuous clearance between sessions",
    "Removes middle molecules, phosphate, sodium",
    "Strong predictor of survival in incident dialysis patients",
    "Preserved RKF → fewer hospitalizations, better QoL",
    "Include Kru in weekly Kt/V: total = Kd + Kru",
    "PROTECT-HD: ACE-I/ARB preserves RKF on HD",
    "Avoid volume depletion, contrast, aminoglycosides",
    "Monitor: 24-hr urine collection monthly",
  ], 0.45, 1.5, 3.8, 5.1, { fontSize: 10 });

  // Middle molecules
  card(s, 4.8, 1.0, 4.1, 5.8, C.lightbg);
  sectionTitle(s, "Middle Molecules", 4.95, 1.05, 3.8, C.cyan);
  bulletBlock(s, [
    "MW 500–60,000 Da (vs urea 60 Da)",
    "Not well removed by low-flux membranes",
    "β₂-microglobulin (MW 11,800 Da) — dialysis amyloid",
    "PTH, cytokines, AGEs contribute to uremic syndrome",
    "High-flux membranes remove middle molecules",
    "Online HDF: convective removal 20–25 L/session",
    "CONTRAST trial (2023): survival benefit with HDF",
    "ESHOL study: HDF reduced mortality vs low-flux HD",
    "High-volume HDF is now preferred where available",
    "Standard Kt/V does not capture middle-molecule clearance",
  ], 4.95, 1.5, 3.8, 5.1, { fontSize: 10 });

  // Alternative modalities
  card(s, 9.3, 1.0, 3.7, 5.8, C.lightbg);
  sectionTitle(s, "Alternative Modalities", 9.45, 1.05, 3.4, C.gold);
  bulletBlock(s, [
    "Daily short HD (2–2.5 hrs, 5–6×/week)",
    "Nocturnal HD: 6–8 hrs, 3–6 nights/week",
    "Home hemodialysis: more frequent, patient-controlled",
    "Buttonhole needling: improves fistula longevity",
    "stdKt/V: best comparator across all modalities",
    "Short daily: better phosphate, BP, LVH",
    "Nocturnal: best BP, phosphate binder reduction",
    "HDF: improved survival in high-volume studies",
    "Wearable artificial kidney (WAK): in development",
    "Portable HD systems expand home access",
  ], 9.45, 1.5, 3.4, 5.1, { fontSize: 10 });

  s.addText("Brenner & Rector's The Kidney | CONTRAST 2023 | ESHOL Study", {
    x: 0.3, y: 7.15, w: 12.7, h: 0.25, fontSize: 8, color: C.muted, fontFace: "Calibri", italic: true, align: "right",
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 9 — TROUBLESHOOTING INADEQUATE DIALYSIS
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  addBG(s, C.navy);
  accentBar(s, 0, 0, 13.3, 0.9, C.teal);

  s.addText("TROUBLESHOOTING INADEQUATE HD ADEQUACY", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.7,
    fontSize: 22, bold: true, color: C.white, fontFace: "Calibri", valign: "middle",
  });

  // Algorithm flow
  card(s, 0.3, 1.05, 12.7, 1.15, "0D1E40");
  s.addText("⚠  Kt/V below target — Systematic Approach", {
    x: 0.5, y: 1.12, w: 12.3, h: 0.5, fontSize: 13, bold: true, color: C.red, fontFace: "Calibri",
  });
  s.addText("Step 1: Verify sample timing → Step 2: Check treatment time → Step 3: Assess access → Step 4: Review dialyzer → Step 5: Increase frequency", {
    x: 0.5, y: 1.62, w: 12.3, h: 0.45, fontSize: 11, color: C.muted, fontFace: "Calibri", italic: true,
  });

  const trouble = [
    {
      cause: "Incorrect Sample Timing",
      color: C.red,
      checks: ["Post-BUN drawn too early (recirculation artifact)", "Slow pump 15-sec technique not used", "Sample from venous line (not arterial)"],
      fix: ["Use slow-pump stop-flow method: reduce Qb to 50 mL/min for 15 sec before sampling", "Always sample from arterial line"],
    },
    {
      cause: "Treatment Time Shortened",
      color: C.gold,
      checks: ["Patient requests early stop", "Machine alarm-related interruptions", "Late start / early end of session"],
      fix: ["Document actual vs prescribed time", "Address intradialytic symptoms proactively", "Strict session start time adherence"],
    },
    {
      cause: "Access Recirculation",
      color: "E67E22",
      checks: ["CVC with high recirculation", "Needle reversal or poor positioning", "Access stenosis causing low Qb"],
      fix: ["Fistulogram if access dysfunction suspected", "Correct needle position and orientation", "Replace CVC with AVF/graft if feasible"],
    },
    {
      cause: "Low Blood Flow Rate",
      color: C.cyan,
      checks: ["Access stenosis, thrombosis", "Arterial collapse or kinking", "Machine pump calibration error"],
      fix: ["Verify actual Qb with HD machine", "Treat access stenosis (angioplasty)", "Increase Qb prescription if tolerated"],
    },
    {
      cause: "Dialyzer Issues",
      color: C.green,
      checks: ["Fibre clotting reducing surface area", "Low KoA dialyzer selected", "Reuse reducing clearance over time"],
      fix: ["Optimize anticoagulation to prevent clotting", "Upgrade to high-flux, high-KoA dialyzer", "Limit reuse; test clearance if reused"],
    },
    {
      cause: "Large Body Size / High V",
      color: "9B59B6",
      checks: ["Large patients: V may be >50 L", "Women: Hemo study shows lower achieved dose", "Obese patients: underestimated V"],
      fix: ["Use anthropometric V estimation", "Increase Td or switch to 4×/week", "Consider surface-area normalized dosing"],
    },
  ];

  trouble.forEach((t, i) => {
    const col = i % 3;
    const row = Math.floor(i / 3);
    const bx = 0.3 + col * 4.35;
    const by = 2.4 + row * 2.45;

    card(s, bx, by, 4.15, 2.3, C.lightbg);
    accentBar(s, bx, by, 4.15, 0.06, t.color);
    s.addText("⚠ " + t.cause, { x: bx + 0.1, y: by + 0.1, w: 3.9, h: 0.38, fontSize: 11, bold: true, color: t.color, fontFace: "Calibri" });

    s.addText("Checks:", { x: bx + 0.1, y: by + 0.52, w: 1.8, h: 0.3, fontSize: 9.5, bold: true, color: C.muted, fontFace: "Calibri" });
    const crows = t.checks.map((c, j) => ({ text: "• " + c, options: { breakLine: j < t.checks.length - 1, fontSize: 8.8, color: C.white, fontFace: "Calibri" } }));
    s.addText(crows, { x: bx + 0.1, y: by + 0.82, w: 3.9, h: 0.68, valign: "top", margin: 1 });

    s.addText("Fix:", { x: bx + 0.1, y: by + 1.52, w: 0.5, h: 0.28, fontSize: 9.5, bold: true, color: C.green, fontFace: "Calibri" });
    const frows = t.fix.map((f, j) => ({ text: "✓ " + f, options: { breakLine: j < t.fix.length - 1, fontSize: 8.8, color: C.green, fontFace: "Calibri" } }));
    s.addText(frows, { x: bx + 0.65, y: by + 1.52, w: 3.35, h: 0.68, valign: "top", margin: 1 });
  });

  s.addText("KDOQI 2015 | Brenner & Rector's The Kidney, 10th ed.", {
    x: 0.3, y: 7.15, w: 12.7, h: 0.25, fontSize: 8, color: C.muted, fontFace: "Calibri", italic: true, align: "right",
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 10 — SUMMARY & KEY TAKE-AWAYS
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  addBG(s, C.navy);
  accentBar(s, 0, 0, 13.3, 0.9, C.teal);

  s.addText("SUMMARY & KEY TAKE-AWAYS", {
    x: 0.3, y: 0.1, w: 12.7, h: 0.7,
    fontSize: 22, bold: true, color: C.white, fontFace: "Calibri", valign: "middle",
  });

  const keymsg = [
    { n: "01", msg: "spKt/V ≥ 1.4 is the minimum target — not the goal. Aim higher for women, large patients, and those with rapid RKF loss." },
    { n: "02", msg: "Vascular access is the single most modifiable determinant of delivered dialysis dose. AVF should be the default access." },
    { n: "03", msg: "Treatment time matters — every minute cut short increases mortality risk. Never allow patient-requested early termination without review." },
    { n: "04", msg: "Residual kidney function is precious. Protect it actively: avoid nephrotoxins, maintain euvolemia, use RAS blockade." },
    { n: "05", msg: "Urea Kt/V does not capture everything. High-flux membranes and HDF address middle-molecule accumulation beyond what spKt/V measures." },
    { n: "06", msg: "Inadequate Kt/V should trigger systematic investigation — check sample timing, access function, and Qb before simply increasing prescription." },
  ];

  keymsg.forEach((k, i) => {
    const col = i % 2;
    const row = Math.floor(i / 2);
    const bx = col === 0 ? 0.3 : 6.85;
    const by = 1.05 + row * 2.0;

    card(s, bx, by, 6.25, 1.85, C.lightbg);
    // Number badge
    s.addShape(pres.ShapeType.rect, {
      x: bx, y: by, w: 0.65, h: 1.85,
      fill: { color: C.teal }, line: { type: "none" },
    });
    s.addText(k.n, {
      x: bx, y: by + 0.55, w: 0.65, h: 0.7,
      fontSize: 20, bold: true, color: C.gold, fontFace: "Calibri", align: "center", valign: "middle",
    });
    s.addText(k.msg, {
      x: bx + 0.75, y: by + 0.22, w: 5.35, h: 1.4,
      fontSize: 11, color: C.white, fontFace: "Calibri", valign: "middle",
    });
  });

  // Bottom bar
  accentBar(s, 0.3, 7.0, 12.7, 0.06, C.gold);
  s.addText("Brenner & Rector's The Kidney (10th ed.) · KDOQI 2015 · HEMO Study · ESHOL · CONTRAST 2023 · ERA-EDTA Guidelines", {
    x: 0.3, y: 7.1, w: 12.7, h: 0.28,
    fontSize: 8.5, color: C.muted, fontFace: "Calibri", italic: true, align: "center",
  });
}

// ─── WRITE FILE ──────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/hd-adequacy-poster/HD_Adequacy_Poster.pptx" })
  .then(() => console.log("✅ Done: /home/daytona/workspace/hd-adequacy-poster/HD_Adequacy_Poster.pptx"))
  .catch(e => { console.error("❌ Error:", e); process.exit(1); });
Running Command

cd /home/daytona/workspace/hd-adequacy-poster && node build.js 2>&1

Your HD Adequacy poster presentation is ready:

HD Adequacy Poster

Presentation · PPTX


What's Inside — 10 Slides

SlideContent
1 — TitleOverview with 4 key theme boxes
2 — What is HD AdequacyDefinition, historical milestones (NCDS → Hemo Study), scope
3 — Measuring AdequacyKt/V (spKt/V, eKt/V, stdKt/V) with Daugirdas II formula + URR side-by-side
4 — Factors Affecting Adequacy8 factor cards: Dialyzer, Qb, Qd, Treatment Time, Access, RKF, Patient Factors, Technical
5 — Calculating Kt/VStep-by-step guide with sample timing method, formulas, interpretation thresholds
6 — Targets & GuidelinesTarget boxes (spKt/V ≥1.4, eKt/V ≥1.2, URR >65%, stdKt/V ≥2.0/wk) + KDOQI/KDIGO/ERA-EDTA comparison table
7 — How to Improve8 strategy cards: extend time, optimize access, increase Qb/Qd, upgrade dialyzer, increase frequency, preserve RKF, patient education
8 — Beyond UreaResidual kidney function, middle molecules (β₂-microglobulin), HDF/high-flux membranes, alternative modalities
9 — Troubleshooting6 common causes of inadequate Kt/V with systematic checks and fixes
10 — Key Take-Aways6 evidence-based summary points
Design: Navy/teal/gold palette, widescreen (13.3×7.5"), sourced from Brenner & Rector's The Kidney (10th ed.), KDOQI 2015, Hemo Study, ESHOL, and CONTRAST 2023.

Make it in poster form

Reading File
Writing File

~/hd-adequacy-poster/poster.js

/**
 * HD ADEQUACY — Academic Conference Poster
 * Format: A0 Landscape  ~46.8" × 33.1"  (scaled to pptxgenjs units)
 * Layout: 1 slide, 5 columns
 */
const pptxgen = require("pptxgenjs");

const pres = new pptxgen();

// A0 landscape: 1189 mm × 841 mm  → 46.81" × 33.11"
const W = 46.81;
const H = 33.11;

pres.defineLayout({ name: "A0_LAND", width: W, height: H });
pres.layout = "A0_LAND";
pres.title = "Hemodialysis Adequacy — Conference Poster";

// ── PALETTE ──────────────────────────────────────────────────
const C = {
  navy:    "0A1A3A",
  teal:    "0C6B70",
  cyan:    "10A0B0",
  gold:    "F0A020",
  white:   "FFFFFF",
  offwhite:"E4F0F5",
  card:    "0F2248",
  muted:   "8AAFBF",
  red:     "D94F4F",
  green:   "2EAD6A",
  purple:  "8B52C0",
  orange:  "E06820",
  blue:    "4A7FC1",
};

const s = pres.addSlide();

// ── HELPERS ──────────────────────────────────────────────────
function rect(x,y,w,h,fill,lineCol,lw){
  s.addShape(pres.ShapeType.rect,{x,y,w,h,
    fill:{color:fill||C.navy},
    line: lineCol ? {color:lineCol,pt:lw||1.5} : {type:"none"}});
}
function rrect(x,y,w,h,fill,lineCol,lw){
  s.addShape(pres.ShapeType.roundRect,{x,y,w,h,rectRadius:0.15,
    fill:{color:fill||C.card},
    line: lineCol ? {color:lineCol,pt:lw||1.5} : {type:"none"}});
}
function txt(text,x,y,w,h,opts){
  s.addText(text,{x,y,w,h,...opts});
}
function htxt(text,x,y,w,h,size,color,bold,align,italic){
  txt(text,x,y,w,h,{fontSize:size,color:color||C.white,bold:!!bold,
    fontFace:"Calibri",align:align||"left",valign:"top",italic:!!italic});
}
function secHead(label,x,y,w,color){
  rect(x,y,w,0.09,color||C.gold);
  htxt(label.toUpperCase(),x,y+0.1,w,0.7,13.5,color||C.gold,true);
}
function bullets(items,x,y,w,h,size,color){
  const rows=items.map((t,i)=>({
    text:"• "+t,
    options:{breakLine:i<items.length-1,fontSize:size||9.5,
             color:color||C.white,fontFace:"Calibri"}}));
  s.addText(rows,{x,y,w,h,valign:"top",margin:3});
}
function kv(label,val,x,y,w,h,vColor){
  rrect(x,y,w,h,C.card,C.teal,1);
  rect(x,y,w,0.07,vColor||C.gold);
  htxt(label,x+0.12,y+0.12,w-0.24,0.55,10.5,C.muted,false);
  htxt(val,x+0.12,y+0.62,w-0.24,h-0.75,22,C.white,true,"center");
}

// ══════════════════════════════════════════════════════════════
// BACKGROUND
// ══════════════════════════════════════════════════════════════
rect(0,0,W,H,C.navy);

// Top banner gradient strip
rect(0,0,W,4.4,C.teal);
rect(0,3.9,W,0.55,"0A1A3A");  // fade bottom

// Decorative side bars
rect(0,0,0.35,H,C.teal);
rect(W-0.35,0,0.35,H,C.gold);

// ══════════════════════════════════════════════════════════════
// HEADER
// ══════════════════════════════════════════════════════════════
htxt("HEMODIALYSIS ADEQUACY",
  0.6, 0.35, W-1.2, 2.1, 64, C.white, true, "center");
rect(6, 2.55, W-12, 0.1, C.gold);
htxt("Measurement  ·  Determinants  ·  Targets  ·  Strategies to Improve  ·  Troubleshooting",
  0.6, 2.7, W-1.2, 0.9, 18, C.offwhite, false, "center", true);
htxt("Source: Brenner & Rector's The Kidney (10th ed.)  ·  KDOQI 2015  ·  HEMO Study  ·  KDIGO 2012  ·  ERA-EDTA Guidelines",
  0.6, 3.6, W-1.2, 0.65, 11, C.muted, false, "center", true);

// ══════════════════════════════════════════════════════════════
// LAYOUT: 5 columns
// Column widths (inches):  8.8  9.0  9.5  9.5  9.0
// ══════════════════════════════════════════════════════════════
const TOP = 4.8;         // top of content area
const BOT = H - 1.2;    // bottom of content area
const CH  = BOT - TOP;  // usable column height ~27"

const COL = [
  { x: 0.55,  w: 8.8  },
  { x: 9.85,  w: 9.0  },
  { x: 19.35, w: 9.5  },
  { x: 29.35, w: 9.0  },
  { x: 38.85, w: 7.61 },
];

// Thin column dividers
[9.55, 19.05, 28.95, 38.55].forEach(dx=>{
  rect(dx, TOP-0.3, 0.04, CH+0.4, "1A3A5A");
});

// ══════════════════════════════════════════════════════════════
// COL 1 — What is Adequacy + Historical + Scope
// ══════════════════════════════════════════════════════════════
{
  const {x,w}=COL[0];
  let y=TOP;

  // Definition block
  rrect(x,y,w,3.6,C.card,C.teal,1.5);
  rect(x,y,w,0.09,C.gold);
  htxt("WHAT IS HD ADEQUACY?",x+0.15,y+0.15,w-0.3,0.7,13.5,C.gold,true);
  s.addText([
    {text:"Definition: ",options:{bold:true,color:C.gold,fontSize:11,fontFace:"Calibri"}},
    {text:"The sufficiency of solute and water removal during dialysis, primarily quantified by the fractional urea clearance (Kt/V), to maintain patient health and reduce uremic morbidity and mortality.",
     options:{color:C.white,fontSize:10.5,fontFace:"Calibri"}},
  ],{x:x+0.15,y:y+0.9,w:w-0.3,h:1.5,valign:"top"});
  htxt("Primary goal: removal of uremic toxins (urea as surrogate).\nConsiders both solute removal AND fluid balance (UF).\nSeparate from anemia, nutrition, and CVD management.",
    x+0.15,y+2.5,w-0.3,1.0,9.8,C.muted,false,"left",true);
  y+=3.9;

  // Historical milestones
  rrect(x,y,w,7.8,C.card,C.teal,1.5);
  secHead("Historical Milestones",x+0.15,y+0.1,w-0.3,C.gold);
  const hist=[
    "1973 — Medicare funded ESRD dialysis; adequacy largely ignored",
    "1974 — National Cooperative Dialysis Study (NCDS) launched by NIH",
    "NCDS aimed to control BUN at 50 vs 100 mg/dL; found strong Kt/V–outcome link",
    "Subsequent studies: mortality risk rises sharply when spKt/V < 1.2",
    "Hemo Study (NIH, late 1990s): no benefit from spKt/V > 1.3 with 3×/week HD",
    "Dose targeting bias identified: failure to reach target = independent mortality risk",
    "KDOQI 2015: minimum target raised to spKt/V ≥ 1.4 per session",
    "Guidelines now mandate Kt/V monitoring standards worldwide",
  ];
  bullets(hist,x+0.15,y+1.0,w-0.3,6.6,10);
  y+=8.1;

  // Scope
  rrect(x,y,w,6.6,C.card,C.teal,1.5);
  secHead("Scope of Adequacy",x+0.15,y+0.1,w-0.3,C.cyan);
  bullets([
    "Urea: small-MW surrogate; not the only uremic toxin",
    "Middle molecules (500–60,000 Da): not captured by Kt/V",
    "Protein-bound toxins (indoxyl sulfate, p-cresol) poorly dialyzed",
    "Residual kidney function (RKF) contributes between sessions",
    "Global kidney replacement ≠ dialysis adequacy alone",
    "Adequacy ≠ treating anemia, CKD-MBD, or nutrition",
  ],x+0.15,y+1.0,w-0.3,5.4,10);
  y+=6.9;

  // URR
  rrect(x,y,w,7.8,C.card,C.orange,1.5);
  secHead("URR — Urea Reduction Ratio",x+0.15,y+0.1,w-0.3,C.orange);
  rrect(x+0.15,y+1.0,w-0.3,1.2,"0A1428",C.orange,1.5);
  htxt("URR = (C₀ − Cf) / C₀ × 100%",
    x+0.15,y+1.1,w-0.3,0.9,18,C.gold,true,"center");
  htxt("C₀ = pre-dialysis BUN   ·   Cf = post-dialysis BUN",
    x+0.15,y+2.3,w-0.3,0.5,9.5,C.muted,false,"center",true);
  bullets([
    "Target: URR > 65% minimum",
    "Simple; requires only pre & post BUN",
    "Does NOT account for ultrafiltration volume",
    "Less accurate than Kt/V — replaced as CMS metric",
    "URR paradoxically decreases as dialysis frequency increases",
    "Cannot be summed across multiple sessions",
    "Still useful as a quick bedside adequacy check",
  ],x+0.15,y+2.9,w-0.3,4.7,10,C.white);
  y+=8.1;
}

// ══════════════════════════════════════════════════════════════
// COL 2 — Kt/V in detail + calculation steps
// ══════════════════════════════════════════════════════════════
{
  const {x,w}=COL[1];
  let y=TOP;

  // Kt/V overview
  rrect(x,y,w,7.5,C.card,C.teal,1.5);
  secHead("Kt/V — The Gold Standard",x+0.15,y+0.1,w-0.3,C.teal);
  s.addText([
    {text:"K",options:{bold:true,color:C.cyan,fontSize:13,fontFace:"Calibri"}},
    {text:" = urea clearance (mL/min)  ",options:{color:C.white,fontSize:11,fontFace:"Calibri"}},
    {text:"t",options:{bold:true,color:C.cyan,fontSize:13,fontFace:"Calibri"}},
    {text:" = treatment time (min)  ",options:{color:C.white,fontSize:11,fontFace:"Calibri"}},
    {text:"V",options:{bold:true,color:C.cyan,fontSize:13,fontFace:"Calibri"}},
    {text:" = urea distribution volume (body water)",options:{color:C.white,fontSize:11,fontFace:"Calibri"}},
  ],{x:x+0.15,y:y+1.0,w:w-0.3,h:0.75,valign:"middle"});

  bullets([
    "spKt/V (single-pool): standard clinical measure from pre/post BUN",
    "eKt/V (equilibrated): corrects for post-dialysis urea rebound",
    "stdKt/V (standard): allows comparison across all frequencies & modalities",
    "Double-pool Kt/V: most accurate; accounts for compartment redistribution",
    "Minimum: spKt/V ≥ 1.4 | eKt/V ≥ 1.2 | stdKt/V ≥ 2.0/week",
    "Women & small patients may need higher weight-normalized dose",
  ],x+0.15,y+1.85,w-0.3,5.4,10);
  y+=7.8;

  // Daugirdas formula
  rrect(x,y,w,4.6,C.card,C.gold,2);
  rect(x,y,w,0.1,C.gold);
  htxt("DAUGIRDAS II FORMULA",x+0.15,y+0.2,w-0.3,0.7,13.5,C.gold,true);
  rrect(x+0.15,y+1.0,w-0.3,1.8,"060F20",C.cyan,1.5);
  htxt("spKt/V = −ln(R − 0.008 × t) + (4 − 3.5R) × UF/W",
    x+0.15,y+1.2,w-0.3,1.2,15.5,C.gold,true,"center");
  htxt("R = Cf/C₀   ·   t = treatment time (min)   ·   UF = ultrafiltrate (L)   ·   W = post-HD weight (kg)",
    x+0.15,y+2.9,w-0.3,0.5,9,C.muted,false,"center",true);
  htxt("Tattersall eKt/V:  eKt/V = spKt/V × (1 − 0.6/t) + 0.03",
    x+0.15,y+3.5,w-0.3,0.8,10,C.cyan,false,"center");
  y+=4.9;

  // Step-by-step
  rrect(x,y,w,20.1,C.card,C.teal,1.5);
  secHead("Calculation — Step by Step",x+0.15,y+0.1,w-0.3,C.cyan);

  const steps=[
    {n:"1",t:"Collect Blood Samples",d:"Pre-BUN (C₀): draw BEFORE session begins.\nPost-BUN (Cf): at end — slow pump to 50 mL/min × 15 sec BEFORE sampling to avoid recirculation artifact."},
    {n:"2",t:"Record Session Parameters",d:"• Treatment time (t) in minutes\n• Post-dialysis body weight (W) in kg\n• Ultrafiltration volume (UF) = pre-weight − post-weight in litres"},
    {n:"3",t:"Calculate R",d:"R = Cf / C₀\nExample: pre-BUN = 60 mg/dL, post-BUN = 18 mg/dL\n→ R = 18 ÷ 60 = 0.30"},
    {n:"4",t:"Apply Daugirdas II",d:"With t=240, UF=2.5 L, W=70 kg:\nspKt/V = −ln(0.30 − 0.008×240) + (4 − 3.5×0.30) × 2.5/70\n           = −ln(−0.62) not valid → indicates formula sensitivity to timing"},
    {n:"5",t:"Interpret the Result",d:"≥ 1.4: Adequate  ✓\n1.2 – 1.39: Borderline — investigate\n< 1.2: Inadequate — immediate intervention"},
    {n:"6",t:"Equilibrated Kt/V",d:"eKt/V = spKt/V × (1 − 0.6/t) + 0.03\nTarget: eKt/V ≥ 1.2\nPreferred for short treatments or when rebound expected"},
  ];
  steps.forEach((st,i)=>{
    const by=y+1.2+i*3.1;
    s.addShape(pres.ShapeType.ellipse,{x:x+0.15,y:by+0.05,w:0.85,h:0.85,
      fill:{color:C.gold},line:{type:"none"}});
    htxt(st.n,x+0.15,by+0.1,0.85,0.75,18,C.navy,true,"center");
    htxt(st.t,x+1.15,by,w-1.35,0.6,11.5,C.cyan,true);
    htxt(st.d,x+1.15,by+0.65,w-1.35,2.3,9.5,C.white,false);
  });
  y+=20.4;
}

// ══════════════════════════════════════════════════════════════
// COL 3 — Factors affecting adequacy (8 factors)
// ══════════════════════════════════════════════════════════════
{
  const {x,w}=COL[2];
  let y=TOP;

  rrect(x,y,w,0.65,"0A1630",C.teal,1.5);
  htxt("FACTORS AFFECTING HD ADEQUACY",x+0.15,y+0.08,w-0.3,0.5,14.5,C.white,true,"center");
  y+=0.85;

  const factors=[
    {t:"1. Dialyzer (Artificial Kidney)",c:C.teal,items:[
      "KoA: mass transfer coeff × area — primary dialyzer property",
      "High-flux > low-flux: removes β₂-microglobulin & middle molecules",
      "Larger surface area (2.0–2.2 m²) → higher clearance",
      "Dialyzer reuse: each reuse decreases effective clearance",
      "Fibre clotting reduces functional surface area",
    ]},
    {t:"2. Blood Flow Rate (Qb)",c:C.cyan,items:[
      "Standard target: 350–500 mL/min",
      "Higher Qb → increased urea clearance (K)",
      "Limited by vascular access function",
      "Access recirculation reduces effective Qb",
      "Verify actual pump speed matches delivered flow",
    ]},
    {t:"3. Dialysate Flow Rate (Qd)",c:C.blue,items:[
      "Standard: 500 mL/min; increase to 800 mL/min for +10% Kt/V",
      "Counter-current flow maximizes concentration gradient",
      "Online HDF uses high Qd for convective clearance",
      "Cost and machine limits may restrict Qd increase",
    ]},
    {t:"4. Treatment Time (Td)",c:C.gold,items:[
      "Conventional: 3–4.5 hours, 3×/week",
      "Longer Td → better solute + fluid removal",
      "Patient shortening of sessions = major risk for inadequacy",
      "Prospective studies favour prolonged treatment times",
      "Nocturnal/extended HD: superior adequacy profile",
    ]},
    {t:"5. Vascular Access",c:C.red,items:[
      "AVF (preferred): lowest recirculation (~5–8%)",
      "AV graft: moderate recirculation",
      "CVC (central catheter): highest recirculation — avoid long term",
      "Needle position: reversal can double recirculation",
      "Stenosis causes low Qb and high recirculation simultaneously",
    ]},
    {t:"6. Residual Kidney Function (RKF)",c:C.green,items:[
      "Continuous clearance between HD sessions",
      "Even 1–2 mL/min GFR removes ~1.5 L/day of solute",
      "Removes middle molecules, Na⁺, phosphate, water",
      "Strong independent predictor of survival",
      "Include Kru in total weekly Kt/V calculation",
    ]},
    {t:"7. Patient-Related Factors",c:C.purple,items:[
      "Body size: larger V (urea distribution volume) → harder target",
      "Gender: women may need higher dose (Hemo Study)",
      "Urea generation rate (G): reflects protein catabolism",
      "Post-dialysis urea rebound can overestimate clearance",
      "Compliance: skipping/shortening sessions = inadequate dose",
    ]},
    {t:"8. Technical & Prescription Errors",c:C.orange,items:[
      "Incorrect blood sampling timing — most common error",
      "Slow pump speed at session start/end",
      "Clotted air traps reduce effective blood volume",
      "Inadequate anticoagulation causes circuit clotting",
      "Wrong dialyzer selected (low KoA for large patient)",
    ]},
  ];

  factors.forEach((f,i)=>{
    const bh=3.55;
    rrect(x,y,w,bh,C.card,f.c,1.2);
    rect(x,y,0.1,bh,f.c);
    htxt(f.t,x+0.25,y+0.1,w-0.35,0.55,11,f.c,true);
    bullets(f.items,x+0.25,y+0.68,w-0.35,bh-0.8,9.5);
    y+=bh+0.2;
  });
}

// ══════════════════════════════════════════════════════════════
// COL 4 — Targets + How to Improve
// ══════════════════════════════════════════════════════════════
{
  const {x,w}=COL[3];
  let y=TOP;

  // Target boxes
  rrect(x,y,w,0.65,"0A1630",C.gold,1.5);
  htxt("GUIDELINE TARGETS",x+0.15,y+0.08,w-0.3,0.5,14.5,C.white,true,"center");
  y+=0.85;

  const targets=[
    {label:"spKt/V per session",val:"≥ 1.4",note:"KDOQI 2015",c:C.green},
    {label:"eKt/V (equilibrated)",val:"≥ 1.2",note:"Tattersall correction",c:C.cyan},
    {label:"URR minimum",val:"> 65%",note:"CMS monitoring",c:C.gold},
    {label:"stdKt/V weekly",val:"≥ 2.0/wk",note:"All modalities",c:C.purple},
  ];
  targets.forEach((t,i)=>{
    const bx=x+(i%2)*(w/2+0.08);
    const by=y+Math.floor(i/2)*2.45;
    const bw=w/2-0.1;
    rrect(bx,by,bw,2.3,C.card,t.c,1.5);
    rect(bx,by,bw,0.09,t.c);
    htxt(t.label,bx+0.1,by+0.15,bw-0.2,0.55,9.5,C.muted,false,"center");
    htxt(t.val,bx,by+0.75,bw,0.95,28,C.white,true,"center");
    htxt(t.note,bx,by+1.75,bw,0.42,9,t.c,true,"center");
  });
  y+=5.3;

  // Guidelines table
  rrect(x,y,w,4.2,C.card,C.teal,1.5);
  secHead("Guidelines Comparison",x+0.15,y+0.1,w-0.3,C.teal);
  rect(x,y+1.0,w,0.5,"0D2244");
  const hcols=["Guideline","Min spKt/V","Target","Notes"];
  const hcw=[3.0,1.5,1.5,2.8];
  let cx=x+0.1;
  hcols.forEach((h,i)=>{htxt(h,cx,y+1.05,hcw[i],0.4,9.5,C.gold,true); cx+=hcw[i]+0.05;});
  const grows=[
    ["KDOQI 2015","1.2","1.4","Higher for women"],
    ["KDIGO 2012","1.2","1.4","Adjust for RKF"],
    ["ERA-EDTA","1.2","1.4","stdKt/V preferred"],
    ["UK Renal Assoc.","1.2","1.4","High-flux memb."],
  ];
  grows.forEach((r,ri)=>{
    rect(x,y+1.5+ri*0.62,w,0.6,ri%2?"0D1E40":"091630");
    let cx2=x+0.1;
    r.forEach((cell,ci)=>{
      htxt(cell,cx2,y+1.55+ri*0.62,hcw[ci],0.52,9.2,ci===0?C.cyan:C.white,ci===0);
      cx2+=hcw[ci]+0.05;
    });
  });
  y+=4.5;

  // How to Improve
  rrect(x,y,w,0.65,"0A1630",C.green,1.5);
  htxt("HOW TO IMPROVE ADEQUACY",x+0.15,y+0.08,w-0.3,0.5,14.5,C.white,true,"center");
  y+=0.85;

  const strategies=[
    {icon:"🕐",t:"Extend Treatment Time",c:C.gold,items:[
      "Increase session from 3 → 4–4.5 hours",
      "Nocturnal HD (6–8 hrs, 3–6×/week): superior adequacy",
      "Longer time → lower UF rate → fewer cramps",
    ]},
    {icon:"💉",t:"Optimize Vascular Access",c:C.red,items:[
      "Promote AVF; avoid long-term CVC",
      "Treat access stenosis promptly (fistulogram + PTA)",
      "Correct needle placement; avoid reversal",
    ]},
    {icon:"⚡",t:"Increase Blood Flow Rate",c:C.cyan,items:[
      "Target Qb 400–500 mL/min if access allows",
      "Treat stenosis limiting Qb achievement",
      "Verify actual pump delivery matches prescription",
    ]},
    {icon:"💧",t:"Increase Dialysate Flow",c:C.blue,items:[
      "Increase Qd 500 → 800 mL/min: ~10% Kt/V gain",
      "Counter-current flow configuration",
      "Online HDF: convective volumes 20–25 L/session",
    ]},
    {icon:"🔬",t:"Upgrade Dialyzer",c:C.green,items:[
      "Switch to high-flux, high-KoA membrane",
      "Larger area (2.0–2.2 m²) for large patients",
      "Limit reuse; test clearance if reuse programme",
    ]},
    {icon:"📅",t:"Increase Frequency",c:C.purple,items:[
      "5–6×/week short daily HD: better phosphate & BP",
      "Home HD: flexible schedule for higher dose",
      "More frequent dialysis preserves RKF",
    ]},
    {icon:"🩺",t:"Preserve RKF",c:C.teal,items:[
      "Avoid NSAIDs, IV contrast, aminoglycosides",
      "Maintain euvolemia — prevent hypovolemia",
      "ACE-I/ARB may slow RKF loss",
    ]},
    {icon:"📋",t:"Prescription & Education",c:C.orange,items:[
      "Never allow session shortening without review",
      "Correct post-BUN sampling with slow-pump method",
      "Review adequacy data monthly; adjust prescription",
    ]},
  ];

  strategies.forEach((st,i)=>{
    const bh=3.35;
    rrect(x,y,w,bh,C.card,st.c,1.2);
    rect(x,y,0.1,bh,st.c);
    htxt(st.icon+" "+st.t,x+0.25,y+0.1,w-0.35,0.58,11,st.c,true);
    bullets(st.items,x+0.25,y+0.72,w-0.35,bh-0.85,9.5);
    y+=bh+0.18;
  });
}

// ══════════════════════════════════════════════════════════════
// COL 5 — Troubleshooting + RKF + Middle Molecules + Summary
// ══════════════════════════════════════════════════════════════
{
  const {x,w}=COL[4];
  let y=TOP;

  // Troubleshooting
  rrect(x,y,w,0.65,"0A1630",C.red,1.5);
  htxt("TROUBLESHOOTING LOW Kt/V",x+0.12,y+0.08,w-0.24,0.5,13.5,C.white,true,"center");
  y+=0.85;

  const trouble=[
    {cause:"Sample Timing Error",c:C.red,
     check:"Post-BUN drawn too early; no slow-pump technique used",
     fix:"Slow pump to 50 mL/min × 15 sec; sample arterial port"},
    {cause:"Short Treatment Time",c:C.gold,
     check:"Patient requests early stop; late start; alarm interruptions",
     fix:"Document actual time; address symptoms proactively"},
    {cause:"Access Recirculation",c:C.orange,
     check:"CVC, reversed needles, or access stenosis",
     fix:"Fistulogram if dysfunction; correct needle orientation"},
    {cause:"Low Blood Flow (Qb)",c:C.cyan,
     check:"Stenosis, arterial collapse, pump calibration error",
     fix:"Treat stenosis; verify actual pump delivery rate"},
    {cause:"Dialyzer Clotting/Reuse",c:C.green,
     check:"Fibre clotting, inadequate anticoagulation, reuse decline",
     fix:"Optimize heparin; limit reuse; check KoA periodically"},
    {cause:"Large Body Size (↑V)",c:C.purple,
     check:"V > 50 L in large patients; underestimated in obese",
     fix:"Increase Td or frequency; use anthropometric V estimate"},
  ];
  trouble.forEach((t,i)=>{
    const bh=3.6;
    rrect(x,y,w,bh,C.card,t.c,1.2);
    rect(x,y,0.1,bh,t.c);
    htxt("⚠ "+t.cause,x+0.25,y+0.08,w-0.35,0.55,11,t.c,true);
    htxt("CHECK: "+t.check,x+0.25,y+0.7,w-0.35,0.9,9.2,C.muted,false,"left",true);
    htxt("FIX: "+t.fix,x+0.25,y+1.65,w-0.35,1.7,9.5,C.green,false);
    y+=bh+0.18;
  });

  // Middle molecules / HDF
  rrect(x,y,w,7.5,C.card,C.cyan,1.5);
  secHead("Beyond Urea: Middle Molecules & HDF",x+0.15,y+0.1,w-0.24,C.cyan);
  bullets([
    "MW 500–60,000 Da — not removed by low-flux membranes",
    "β₂-microglobulin (11,800 Da): dialysis-related amyloid",
    "High-flux membranes remove middle molecules",
    "Online HDF: convective volumes 20–25 L/session",
    "ESHOL & CONTRAST 2023: HDF reduces mortality vs low-flux HD",
    "Standard Kt/V does NOT capture middle-molecule clearance",
    "High-volume HDF now preferred in Europe where available",
  ],x+0.15,y+1.0,w-0.3,6.3,10);
  y+=7.8;

  // RKF
  rrect(x,y,w,5.8,C.card,C.green,1.5);
  secHead("Residual Kidney Function (RKF)",x+0.15,y+0.1,w-0.24,C.green);
  bullets([
    "Even 1–2 mL/min GFR clears ~1.5 L/day of solute",
    "Continuous clearance between HD sessions (Kd=0 off dialysis)",
    "Removes phosphate, Na⁺, middle molecules",
    "Strong predictor of survival — protect at all costs",
    "Include Kru in total weekly Kt/V (Kd + Kru)",
    "Avoid nephrotoxins; RAS blockade may slow RKF decline",
  ],x+0.15,y+1.0,w-0.3,4.6,10);
  y+=6.1;

  // Key takeaways
  rrect(x,y,w,0.65,"0A1630",C.gold,1.5);
  htxt("KEY TAKE-AWAYS",x+0.15,y+0.08,w-0.3,0.5,14.5,C.white,true,"center");
  y+=0.85;

  const msgs=[
    {n:"01",m:"spKt/V ≥ 1.4 is the minimum — not the goal. Aim higher for women and large patients.",c:C.green},
    {n:"02",m:"Vascular access is the most modifiable determinant of delivered dialysis dose.",c:C.red},
    {n:"03",m:"Every minute of treatment cut short increases mortality risk — never shorten without review.",c:C.gold},
    {n:"04",m:"RKF is precious. Protect it: avoid nephrotoxins, maintain euvolemia, use RAS blockade.",c:C.cyan},
    {n:"05",m:"High-flux/HDF addresses middle-molecule toxicity that Kt/V alone cannot capture.",c:C.purple},
    {n:"06",m:"Low Kt/V: always check sample timing FIRST before adjusting prescription.",c:C.orange},
  ];
  msgs.forEach((m,i)=>{
    rrect(x,y,w,2.55,C.card,m.c,1.2);
    rect(x,y,0.7,2.55,m.c+"55");
    htxt(m.n,x,y+0.65,0.7,1.0,22,C.white,true,"center");
    htxt(m.m,x+0.85,y+0.28,w-1.0,1.9,10.5,C.white,false,"left");
    y+=2.75;
  });
}

// ══════════════════════════════════════════════════════════════
// FOOTER
// ══════════════════════════════════════════════════════════════
rect(0,H-1.0,W,1.0,C.teal);
rect(0,H-1.0,W,0.06,C.gold);
htxt(
  "Brenner & Rector's The Kidney (10th ed.)  ·  KDOQI Clinical Practice Guidelines 2015  ·  HEMO Study (NEJM 2002)  ·  KDIGO 2012  ·  ERA-EDTA Guidelines  ·  ESHOL Study  ·  CONTRAST Trial 2023",
  0.6,H-0.82,W-1.2,0.6,10.5,C.offwhite,false,"center",true);

// ── OUTPUT ───────────────────────────────────────────────────
pres.writeFile({fileName:"/home/daytona/workspace/hd-adequacy-poster/HD_Adequacy_Conference_Poster.pptx"})
  .then(()=>console.log("✅ Poster saved."))
  .catch(e=>{console.error("❌",e);process.exit(1);});
Running Command

cd /home/daytona/workspace/hd-adequacy-poster && node poster.js 2>&1

Editing File

~/hd-adequacy-poster/poster.js

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/hd-adequacy-poster/poster.js'
Running Command

cd /home/daytona/workspace/hd-adequacy-poster && node poster.js 2>&1

Your conference poster is ready — one single A0 landscape slide with everything on it:

HD Adequacy Conference Poster

Presentation · PPTX


Poster Layout (5 columns, A0 Landscape ~47" × 33")

ColumnContent
Col 1What is HD Adequacy · Historical milestones (NCDS → Hemo Study) · Scope · URR formula & limitations
Col 2Kt/V types (sp/eq/std) · Daugirdas II formula box · Step-by-step calculation guide (6 steps with circles)
Col 38 factor cards with colored side-bars: Dialyzer, Qb, Qd, Treatment Time, Access, RKF, Patient factors, Technical errors
Col 44 target boxes (spKt/V ≥1.4, eKt/V ≥1.2, URR >65%, stdKt/V ≥2.0/wk) · Guidelines comparison table · 8 improvement strategy cards
Col 5Troubleshooting 6 causes (with Check/Fix format) · Beyond Urea: middle molecules & HDF · RKF section · 6 key take-away badges
Design: Navy background, teal/gold/cyan accents, rounded cards with color-coded left-side bars, bold formula boxes, numbered step circles — print-ready at A0.
This is a shared conversation. Sign in to Orris to start your own chat.