Biophilic Design Performance Diagnostic Audit Tool

This diagnostic tool provides an evidence-aligned snapshot of how effectively a building integrates biophilic design principles across light, nature cues, indoor environmental quality (IEQ), and spatial psychology.

Designed for: architects, workplace teams, healthcare environments, education settings, and retrofit projects.

Answer 13 questions. Get a score out of 100 plus the fastest improvements to prioritise next. (Results are calculated in your browser.)


Progress
0 / 13 answered

Questions

Light & Circadian Support

Daylight access, glare control, and lighting strategies that support circadian entrainment, visual comfort, and sustained attention. Research consistently links natural light exposure and real views to stress recovery, alertness, and affect regulation when glare and overheating are controlled.

1) How much of the regularly occupied space has usable daylight?



2) Is daylight comfortable (low glare, good shading/blinds)?


3) Do you use lighting that supports daytime alertness and evening wind-down?


4) Do people have views of greenery or sky from key areas (desks, beds, learning areas)?


Nature Cues & Sensory Comfort

Visible and sensory exposure to vegetation, natural materials, water, and seasonal change. Direct nature contact and coherent natural cues are associated with stress recovery and improved mood, especially when exposure is frequent and distributed across daily routines.

5) Which best describes greenery integration?



6) Are natural materials (timber/stone/linen) present and authentic?


7) Are there calming natural cues (garden, water element, quiet outdoor area, birdsong, etc.)?


8) Do occupants experience seasonal change (light, planting cycles, outdoor access)?


Indoor Environmental Quality (IEQ)

Ventilation, thermal stability, acoustics, and maintenance capacity. Many health and performance outcomes in buildings are mediated by IEQ fundamentals; biophilic strategies are most effective when these environmental systems are already performing reliably.

9) How does air quality feel most days?



10) How stable is thermal comfort?


11) How noisy is the environment during normal use?


12) Can you maintain planting and environmental systems reliably?


Space Psychology

The balance between open views (prospect) and protected retreat (refuge) influences perceived safety, cognitive load, and comfort. Spatial legibility and refuge opportunities support restoration and reduce overstimulation in cognitively demanding environments

13) Do people have both open views (prospect) and sheltered spaces (refuge)?



Results

Complete all questions, then click “Calculate score”.

Note: Higher scores reflect stronger alignment with research-supported exposure pathways. Effects are influenced by frequency of exposure, baseline conditions, and ongoing maintenance. This diagnostic is educational and indicative. It does not replace professional assessment or UK compliance checks.

`;const w = window.open("", "_blank"); if (!w) { // Fallback: open in same tab if blocked (still lets user save as PDF) document.open(); document.write(reportHtml); document.close(); window.print(); return; } w.document.open(); w.document.write(reportHtml); w.document.close(); } function escapeHtmlSafe(str) { return String(str ?? "").replace(/[&<>"']/g, s => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[s])); }function reportStyles() { return ``; }function openReportWindow(data) { const w = window.open("", "_blank", "noopener,noreferrer"); if (!w) return alert("Popup blocked. Please allow popups to download the report.");const html = `Biophilic Diagnostic Report ${reportStyles()}
Biophilic Design Diagnostic Report
Generated: ${escapeHtmlSafe(data.date)}
Sector: ${escapeHtmlSafe(data.sector)} • UK context: ${escapeHtmlSafe(data.uk)}
${escapeHtmlSafe(data.score)}/100
${escapeHtmlSafe(data.tier)}

Summary

${escapeHtmlSafe(data.note)}

Section scores

${data.sectionsHtml}

Top improvements to prioritise next

${data.topHtml}

Full recommendation plan

${data.planHtml}

Recommended reading

    ${data.linksHtml}
