Assess a child's nutritional status by calculating their Weight-for-Height Z-Score (WHZ).
Calculator Inputs
Enter the child's age in months.
Enter the child's height in centimeters (cm).
Enter the child's weight in kilograms (kg).
Male
Female
Select the child's biological sex.
Results
—
WHZ = (Weight / Median Weight) – 1) / Standard Deviation
Weight-for-Height Z-Score Trends
Median Weight (M)Observed Weight (O)
Growth Reference Data (WHO Standards)
Age (Months)
Sex
Height (cm)
Median Weight (kg)
SD -2 (kg)
SD -1 (kg)
SD 0 (Median) (kg)
SD +1 (kg)
SD +2 (kg)
Weight for Height Z-Score Calculator Explained
The weight for height z score calculator is an indispensable tool for healthcare professionals, nutritionists, and parents alike. It helps to accurately assess a child's physical development by comparing their current weight and height against established growth standards. Understanding this metric is crucial for early detection and intervention of potential growth issues, ensuring children receive the care they need to thrive.
What is Weight for Height Z-Score (WHZ)?
The Weight-for-Height Z-Score (WHZ) is a statistical measure used to assess thinness or wasting in children, typically aged 0 to 5 years. It quantifies how much a child's weight deviates from the median weight for children of the same height and sex, expressed in standard deviation (SD) units. This z-score is a key indicator of acute malnutrition.
Who should use it:
Pediatricians and healthcare providers for routine check-ups and growth monitoring.
Nutritionists and public health workers to screen populations for malnutrition.
Parents who want to understand their child's growth trajectory in relation to established norms.
Researchers studying child growth and nutritional status.
Common misconceptions:
Confusing WHZ with BMI-for-age: WHZ is for assessing wasting (acute malnutrition) in younger children, whereas BMI-for-age is more commonly used for assessing underweight, overweight, or obesity in older children and adolescents.
Over-reliance on a single reading: While a single WHZ score is informative, tracking changes over time provides a more comprehensive picture of a child's nutritional status.
Using it for all age groups: WHZ is most relevant for children where height is a primary determinant of weight for assessing acute malnutrition. For older children, BMI-for-age becomes a more appropriate indicator.
Weight for Height Z-Score Formula and Mathematical Explanation
The calculation of the Weight-for-Height Z-Score (WHZ) involves comparing a child's actual weight to the median weight and standard deviation for children of the same height and sex, using data from established growth charts, such as those provided by the World Health Organization (WHO). The formula is derived from standard statistical principles for calculating z-scores.
The general formula for a z-score is: Z = (Observed Value – Median Value) / Standard Deviation
For the Weight-for-Height Z-Score (WHZ), this translates to:
WHZ = (W – M) / SD
Where:
W is the child's observed weight.
M is the median weight for a child of the same height and sex, according to WHO growth standards.
SD is the standard deviation of weight for a child of the same height and sex, according to WHO growth standards.
Important Note: The values for M (Median Weight) and SD (Standard Deviation) are not fixed but are derived from reference data tables (like the WHO Growth Standards) that provide these values for specific height percentiles and sex. Our calculator uses these reference tables internally to find the appropriate M and SD values based on the child's height and sex.
Variables Table
Variable
Meaning
Unit
Typical Range/Interpretation
W
Child's observed weight
Kilograms (kg)
Typically positive, e.g., 8.5 kg
H
Child's observed height
Centimeters (cm)
Typically positive, e.g., 75 cm
Age
Child's age
Months
Typically positive, e.g., 18 months
Sex
Child's biological sex
N/A
Male or Female
M
Median weight for height and sex (from reference data)
Kilograms (kg)
Varies with height and sex
SD
Standard deviation of weight for height and sex (from reference data)
Kilograms (kg)
Varies with height and sex (usually positive)
WHZ
Weight-for-Height Z-Score
Standard Deviations (SD)
≥ -2 SD: Acceptable nutritional status
< -2 SD: Thinning/Wasting
≥ -3 SD: Severe wasting
(Note: For WHZ, positive scores are less common and typically not a concern for wasting)
Practical Examples (Real-World Use Cases)
Example 1: Routine Growth Monitoring
Scenario: A pediatrician is assessing a 24-month-old boy named Leo. His height is 86 cm, and his weight is 11.8 kg. The pediatrician wants to check his nutritional status using the WHZ calculator.
Inputs:
Child's Age: 24 months
Child's Height: 86 cm
Child's Weight: 11.8 kg
Child's Sex: Male
Calculation (using the calculator):
Lookup Median Weight (M) for 86cm male: ~11.5 kg
Lookup Standard Deviation (SD) for 86cm male: ~1.2 kg
WHZ = (11.8 kg – 11.5 kg) / 1.2 kg
WHZ = 0.3 kg / 1.2 kg = 0.25
Primary Result: WHZ = 0.25
Intermediate Values:
Median Weight (M): 11.5 kg
Standard Deviation (SD): 1.2 kg
Observed Weight (W): 11.8 kg
Interpretation: Leo's WHZ score of 0.25 is well above -2 SD. This indicates that his weight is appropriate for his height, and he is considered to have an acceptable nutritional status regarding wasting. The pediatrician can continue with routine care.
Example 2: Identifying Potential Wasting
Scenario: A community health worker is screening children in a rural village. She encounters a 30-month-old girl named Maya. Maya's height is 80 cm, and her weight is 8.5 kg. The health worker uses the WHZ calculator to assess her status.
Inputs:
Child's Age: 30 months
Child's Height: 80 cm
Child's Weight: 8.5 kg
Child's Sex: Female
Calculation (using the calculator):
Lookup Median Weight (M) for 80cm female: ~9.8 kg
Lookup Standard Deviation (SD) for 80cm female: ~1.1 kg
WHZ = (8.5 kg – 9.8 kg) / 1.1 kg
WHZ = -1.3 kg / 1.1 kg = -1.18
Primary Result: WHZ = -1.18
Intermediate Values:
Median Weight (M): 9.8 kg
Standard Deviation (SD): 1.1 kg
Observed Weight (W): 8.5 kg
Interpretation: Maya's WHZ score of -1.18 is between -2 SD and +2 SD, indicating an acceptable nutritional status regarding wasting. Although her weight is below the median for her height, it is not low enough to be classified as wasting. However, the health worker will monitor Maya closely and may provide nutritional counseling to her mother.
Example 3: Case of Severe Wasting
Scenario: A clinic in an area affected by food insecurity is seeing children with significant health issues. A 15-month-old girl, Amina, presents with a height of 72 cm and a weight of 6.5 kg.
Inputs:
Child's Age: 15 months
Child's Height: 72 cm
Child's Weight: 6.5 kg
Child's Sex: Female
Calculation (using the calculator):
Lookup Median Weight (M) for 72cm female: ~8.6 kg
Lookup Standard Deviation (SD) for 72cm female: ~1.0 kg
WHZ = (6.5 kg – 8.6 kg) / 1.0 kg
WHZ = -2.1 kg / 1.0 kg = -2.1
Primary Result: WHZ = -2.1
Intermediate Values:
Median Weight (M): 8.6 kg
Standard Deviation (SD): 1.0 kg
Observed Weight (W): 6.5 kg
Interpretation: Amina's WHZ score of -2.1 falls below -2 SD. This indicates wasting, a sign of acute malnutrition. Given that it's below -2 SD, it suggests moderate wasting. If the score were below -3 SD, it would indicate severe wasting. Amina requires immediate nutritional intervention and medical assessment.
How to Use This Weight for Height Z-Score Calculator
Using our weight for height z score calculator is straightforward and designed for quick, accurate assessment. Follow these steps:
Enter Child's Age: Input the child's age in months. This helps in referencing the correct growth datasets, although height is the primary driver for WHZ.
Enter Child's Height: Measure the child's height accurately in centimeters (cm) and enter the value.
Enter Child's Weight: Measure the child's weight accurately in kilograms (kg) and enter the value.
Select Child's Sex: Choose either 'Male' or 'Female' from the dropdown menu.
Calculate: Click the "Calculate Z-Score" button.
How to Read Results:
Primary Result (WHZ Score): This is the main output.
≥ -2.0 SD: Acceptable nutritional status (child is not wasted).
-2.0 SD to -2.9 SD: Moderate Wasting (child is thin for their height).
≤ -3.0 SD: Severe Wasting (child is dangerously thin for their height and requires urgent attention).
Intermediate Values: These show the median weight (M) and standard deviation (SD) used in the calculation, providing context.
Formula Explanation: Understand how the WHZ is derived from the observed weight, median weight, and standard deviation.
Decision-Making Guidance: A WHZ score below -2.0 SD signals a need for further nutritional assessment and intervention. Consult with a healthcare professional for diagnosis and management plans. Scores below -3.0 SD require immediate medical attention.
Key Factors That Affect Weight for Height Z-Score Results
While the weight for height z score calculator provides a precise measurement, several underlying factors influence a child's WHZ score. Understanding these can provide deeper insights into their nutritional status and potential health concerns:
Recent Illness or Infection: Acute illnesses (like diarrhea, vomiting, or fevers) can lead to rapid weight loss, significantly lowering the WHZ score and indicating wasting. The body prioritizes immediate survival over growth during sickness.
Food Insecurity and Dietary Intake: Insufficient or poor-quality food intake is a primary driver of low WHZ scores. Limited access to nutrient-dense foods, especially during critical developmental periods, directly impacts a child's ability to maintain adequate weight for their height.
Infant and Young Child Feeding Practices: Inadequate breastfeeding, poor complementary feeding (timing, diversity, frequency, and preparation of foods), and lack of appropriate nutritional support can lead to inadequate weight gain relative to height.
Chronic Health Conditions: Underlying chronic diseases, such as malabsorption syndromes, chronic infections (like HIV/AIDS or tuberculosis), or metabolic disorders, can impair nutrient absorption and utilization, leading to persistent low WHZ scores.
Socioeconomic Factors and Access to Healthcare: Poverty, lack of access to clean water and sanitation, and limited access to timely healthcare services can indirectly affect a child's WHZ score by increasing disease burden and reducing nutritional support.
Genetic Predisposition and Underlying Growth Potential: While WHZ focuses on acute malnutrition, a child's inherent genetic growth potential can play a role. However, deviation below -2 SD usually points to environmental or health issues rather than just genetics.
Age and Developmental Stage: While WHZ primarily uses height, the child's age is critical context. Rapid growth phases or periods of increased nutritional demand (like weaning) can make children more vulnerable to nutritional deficits if intake doesn't keep pace.
Frequently Asked Questions (FAQ)
What is the difference between WHZ and WAZ?
WHZ (Weight-for-Height Z-Score) assesses wasting (thinness) by comparing a child's weight to the median weight for their *height*. WAZ (Weight-for-Age Z-Score) assesses underweight by comparing a child's weight to the median weight for their *age*. WHZ is more sensitive to acute malnutrition.
Can a child have a normal WHZ score but still be unhealthy?
Yes. A WHZ score of -2.0 SD or above indicates no wasting, but a child could still have other health issues, deficiencies, or be at risk for future problems. WHZ specifically measures thinness relative to height.
At what height percentile should I consult the WHO growth charts?
The WHO growth standards provide data across a range of heights and ages. For WHZ, the calculation uses the child's actual measured height to find the corresponding median weight and SD from the reference data. Our calculator automatically handles this lookup based on the entered height.
Is a negative WHZ score always bad?
No. A negative WHZ score simply means the child weighs less than the median for their height. Scores between -2.0 SD and 0 SD are considered within the acceptable range. Scores below -2.0 SD indicate wasting and require attention.
How often should a child's WHZ be checked?
For children at risk, or during nutritional surveillance programs, WHZ may be checked frequently (e.g., monthly). For routine check-ups in healthy children, it might be part of annual assessments or whenever concerns about weight loss or growth arise.
Can adults use this calculator?
No, the Weight-for-Height Z-Score (WHZ) is specifically designed for assessing nutritional status in children, primarily under the age of five, and is based on WHO growth standards for this age group. For adults, Body Mass Index (BMI) is the standard measure.
What is the best way to improve a low WHZ score?
Improving a low WHZ score involves addressing the underlying cause. This typically includes increasing caloric and nutrient intake through appropriate feeding practices, treating any infections or chronic illnesses, and providing nutritional supplements if recommended by a healthcare professional.
Does the calculator account for prematurity?
This calculator uses standard WHO growth charts which are primarily for term infants and children. For premature infants, specialized growth charts and assessment tools are typically used, as their growth trajectory differs significantly.
Related Tools and Internal Resources
BMI Calculator: Understand adult and older child weight status.
// WHO Growth Standards Data – Simplified for demonstration
// Data source: Based on WHO Growth Standards (2006), provided for reference.
// Note: Actual M and SD values vary significantly with height. This table provides sample reference points.
// For precise calculations, interpolation or lookup from detailed WHO datasets is required.
// This simplified dataset represents approximate values at specific height points for demonstration.
var growthData = {
male: {
heights: [45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115], // cm
medianWeight: [2.5, 3.5, 4.6, 5.8, 7.0, 8.3, 9.7, 11.2, 12.8, 14.5, 16.3, 18.2, 20.2, 22.3, 24.5], // kg
sdWeight: [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8] // kg
},
female: {
heights: [45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115], // cm
medianWeight: [2.3, 3.3, 4.4, 5.6, 6.8, 8.0, 9.4, 10.8, 12.3, 13.9, 15.6, 17.4, 19.3, 21.3, 23.5], // kg
sdWeight: [0.4, 0.5, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7] // kg
}
};
function findNearestIndex(value, arr) {
var low = 0;
var high = arr.length – 1;
var mid;
while (low <= high) {
mid = Math.floor((low + high) / 2);
if (arr[mid] === value) {
return mid;
} else if (arr[mid] < value) {
low = mid + 1;
} else {
high = mid – 1;
}
}
// After loop, low is the index of the first element greater than value,
// and high is the index of the first element less than value.
// We need to return the index closest to the value.
if (high = arr.length) return high; // value is larger than all elements
return (value – arr[high] < arr[low] – value) ? high : low;
}
function getGrowthData(heightCm, sex) {
var sexData = growthData[sex];
var heights = sexData.heights;
var medianWeights = sexData.medianWeight;
var sdWeights = sexData.sdWeight;
var index = findNearestIndex(heightCm, heights);
// Simple linear interpolation for more accuracy if needed,
// but nearest value is often sufficient for basic calculators.
// For simplicity, we'll use the nearest value.
var medianWeight = medianWeights[index];
var sdWeight = sdWeights[index];
// Handle edge cases where height might be outside our dataset range
if (heightCm heights[heights.length – 1]) {
medianWeight = medianWeights[heights.length – 1];
sdWeight = sdWeights[heights.length – 1];
}
return { medianWeight: medianWeight, sdWeight: sdWeight };
}
function calculateZScore() {
var childAge = parseFloat(document.getElementById('childAge').value);
var childHeight = parseFloat(document.getElementById('childHeight').value);
var childWeight = parseFloat(document.getElementById('childWeight').value);
var sex = document.getElementById('sex').value;
var isValid = true;
// Clear previous errors
document.getElementById('childAgeError').style.display = 'none';
document.getElementById('childHeightError').style.display = 'none';
document.getElementById('childWeightError').style.display = 'none';
// Input validation
if (isNaN(childAge) || childAge <= 0) {
document.getElementById('childAgeError').innerText = 'Please enter a valid age in months.';
document.getElementById('childAgeError').style.display = 'block';
isValid = false;
}
if (isNaN(childHeight) || childHeight <= 0) {
document.getElementById('childHeightError').innerText = 'Please enter a valid height in centimeters.';
document.getElementById('childHeightError').style.display = 'block';
isValid = false;
} else if (childHeight 115) { // Typical range for WHO charts
document.getElementById('childHeightError').innerText = 'Height should be between 45cm and 115cm for standard WHO references.';
document.getElementById('childHeightError').style.display = 'block';
// Allow calculation but warn user
}
if (isNaN(childWeight) || childWeight 30) { // Arbitrary upper limit for young children
document.getElementById('childWeightError').innerText = 'Weight seems unusually high for a young child. Please double-check.';
document.getElementById('childWeightError').style.display = 'block';
// Allow calculation but warn user
}
if (!isValid) {
document.getElementById('primaryResult').innerText = '–';
document.getElementById('intermediateValues').innerHTML = ";
return;
}
var growthInfo = getGrowthData(childHeight, sex);
var medianWeight = growthInfo.medianWeight;
var sdWeight = growthInfo.sdWeight;
var whzScore = (childWeight – medianWeight) / sdWeight;
// Display primary result
var primaryResultElement = document.getElementById('primaryResult');
primaryResultElement.innerText = whzScore.toFixed(2) + ' SD';
// Add interpretation text
var interpretation = ";
if (whzScore < -3.0) {
interpretation = "Severe Wasting";
primaryResultElement.style.color = '#dc3545'; // Red for severe
} else if (whzScore < -2.0) {
interpretation = "Moderate Wasting";
primaryResultElement.style.color = '#ffc107'; // Yellow/Orange for moderate
} else {
interpretation = "Acceptable Status";
primaryResultElement.style.color = 'var(–success-color)'; // Green for acceptable
}
primaryResultElement.innerHTML += '' + interpretation + '';
// Display intermediate results
var intermediateValuesHtml = '
Median Weight (M) for Height: ' + medianWeight.toFixed(2) + ' kg
' +
'
Standard Deviation (SD): ' + sdWeight.toFixed(2) + ' kg
' +
'
Observed Weight (W): ' + childWeight.toFixed(2) + ' kg
';
document.getElementById('intermediateValues').innerHTML = intermediateValuesHtml;
updateChart(sex, childHeight, childWeight, medianWeight, sdWeight);
populateGrowthTable();
}
function populateGrowthTable() {
var sex = document.getElementById('sex').value;
var sexData = growthData[sex];
var tableBody = document.getElementById('growthTable').getElementsByTagName('tbody')[0];
tableBody.innerHTML = "; // Clear existing rows
// Add a row for the calculated height if it's not exactly in the table
var calculatedHeightIndex = findNearestIndex(parseFloat(document.getElementById('childHeight').value), sexData.heights);
var heightsToAdd = sexData.heights.slice(); // Copy array
var medianWeightsToAdd = sexData.medianWeight.slice();
var sdWeightsToAdd = sexData.sdWeight.slice();
var enteredHeight = parseFloat(document.getElementById('childHeight').value);
var enteredWeight = parseFloat(document.getElementById('childWeight').value);
// Check if entered height is already represented or very close
if (heightsToAdd.indexOf(enteredHeight) === -1 && enteredHeight >= heightsToAdd[0] && enteredHeight <= heightsToAdd[heightsToAdd.length – 1]) {
// Insert the entered height and its calculated M/SD into the arrays for sorting
var insertIndex = 0;
while(insertIndex < heightsToAdd.length && heightsToAdd[insertIndex] < enteredHeight) {
insertIndex++;
}
heightsToAdd.splice(insertIndex, 0, enteredHeight);
medianWeightsToAdd.splice(insertIndex, 0, getGrowthData(enteredHeight, sex).medianWeight);
sdWeightsToAdd.splice(insertIndex, 0, getGrowthData(enteredHeight, sex).sdWeight);
}
for (var i = 0; i < heightsToAdd.length; i++) {
var height = heightsToAdd[i];
var medianW = medianWeightsToAdd[i];
var sdW = sdWeightsToAdd[i];
var sdNeg2 = medianW – 2 * sdW;
var sdNeg1 = medianW – 1 * sdW;
var sdPos1 = medianW + 1 * sdW;
var sdPos2 = medianW + 2 * sdW;
var row = tableBody.insertRow();
// Add cells
var cellHeight = row.insertCell(0);
cellHeight.innerText = height.toFixed(1);
var cellSex = row.insertCell(1);
cellSex.innerText = sex.charAt(0).toUpperCase() + sex.slice(1);
var cellMedianW = row.insertCell(2);
cellMedianW.innerText = medianW.toFixed(2);
var cellSDNeg2 = row.insertCell(3);
cellSDNeg2.innerText = sdNeg2.toFixed(2);
var cellSDNeg1 = row.insertCell(4);
cellSDNeg1.innerText = sdNeg1.toFixed(2);
var cellSDZero = row.insertCell(5);
cellSDZero.innerText = medianW.toFixed(2); // SD 0 is the median
var cellSDPos1 = row.insertCell(6);
cellSDPos1.innerText = sdPos1.toFixed(2);
var cellSDPos2 = row.insertCell(7);
cellSDPos2.innerText = sdPos2.toFixed(2);
// Highlight the row corresponding to the entered height if it exists
if (height === enteredHeight) {
row.style.backgroundColor = "#d0e4f0"; // Highlight color
row.style.fontWeight = "bold";
}
}
}
function updateChart(sex, childHeight, observedWeight, medianWeight, sdWeight) {
var ctx = document.getElementById('zScoreChart').getContext('2d');
var chartElement = document.getElementById('zScoreChart');
chartElement.width = chartElement.parentElement.clientWidth * 0.9; // Make canvas responsive
chartElement.height = 300; // Fixed height
// Destroy previous chart instance if it exists
if (window.zScoreChartInstance) {
window.zScoreChartInstance.destroy();
}
// Define data series
var heightLabels = growthData[sex].heights;
var medianWeights = growthData[sex].medianWeight;
var sdWeights = growthData[sex].sdWeight;
// Calculate corresponding WHZ scores for the median and observed points
var medianZScores = [];
var observedZScores = [];
var chartMedianWeights = []; // For display in chart data points
for (var i = 0; i = heightLabels[0] && childHeight <= heightLabels[heightLabels.length – 1]) {
var insertIndex = 0;
while(insertIndex < finalHeightLabels.length && finalHeightLabels[insertIndex] = chartArea.top && yPos <= chartArea.bottom) {
ctx.beginPath();
ctx.strokeStyle = '#ccc'; // Light gray for reference lines
ctx.lineWidth = 1;
ctx.setLineDash([5, 5]); // Dashed line
ctx.moveTo(chartArea.left, yPos);
ctx.lineTo(chartArea.right, yPos);
ctx.stroke();
ctx.setLineDash([]); // Reset line dash
}
});
}
}
});
}
function resetCalculator() {
document.getElementById('childAge').value = '';
document.getElementById('childHeight').value = '';
document.getElementById('childWeight').value = '';
document.getElementById('sex').value = 'male';
document.getElementById('primaryResult').innerText = '–';
document.getElementById('intermediateValues').innerHTML = '';
document.getElementById('childAgeError').style.display = 'none';
document.getElementById('childHeightError').style.display = 'none';
document.getElementById('childWeightError').style.display = 'none';
// Reset chart
if (window.zScoreChartInstance) {
window.zScoreChartInstance.destroy();
var canvas = document.getElementById('zScoreChart');
var ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, canvas.width, canvas.height);
}
// Clear table
var tableBody = document.getElementById('growthTable').getElementsByTagName('tbody')[0];
tableBody.innerHTML = '';
}
function copyResults() {
var primaryResult = document.getElementById('primaryResult').innerText;
var intermediateValues = document.getElementById('intermediateValues').innerText;
var formula = document.querySelector('.formula-explanation').innerText;
if (primaryResult === '–') {
alert("No results to copy yet.");
return;
}
var resultText = "— Weight for Height Z-Score Results —\n\n";
resultText += "Primary Result:\n" + primaryResult + "\n\n";
resultText += "Intermediate Values:\n" + intermediateValues.replace(/(\d+(\.\d+)? kg)/g, '$1\n').trim() + "\n\n";
resultText += "Formula:\n" + formula + "\n\n";
resultText += "Assumptions:\n";
resultText += "- Growth data based on WHO Standards.\n";
resultText += "- Calculation uses nearest height data point or interpolation.\n";
// Use a temporary textarea to copy text to clipboard
var textArea = document.createElement("textarea");
textArea.value = resultText;
textArea.style.position = "fixed";
textArea.style.left = "-9999px";
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
var successful = document.execCommand('copy');
var msg = successful ? 'Results copied to clipboard!' : 'Failed to copy results.';
alert(msg);
} catch (err) {
alert('Oops, unable to copy');
}
document.body.removeChild(textArea);
}
function toggleFaq(element) {
var faqItem = element.closest('.faq-item');
faqItem.classList.toggle('open');
var answer = faqItem.querySelector('.answer');
if (faqItem.classList.contains('open')) {
answer.style.display = 'block';
} else {
answer.style.display = 'none';
}
}
// Initialize calculator and chart on load if inputs are pre-filled or for default view
window.onload = function() {
// Optional: Set default values or trigger initial calculation if needed
// calculateZScore(); // Uncomment if you want it to calculate with default/empty values on load
};