` + timelineHTML;
});
timelineHTML += `
${formatTime(bedtimeDate)}
Bedtime
Time for sleep. Good night!
`;
elements.routineResult.innerHTML = timelineHTML;
routineData.routine = routine; // Save for PDF
};
const downloadPDF = () => {
if (typeof window.jspdf === 'undefined') {
alert('Could not generate PDF. The required library is missing.');
return;
}
const { jsPDF } = window.jspdf;
const doc = new jsPDF();
const colors = { primary: '#6d28d9', secondary: '#8b5cf6', textPrimary: '#1f2937', textSecondary: '#6b7280', bgLight: '#f5f3ff' };
doc.setFillColor(colors.primary);
doc.rect(0, 0, 210, 28, 'F');
doc.setFont('helvetica', 'bold');
doc.setFontSize(20);
doc.setTextColor('#FFFFFF');
doc.text('Your Tech-Free Wind-Down Routine', 105, 18, { align: 'center' });
let yPos = 40;
const goalText = {
fall_asleep_faster: "to help you fall asleep faster.",
reduce_awakenings: "to help you sleep more soundly.",
feel_rested: "to help you wake up feeling more rested."
};
doc.setFontSize(12);
doc.setFont('helvetica', 'normal');
doc.setTextColor(colors.textPrimary);
doc.text(`Here is a personalized ${routineData.duration}-minute routine designed ${goalText[routineData.goal] || ''}`, 105, yPos, { align: 'center' });
yPos += 15;
const [bedtimeHour, bedtimeMinute] = routineData.bedtime.split(':').map(Number);
let bedtimeDate = new Date();
bedtimeDate.setHours(bedtimeHour, bedtimeMinute, 0, 0);
let currentTime = new Date(bedtimeDate.getTime());
const reversedRoutine = [...routineData.routine].reverse();
reversedRoutine.forEach(activity => {
const endTime = new Date(currentTime.getTime());
currentTime.setMinutes(currentTime.getMinutes() - activity.duration);
const startTime = new Date(currentTime.getTime());
doc.setFont('helvetica', 'bold');
doc.setFontSize(12);
doc.setTextColor(colors.primary);
doc.text(formatTime(startTime), 20, yPos);
doc.setFont('helvetica', 'bold');
doc.setFontSize(12);
doc.setTextColor(colors.textPrimary);
doc.text(activity.name, 50, yPos);
doc.setFont('helvetica', 'normal');
doc.setFontSize(10);
doc.setTextColor(colors.textSecondary);
doc.text(`(${activity.duration} minutes)`, 50, yPos + 5);
yPos += 15;
});
doc.setFont('helvetica', 'bold');
doc.setFontSize(12);
doc.setTextColor(colors.primary);
doc.text(formatTime(bedtimeDate), 20, yPos);
doc.setFont('helvetica', 'bold');
doc.setFontSize(12);
doc.setTextColor(colors.textPrimary);
doc.text("Bedtime", 50, yPos);
yPos = 280;
doc.setDrawColor(colors.secondary);
doc.line(14, yPos, 196, yPos);
doc.setFontSize(9);
doc.setFont('helvetica', 'italic');
doc.setTextColor(colors.textSecondary);
doc.text('Consistency is key. Try to follow this routine each night to signal to your body that it\'s time to sleep.', 105, yPos + 8, { align: 'center' });
doc.save('My_Wind-Down_Routine.pdf');
};
// --- Event Listeners ---
elements.nextBtn.addEventListener('click', nextStep);
elements.prevBtn.addEventListener('click', prevStep);
elements.downloadPdfBtn.addEventListener('click', downloadPDF);
elements.routineDuration.addEventListener('input', () => {
elements.routineDurationValue.textContent = elements.routineDuration.value;
});
// --- Initialization ---
updateFormUI();
});