This report is indicative and educational. It does not replace professional assessment or UK compliance checks.
`;w.document.open(); w.document.write(html); w.document.close(); } // ---------- Main ---------- function calculate() { if (!validateAllAnswered()) { errBox.style.display = "block"; errBox.textContent = "Please answer all questions before calculating your score."; return; } errBox.style.display = "none";const a = {}; for (let i = 1; i <= 13; i++) a[`q${i}`] = getVal(`q${i}`);const light = sum([a.q1, a.q2, a.q3, a.q4]); const nature = sum([a.q5, a.q6, a.q7, a.q8]); const ieq = sum([a.q9, a.q10, a.q11, a.q12]); const space = sum([a.q13]); const total = light + nature + ieq + space;const score = Math.round((total / MAX_POINTS) * 100); const tier = tierFromScore(score); const tierClass = `bio-tier-${tier.label.toLowerCase().replace(/\s+/g, "-")}`; const sections = [ { name: "Light & circadian", score: light, max: 25 }, { name: "Nature cues", score: nature, max: 25 }, { name: "IEQ", score: ieq, max: 25 }, { name: "Space psychology", score: space, max: 10 } ];const lows = lowestSections(sections); const topImprovements = buildTopImprovements(lows, sections); const links = recLinks(lows[0], sectorEl ? sectorEl.value : "other"); const fullPlanHtml = buildFullPlanHtml(sections);const sector = sectorEl ? sectorEl.value : "other"; const uk = (ukEl && ukEl.checked) ? "Yes" : "No";const contactLink = `${CONTACT_URL}?source=diagnostic` + `&score=${encodeURIComponent(score)}` + `§or=${encodeURIComponent(sector)}` + `&uk=${encodeURIComponent(uk)}` + `&priority=${encodeURIComponent(lows.map(l => l.name).join(", "))}`;const secHtml = sections.map(s => `
${s.name}
${s.score}/${s.max}
`).join(""); const impHtml = topImprovements.map(t => `
  • ${t}
  • `).join(""); const linksHtml = links.map(l => `
  • ${l.t}
  • `).join("");results.innerHTML = `

    Results

    ${score}/100
    ${tier.label}

    ${tier.note}

    ${secHtml}

    Top improvements to prioritise next

      ${impHtml}

    Full recommendation plan

    ${fullPlanHtml}
    Recommended reading
      ${linksHtml}
    ${(ukEl && ukEl.checked) ? ukNoteHtml() : ""}
    Need a tailored biophilic plan?
    Share your score and constraints. We’ll outline priority actions for your building type.
    `;// Report-only PDF handler (new tab) — open window immediately (prevents popup blocking) const printBtn = document.getElementById("bioPrintBtn"); if (printBtn) { printBtn.addEventListener("click", async function (e) { e.preventDefault();// Open immediately for iOS Safari const w = window.open("", "_blank"); if (!w) { alert("Please allow popups to view the report."); return; }// Show an intentional loading page (instead of about:blank) w.document.open(); w.document.write(` Generating report…

    Generating your report…

    This usually takes a second.

    `); w.document.close();// Build payload (same as you already do) const payload = { date: new Date().toLocaleDateString(undefined, { year: "numeric", month: "short", day: "2-digit" }), score, tierLabel: tier.label, tierNote: tier.note, sector, sections, topImprovements, fullPlanHtml, links };try { const res = await fetch("/wp-json/biophilic/v1/report", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) });const json = await res.json();if (!res.ok || !json.rid) { w.document.body.innerHTML = "

    Could not generate report. Please try again.

    "; return; }// Navigate to real report w.location.replace(`/diagnostic-report/?rid=${encodeURIComponent(json.rid)}`); } catch (err) { w.document.body.innerHTML = "

    Could not generate report. Please try again.

    "; } }); }results.scrollIntoView({ behavior: "smooth", block: "start" }); }function resetAll() { form.reset(); errBox.style.display = "none"; errBox.textContent = ""; results.innerHTML = `

    Results

    Complete all questions, then click “Calculate score”.
    `; updateProgress(); }form.addEventListener("change", updateProgress); calcBtn.addEventListener("click", calculate); resetBtn.addEventListener("click", resetAll);updateProgress(); });