Refactor code structure for improved readability and maintainability

This commit is contained in:
bolade
2025-09-24 10:36:38 +01:00
parent 845a7ca099
commit 4a61dd7898
21 changed files with 1597 additions and 1740 deletions
+358 -349
View File
@@ -4,352 +4,355 @@ from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader("report_gen")) env = Environment(loader=FileSystemLoader("report_gen"))
# Define templates and their unique contexts # Define templates and their unique contexts
pages = [ # pages = [
("page_1.html", {"name": "John Doe", "surname": "Moran", "date": "July 29, 2025"}), # ("page_1.html", {"name": "John Doe", "surname": "Moran", "date": "July 29, 2025"}),
("page_2.html", {"content": "This is page 2 content"}), # ("page_2.html", {"content": "This is page 2 content"}),
( # (
"page_3.html", # "page_3.html",
{ # {
"patient_name": "Keirstyn Moran", # "patient_name": "Keirstyn Moran",
"age": "34", # "age": "34",
"height": "5'4\"", # "height": "5'4\"",
"weight": "123lbs", # "weight": "123lbs",
"focus": "Endurance", # "focus": "Endurance",
"fat_mass": "27.6lbs", # "fat_mass": "27.6lbs",
"fat_percentage": "22.4%", # "fat_percentage": "22.4%",
"lean_mass": "95.4lbs", # "lean_mass": "95.4lbs",
"lean_percentage": "77.6%", # "lean_percentage": "77.6%",
"body_fat_percent": "22.4%", # "body_fat_percent": "22.4%",
"age_range": "20-39", # "age_range": "20-39",
"gender": "F", # "gender": "F",
"contact_email": "info@ishplabs.com", # "contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com", # "website": "www.ishplabs.com",
"social": "@ishplabs", # "social": "@ishplabs",
"page_number": "4", # "page_number": "4",
"body_composition_chart": "../graphs/page_1_body_composition.png", # "body_composition_chart": "../graphs/page_1_body_composition.png",
"body_fat_chart": "../graphs/page_1_body_fat.png", # "body_fat_chart": "../graphs/page_1_body_fat.png",
}, # },
), # ),
( # (
"page_4.html", # "page_4.html",
{ # {
"patient_name": "Keirstyn Moran", # "patient_name": "Keirstyn Moran",
"age": "34", # "age": "34",
"height": "5'4\"", # "height": "5'4\"",
"weight": "123lbs", # "weight": "123lbs",
"focus": "Endurance", # "focus": "Endurance",
"contact_email": "info@ishplabs.com", # "contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com", # "website": "www.ishplabs.com",
"social": "@ishplabs", # "social": "@ishplabs",
"page_number": "3", # "page_number": "3",
}, # },
), # ),
( # (
"page_5.html", # "page_5.html",
{ # {
"patient_name": "Keirstyn Moran", # "patient_name": "Keirstyn Moran",
"age": "34", # "age": "34",
"height": "5'4\"", # "height": "5'4\"",
"weight": "123lbs", # "weight": "123lbs",
"focus": "Endurance", # "focus": "Endurance",
"resting_calories": "1386kCals", # "resting_calories": "1386kCals",
"fat_percentage": "33%", # "fat_percentage": "33%",
"carb_percentage": "67%", # "carb_percentage": "67%",
"neat_calories": "762kCals", # "neat_calories": "762kCals",
"weight_loss_calories": "423kCals", # "weight_loss_calories": "423kCals",
"weight_loss_rate": "1.1lbs", # "weight_loss_rate": "1.1lbs",
"total_calories": "~1725kCals", # "total_calories": "~1725kCals",
"contact_email": "info@ishplabs.com", # "contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com", # "website": "www.ishplabs.com",
"social": "@ishplabs", # "social": "@ishplabs",
"page_number": "5", # "page_number": "5",
}, # },
), # ),
( # (
"page_6.html", # "page_6.html",
{ # {
"patient_name": "Keirstyn Moran", # "patient_name": "Keirstyn Moran",
"age": "34", # "age": "34",
"height": "5'4\"", # "height": "5'4\"",
"weight": "123lbs", # "weight": "123lbs",
"focus": "Endurance", # "focus": "Endurance",
"deficit_calories": "1725KCals", # "deficit_calories": "1725KCals",
"deficit_protein": "120g Protein", # "deficit_protein": "120g Protein",
"deficit_carbs": "155g Carbs", # "deficit_carbs": "155g Carbs",
"deficit_fat": "69g Fat", # "deficit_fat": "69g Fat",
"deficit_fiber": "25g Fibre", # "deficit_fiber": "25g Fibre",
"refeed_weekday_calories": "1615KCals", # "refeed_weekday_calories": "1615KCals",
"refeed_weekday_protein": "120g Protein", # "refeed_weekday_protein": "120g Protein",
"refeed_weekday_carbs": "142g Carbs", # "refeed_weekday_carbs": "142g Carbs",
"refeed_weekday_fat": "63g Fat", # "refeed_weekday_fat": "63g Fat",
"refeed_weekday_fiber": "24g Fibre", # "refeed_weekday_fiber": "24g Fibre",
"refeed_weekend_calories": "2000KCals", # "refeed_weekend_calories": "2000KCals",
"refeed_weekend_protein": "120g Protein", # "refeed_weekend_protein": "120g Protein",
"refeed_weekend_carbs": "190g Carbs", # "refeed_weekend_carbs": "190g Carbs",
"refeed_weekend_fat": "84g Fat", # "refeed_weekend_fat": "84g Fat",
"refeed_weekend_fiber": "30g Fibre", # "refeed_weekend_fiber": "30g Fibre",
"protein_percentage": "28%", # "protein_percentage": "28%",
"carbs_percentage": "36%", # "carbs_percentage": "36%",
"fats_percentage": "36%", # "fats_percentage": "36%",
"contact_email": "info@ishplabs.com", # "contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com", # "website": "www.ishplabs.com",
"social": "@ishplabs", # "social": "@ishplabs",
"page_number": "6", # "page_number": "6",
}, # },
), # ),
( # (
"page_7.html", # "page_7.html",
{ # {
"patient_name": "Keirstyn Moran", # "patient_name": "Keirstyn Moran",
"age": "34", # "age": "34",
"height": "5'4\"", # "height": "5'4\"",
"weight": "123lbs", # "weight": "123lbs",
"focus": "Endurance", # "focus": "Endurance",
"fvc_value": "4.24L → 112.0%", # "fvc_value": "4.24L → 112.0%",
"fev1_value": "3.26L → 103.3%", # "fev1_value": "3.26L → 103.3%",
"fev1_fvc_ratio": "76.89% → 91.8%", # "fev1_fvc_ratio": "76.89% → 91.8%",
"indication": "No Respiratory Capacity Limitation", # "indication": "No Respiratory Capacity Limitation",
"respiratory_graph": "../graphs/respiratory_chart.png", # "respiratory_graph": "../graphs/respiratory_chart.png",
"peak_vt_value": "2.38L/Breath which occurs at 172bpm (Zone 3)", # "peak_vt_value": "2.38L/Breath which occurs at 172bpm (Zone 3)",
"peak_vt_percentage": "73% of FEV1", # "peak_vt_percentage": "73% of FEV1",
"contact_email": "info@ishplabs.com", # "contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com", # "website": "www.ishplabs.com",
"social": "@ishplabs", # "social": "@ishplabs",
"page_number": "7", # "page_number": "7",
}, # },
), # ),
( # (
"page_8.html", # "page_8.html",
{ # {
"patient_name": "Keirstyn Moran", # "patient_name": "Keirstyn Moran",
"age": "34", # "age": "34",
"height": "5'4\"", # "height": "5'4\"",
"weight": "123lbs", # "weight": "123lbs",
"focus": "Endurance", # "focus": "Endurance",
"vo2_max_value": "49.5", # "vo2_max_value": "49.5",
"vo2_max_percentile": "100th percentile", # "vo2_max_percentile": "100th percentile",
"age_range": "30-39", # "age_range": "30-39",
"very_poor_range": "19.0-24.1", # "very_poor_range": "19.0-24.1",
"poor_range": "24.1-28.2", # "poor_range": "24.1-28.2",
"fair_range": "28.2-32.2", # "fair_range": "28.2-32.2",
"good_range": "32.2-35.7", # "good_range": "32.2-35.7",
"excellent_range": "35.7-45.8", # "excellent_range": "35.7-45.8",
"superior_range": "45.8+", # "superior_range": "45.8+",
"zone1_percentage": "55-65% of Max Heart Rate", # "zone1_percentage": "55-65% of Max Heart Rate",
"zone2_percentage": "65-75% of Max Heart Rate", # "zone2_percentage": "65-75% of Max Heart Rate",
"zone3_percentage": "80-85% of Max Heart Rate", # "zone3_percentage": "80-85% of Max Heart Rate",
"zone4_percentage": "85-88% of Max Heart Rate", # "zone4_percentage": "85-88% of Max Heart Rate",
"zone5_percentage": "90% of Max Heart Rate", # "zone5_percentage": "90% of Max Heart Rate",
"zone1_bpm": "81-96bpm", # "zone1_bpm": "81-96bpm",
"zone2_bpm": "96-100bpm", # "zone2_bpm": "96-100bpm",
"zone3_bpm": "100-178bpm", # "zone3_bpm": "100-178bpm",
"zone4_bpm": "178-188bpm", # "zone4_bpm": "178-188bpm",
"zone5_bpm": "188-198bpm", # "zone5_bpm": "188-198bpm",
"zone1_speed": "3.5mph", # "zone1_speed": "3.5mph",
"zone2_speed": "3.5-4.0mph", # "zone2_speed": "3.5-4.0mph",
"zone3_speed": "4.0-6.5mph", # "zone3_speed": "4.0-6.5mph",
"zone4_speed": "6.5-7.0mph", # "zone4_speed": "6.5-7.0mph",
"zone5_speed": "7.0-8.0mph", # "zone5_speed": "7.0-8.0mph",
"zone1_incline": "2% Incline", # "zone1_incline": "2% Incline",
"zone2_incline": "2% Incline", # "zone2_incline": "2% Incline",
"zone3_incline": "2% Incline", # "zone3_incline": "2% Incline",
"zone4_incline": "2% Incline", # "zone4_incline": "2% Incline",
"zone5_incline": "2% Incline", # "zone5_incline": "2% Incline",
"zone1_pace": "10:39min/km Pace", # "zone1_pace": "10:39min/km Pace",
"zone2_pace": "10:39-9:19min/km Pace", # "zone2_pace": "10:39-9:19min/km Pace",
"zone3_pace": "9:19-5:44min/km Pace", # "zone3_pace": "9:19-5:44min/km Pace",
"zone4_pace": "5:44-5:20min/km Pace", # "zone4_pace": "5:44-5:20min/km Pace",
"zone5_pace": "5:20-4:40min/km Pace", # "zone5_pace": "5:20-4:40min/km Pace",
"zone1_calories": "4.4kcals/minute", # "zone1_calories": "4.4kcals/minute",
"zone2_calories": "5.9kcals/minute", # "zone2_calories": "5.9kcals/minute",
"zone3_calories": "9.4kcals/minute", # "zone3_calories": "9.4kcals/minute",
"zone4_calories": "12.5kcals/minute", # "zone4_calories": "12.5kcals/minute",
"zone5_calories": "12.8kcals/minute", # "zone5_calories": "12.8kcals/minute",
"zone1_carb": "Avg: 0.4g/min Carb Utilization", # "zone1_carb": "Avg: 0.4g/min Carb Utilization",
"zone2_carb": "Avg: 0.6g/min Carb Utilization", # "zone2_carb": "Avg: 0.6g/min Carb Utilization",
"zone3_carb": "Avg: 1.9g/min Carb Utilization", # "zone3_carb": "Avg: 1.9g/min Carb Utilization",
"zone4_carb": "Avg: 2.9g/min Carb Utilization", # "zone4_carb": "Avg: 2.9g/min Carb Utilization",
"zone5_carb": "Avg: 3.1g/min Carb Utilization", # "zone5_carb": "Avg: 3.1g/min Carb Utilization",
"zone1_breaths": "Avg: 27 breaths", # "zone1_breaths": "Avg: 27 breaths",
"zone2_breaths": "Avg: 28 breaths", # "zone2_breaths": "Avg: 28 breaths",
"zone3_breaths": "Avg: 31 breaths", # "zone3_breaths": "Avg: 31 breaths",
"zone4_breaths": "Avg: 42 breaths", # "zone4_breaths": "Avg: 42 breaths",
"zone5_breaths": "Avg: 51 breaths", # "zone5_breaths": "Avg: 51 breaths",
"zone1_breath_range": "Ideal Range: 15-20 breaths", # "zone1_breath_range": "Ideal Range: 15-20 breaths",
"zone2_breath_range": "Ideal Range: 20-25 breaths", # "zone2_breath_range": "Ideal Range: 20-25 breaths",
"zone3_breath_range": "Ideal Range: 25-30 breaths", # "zone3_breath_range": "Ideal Range: 25-30 breaths",
"zone4_breath_range": "Ideal Range: 30-35 breaths", # "zone4_breath_range": "Ideal Range: 30-35 breaths",
"zone5_breath_range": "Ideal Range: 40+ breaths", # "zone5_breath_range": "Ideal Range: 40+ breaths",
"contact_email": "info@ishplabs.com", # "contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com", # "website": "www.ishplabs.com",
"social": "@ishplabs", # "social": "@ishplabs",
"page_number": "8", # "page_number": "8",
}, # },
), # ),
( # (
"page_9.html", # "page_9.html",
{ # {
"patient_name": "Keirstyn Moran", # "patient_name": "Keirstyn Moran",
"age": "34", # "age": "34",
"height": "5'4\"", # "height": "5'4\"",
"weight": "123lbs", # "weight": "123lbs",
"focus": "Endurance", # "focus": "Endurance",
"fuel_utilization_chart": "../graphs/fuel_utilization_chart.png", # "fuel_utilization_chart": "../graphs/fuel_utilization_chart.png",
"client_name": "Keirstyn Moran", # "client_name": "Keirstyn Moran",
"assessment_date": "July 29 2025", # "assessment_date": "July 29 2025",
"contact_email": "info@ishplabs.com", # "contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com", # "website": "www.ishplabs.com",
"social": "@ishplabs", # "social": "@ishplabs",
"page_number": "9", # "page_number": "9",
}, # },
), # ),
( # (
"page_10.html", # "page_10.html",
{ # {
"patient_name": "Keirstyn Moran", # "patient_name": "Keirstyn Moran",
"age": "34", # "age": "34",
"height": "5'4\"", # "height": "5'4\"",
"weight": "123lbs", # "weight": "123lbs",
"focus": "Endurance", # "focus": "Endurance",
"vo2_pulse_drop_bpm": "180 bpm", # "vo2_pulse_drop_bpm": "180 bpm",
"vo2_pulse_drop_zone": "Zone 4", # "vo2_pulse_drop_zone": "Zone 4",
"vo2_pulse_chart": "../graphs/vo2_pulse_chart.png", # "vo2_pulse_chart": "../graphs/vo2_pulse_chart.png",
"vo2_breath_drop_bpm": "173 bpm", # "vo2_breath_drop_bpm": "173 bpm",
"vo2_breath_drop_zone": "Zone 3", # "vo2_breath_drop_zone": "Zone 3",
"vo2_breath_chart": "../graphs/vo2_breath_chart.png", # "vo2_breath_chart": "../graphs/vo2_breath_chart.png",
"contact_email": "info@ishplabs.com", # "contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com", # "website": "www.ishplabs.com",
"social": "@ishplabs", # "social": "@ishplabs",
"page_number": "9", # "page_number": "9",
}, # },
), # ),
( # (
"page_11.html", # "page_11.html",
{ # {
"patient_name": "Keirstyn Moran", # "patient_name": "Keirstyn Moran",
"age": "34", # "age": "34",
"height": "5'4\"", # "height": "5'4\"",
"weight": "123lbs", # "weight": "123lbs",
"focus": "Endurance", # "focus": "Endurance",
"fat_max_optimal": "*Optimal 10-12Kcals/minute", # "fat_max_optimal": "*Optimal 10-12Kcals/minute",
"fat_max_value": "3.8Kcals/min", # "fat_max_value": "3.8Kcals/min",
"fat_max_heart_rate": "49% of Max Heart Rate", # "fat_max_heart_rate": "49% of Max Heart Rate",
"fat_max_bpm": "97 bpm", # "fat_max_bpm": "97 bpm",
"crossover_bpm": "100bpm", # "crossover_bpm": "100bpm",
"crossover_heart_rate": "51% of Max Heart Rate", # "crossover_heart_rate": "51% of Max Heart Rate",
"fat_metabolism_note": "100bpm at a speed of 4.0mph and incline of 2%", # "fat_metabolism_note": "100bpm at a speed of 4.0mph and incline of 2%",
"fat_metabolism_chart": "../graphs/fat_metabolism_chart.png", # "fat_metabolism_chart": "../graphs/fat_metabolism_chart.png",
"cardiac_recovery_time": "(1 minute)", # "cardiac_recovery_time": "(1 minute)",
"cardiac_recovery_percentage": "33%", # "cardiac_recovery_percentage": "33%",
"metabolic_recovery_time": "(2 minute)", # "metabolic_recovery_time": "(2 minute)",
"metabolic_recovery_percentage": "65%", # "metabolic_recovery_percentage": "65%",
"breath_recovery_time": "(2.5 minute)", # "breath_recovery_time": "(2.5 minute)",
"breath_recovery_percentage": "76%", # "breath_recovery_percentage": "76%",
"recovery_chart": "../graphs/recovery_chart.png", # "recovery_chart": "../graphs/recovery_chart.png",
"resting_heart_rate": "53bpm", # "resting_heart_rate": "53bpm",
"hr_age_range": "26-35", # "hr_age_range": "26-35",
"hr_poor": "82bpm +", # "hr_poor": "82bpm +",
"hr_below_avg": "75-81bpm", # "hr_below_avg": "75-81bpm",
"hr_average": "71-74bpm", # "hr_average": "71-74bpm",
"hr_above_avg": "66-70bpm", # "hr_above_avg": "66-70bpm",
"hr_good": "62-65bpm", # "hr_good": "62-65bpm",
"hr_excellent": "55-61bpm", # "hr_excellent": "55-61bpm",
"hr_athlete": "44-54bpm", # "hr_athlete": "44-54bpm",
"contact_email": "info@ishplabs.com", # "contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com", # "website": "www.ishplabs.com",
"social": "@ishplabs", # "social": "@ishplabs",
"page_number": "10", # "page_number": "10",
}, # },
), # ),
( # (
"page_13.html", # "page_13.html",
{ # {
"patient_name": "Keirstyn Moran", # "patient_name": "Keirstyn Moran",
"age": "34", # "age": "34",
"height": "5'4\"", # "height": "5'4\"",
"weight": "123lbs", # "weight": "123lbs",
"focus": "Endurance", # "focus": "Endurance",
"zone2_frequency": "3-4x/week", # "zone2_frequency": "3-4x/week",
"zone2_duration": "40+ minutes", # "zone2_duration": "40+ minutes",
"zone2_hr_range": "____", # "zone2_hr_range": "____",
"zone2_speed": "____ mph", # "zone2_speed": "____ mph",
"zone2_incline": "2% Incline", # "zone2_incline": "2% Incline",
"zone3_frequency": "1-2x/week", # "zone3_frequency": "1-2x/week",
"zone3_duration": "10-20 minutes", # "zone3_duration": "10-20 minutes",
"zone3_hr_range": "____ bpm", # "zone3_hr_range": "____ bpm",
"zone3_speed": "____mph", # "zone3_speed": "____mph",
"zone3_incline": "2% Incline", # "zone3_incline": "2% Incline",
"zone3_target_hr": "___ bpm", # "zone3_target_hr": "___ bpm",
"zone3_recovery_speed": "____mph", # "zone3_recovery_speed": "____mph",
"zone3_recovery_incline": "2% Incline", # "zone3_recovery_incline": "2% Incline",
"zone1_hr_range": "____bpm", # "zone1_hr_range": "____bpm",
"zone1_duration": "4-8 minutes", # "zone1_duration": "4-8 minutes",
"zone3_repeats": "2-3 times", # "zone3_repeats": "2-3 times",
"short_sets": "8-10", # "short_sets": "8-10",
"short_duration": "10-30 seconds", # "short_duration": "10-30 seconds",
"short_zone": "5", # "short_zone": "5",
"short_rpe": "10", # "short_rpe": "10",
"short_recovery": "20-60 seconds", # "short_recovery": "20-60 seconds",
"medium_sets": "6-8", # "medium_sets": "6-8",
"medium_duration": "30-90 seconds", # "medium_duration": "30-90 seconds",
"medium_zone": "4", # "medium_zone": "4",
"medium_rpe": "8-9", # "medium_rpe": "8-9",
"medium_recovery": "30-90 seconds", # "medium_recovery": "30-90 seconds",
"long_sets": "4-6", # "long_sets": "4-6",
"long_duration": "5-10 minutes", # "long_duration": "5-10 minutes",
"long_zone": "3/4", # "long_zone": "3/4",
"long_rpe": "7-8", # "long_rpe": "7-8",
"long_recovery": "2.5-5 minutes", # "long_recovery": "2.5-5 minutes",
"tempo_sets": "2-3", # "tempo_sets": "2-3",
"tempo_duration": "10-20 minutes", # "tempo_duration": "10-20 minutes",
"tempo_zone": "3", # "tempo_zone": "3",
"tempo_rpe": "6-7", # "tempo_rpe": "6-7",
"tempo_recovery": "4-8 minutes", # "tempo_recovery": "4-8 minutes",
"cardio_sets": "1", # "cardio_sets": "1",
"cardio_duration": ">40 minutes", # "cardio_duration": ">40 minutes",
"cardio_zone": "2", # "cardio_zone": "2",
"cardio_rpe": "4-5", # "cardio_rpe": "4-5",
"cardio_recovery": "N/A", # "cardio_recovery": "N/A",
"week1_mon_zone": "Zone 2", # "week1_mon_zone": "Zone 2",
"week1_mon_duration": "45 mins", # "week1_mon_duration": "45 mins",
"week1_tue_zone": "Zone 2", # "week1_tue_zone": "Zone 2",
"week1_tue_duration": "45 mins", # "week1_tue_duration": "45 mins",
"week1_wed_zone": "Zone 3", # "week1_wed_zone": "Zone 3",
"week1_wed_duration1": "10mins On", # "week1_wed_duration1": "10mins On",
"week1_wed_duration2": "8mins Rest", # "week1_wed_duration2": "8mins Rest",
"week1_wed_sets": "x2", # "week1_wed_sets": "x2",
"week1_thu_content": "", # "week1_thu_content": "",
"week1_fri_zone": "Zone 2", # "week1_fri_zone": "Zone 2",
"week1_fri_duration": "45 mins", # "week1_fri_duration": "45 mins",
"week1_sat_content": "", # "week1_sat_content": "",
"week1_sun_content": "", # "week1_sun_content": "",
"week2_mon_zone": "Zone 2", # "week2_mon_zone": "Zone 2",
"week2_mon_duration": "50 mins", # "week2_mon_duration": "50 mins",
"week2_tue_zone": "Zone 2", # "week2_tue_zone": "Zone 2",
"week2_tue_duration": "50 mins", # "week2_tue_duration": "50 mins",
"week2_wed_zone": "Zone 3", # "week2_wed_zone": "Zone 3",
"week2_wed_duration1": "10mins On", # "week2_wed_duration1": "10mins On",
"week2_wed_duration2": "6mins Rest", # "week2_wed_duration2": "6mins Rest",
"week2_wed_sets": "x2", # "week2_wed_sets": "x2",
"week2_thu_content": "", # "week2_thu_content": "",
"week2_fri_zone": "Zone 2", # "week2_fri_zone": "Zone 2",
"week2_fri_duration": "50 mins", # "week2_fri_duration": "50 mins",
"week2_sat_content": "", # "week2_sat_content": "",
"week2_sun_content": "", # "week2_sun_content": "",
"contact_email": "info@ishplabs.com", # "contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com", # "website": "www.ishplabs.com",
"social": "@ishplabs", # "social": "@ishplabs",
"page_number": "12", # "page_number": "12",
}, # },
), # ),
("page_14.html", {}), # ("page_14.html", {}),
("page_15.html", {}), # ("page_15.html", {}),
("page_16.html", {}), # ("page_16.html", {}),
("page_17.html", {}), # ("page_17.html", {}),
("page_18.html", {}), # ("page_18.html", {}),
("page_19.html", {}), # ("page_19.html", {}),
] # ]
pages = [
(f"page_{i}.html", {}) for i in range(1, 20)
]
# Render each template with its own context # Render each template with its own context
html_pages = [] html_pages = []
for tpl, ctx in pages: for tpl, ctx in pages:
@@ -367,9 +370,14 @@ html_doc = f"""
<meta charset="utf-8"> <meta charset="utf-8">
<link href="https://cdn.jsdelivr.net/npm/tailwindcss/dist/tailwind.min.css" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/npm/tailwindcss/dist/tailwind.min.css" rel="stylesheet">
<style> <style>
html, body {{
height: 100%;
margin: 0;
padding: 0;
}}
.page-break {{ page-break-after: always; }} .page-break {{ page-break-after: always; }}
.page {{ .page {{
height: 386mm; height: 100%;
}} }}
</style> </style>
</head> </head>
@@ -379,10 +387,11 @@ html_doc = f"""
</html> </html>
""" """
print(html_doc)
# Generate PDF # Generate PDF
options = { options = {
"page-size": "A4", # "page-size": "A4",
'page-height': '297mm',
'page-width': '210mm',
"encoding": "UTF-8", "encoding": "UTF-8",
"margin-top": "0mm", "margin-top": "0mm",
"margin-bottom": "0mm", "margin-bottom": "0mm",
@@ -390,6 +399,6 @@ options = {
"margin-right": "0mm", "margin-right": "0mm",
"no-outline": None, "no-outline": None,
} }
pdfkit.from_string(html_doc, "multi_page_report.pdf", options=options) pdfkit.from_string(html_doc, "truth_report.pdf", options=options)
print("✅ PDF generated: multi_page_report.pdf") print("✅ PDF generated: multi_page_report.pdf")
-1
View File
@@ -1,6 +1,5 @@
<div <div
class="w-full page bg-black text-white relative overflow-hidden" class="w-full page bg-black text-white relative overflow-hidden"
style="height: 297mm"
> >
<!-- ISHP Logo/Text --> <!-- ISHP Logo/Text -->
<div class="absolute top-8 left-8 z-20"> <div class="absolute top-8 left-8 z-20">
+3 -3
View File
@@ -1,4 +1,4 @@
<div class="w-full page bg-white" style="height: 297mm;"></div> <div class="w-full page bg-white">
<!-- Header Section --> <!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between"> <div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
@@ -26,7 +26,7 @@
<!-- VO2 Pulse Graph --> <!-- VO2 Pulse Graph -->
<div class="flex justify-center mb-6"> <div class="flex justify-center mb-6">
<img src="{{ vo2_pulse_chart | default('../graphs/vo2_pulse_chart.png') }}" <img src="{{ vo2_pulse_chart }}"
alt="VO2 Pulse Chart" alt="VO2 Pulse Chart"
class="w-full max-w-4xl h-auto object-contain"> class="w-full max-w-4xl h-auto object-contain">
</div> </div>
@@ -42,7 +42,7 @@
<!-- VO2 Breath Graph --> <!-- VO2 Breath Graph -->
<div class="flex justify-center mb-6"> <div class="flex justify-center mb-6">
<img src="{{ vo2_breath_chart | default('../graphs/vo2_breath_chart.png') }}" <img src="{{ vo2_breath_chart }}"
alt="VO2 Breath Chart" alt="VO2 Breath Chart"
class="w-full max-w-4xl h-auto object-contain"> class="w-full max-w-4xl h-auto object-contain">
</div> </div>
+3 -3
View File
@@ -1,4 +1,4 @@
<div class="w-full page bg-white" style="height: 297mm"> <div class="w-full page bg-white">
<!-- Header Section --> <!-- Header Section -->
<div <div
class="bg-black text-white px-6 py-4 flex items-center justify-between" class="bg-black text-white px-6 py-4 flex items-center justify-between"
@@ -71,7 +71,7 @@
<div class="flex justify-center"> <div class="flex justify-center">
<img <img
src="{{ fat_metabolism_chart | default('../graphs/fat_metabolism_chart.png') }}" src="{{ fat_metabolism_chart }}"
alt="Fat Metabolism Chart" alt="Fat Metabolism Chart"
class="w-full max-w-4xl h-auto object-contain" class="w-full max-w-4xl h-auto object-contain"
/> />
@@ -130,7 +130,7 @@
<!-- Recovery Graph --> <!-- Recovery Graph -->
<div class="flex justify-center mb-6"> <div class="flex justify-center mb-6">
<img <img
src="{{ recovery_chart | default('../graphs/recovery_chart.png') }}" src="{{ recovery_chart }}"
alt="Recovery Chart" alt="Recovery Chart"
class="w-full max-w-4xl h-auto object-contain" class="w-full max-w-4xl h-auto object-contain"
/> />
+3
View File
@@ -0,0 +1,3 @@
<div class="page" id="page-12">
This is page 12
</div>
+1 -1
View File
@@ -1,4 +1,4 @@
<div class="w-full page bg-white" style="height: 297mm;"></div> <div class="w-full page bg-white">
<!-- Header Section --> <!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between"> <div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
+1 -1
View File
@@ -1,4 +1,4 @@
<div class="w-full page bg-white" style="height: 297mm;"></div> <div class="w-full page bg-white">
<!-- Header Section --> <!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between"> <div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
+1 -1
View File
@@ -1,4 +1,4 @@
<div class="w-full page bg-white" style="height: 297mm;"></div> <div class="w-full page bg-white">
<!-- Header Section --> <!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between"> <div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
+1 -1
View File
@@ -1,4 +1,4 @@
<div class="w-full page bg-white" style="height: 297mm;"></div> <div class="w-full page bg-white">
<!-- Header Section --> <!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between"> <div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
+64 -72
View File
@@ -1,5 +1,5 @@
<body class="bg-white font-sans">
<!-- Header --> <!-- Header -->
<div class="w-full page">
<div class="bg-black text-white p-4 flex items-center justify-between"> <div class="bg-black text-white p-4 flex items-center justify-between">
<div class="flex items-center space-x-4"> <div class="flex items-center space-x-4">
<div class="text-xl font-bold">ISHP</div> <div class="text-xl font-bold">ISHP</div>
@@ -31,23 +31,21 @@
</p> </p>
<ul class="list-disc ml-6 space-y-1"> <ul class="list-disc ml-6 space-y-1">
<li> <li>
<strong>Endurance:</strong> Normal capacity, but <strong>Endurance:</strong> Normal capacity, but cannot
cannot maintain their VT over time. maintain their VT over time.
</li> </li>
<li> <li>
<strong>Strength/Power:</strong> Normal capacity, <strong>Strength/Power:</strong> Normal capacity, but
but peak VT is not 75-85% of their FEV1 despite FEV1 peak VT is not 75-85% of their FEV1 despite FEV1 being
being normal normal
</li> </li>
<li> <li>
<strong <strong>Coordination (Hyper/Hypo-Ventilation):</strong>
>Coordination (Hyper/Hypo-Ventilation):</strong Normal capacity, but uses low volumes +/- high BFs at
> lower intensities. A breathing coordination limitation
Normal capacity, but uses low volumes +/- high BFs can also be identified by the loss of volume at higher
at lower intensities. A breathing coordination intensities, which are then recovered upon recovery/stop
limitation can also be identified by the loss of of activity.
volume at higher intensities, which are then
recovered upon recovery/stop of activity.
</li> </li>
</ul> </ul>
</div> </div>
@@ -57,12 +55,11 @@
<p class="font-semibold">VO2 Pulse:</p> <p class="font-semibold">VO2 Pulse:</p>
<p> <p>
VO2 Pulse refers to the relationship between oxygen VO2 Pulse refers to the relationship between oxygen
consumption (VO2) and heart rate (HR) during exercise. consumption (VO2) and heart rate (HR) during exercise. This
This measure gives insight into how efficiently the body measure gives insight into how efficiently the body is using
is using oxygen in relation to the heart's output. A oxygen in relation to the heart's output. A higher VO2 Pulse
higher VO2 Pulse suggests that an individual is able to suggests that an individual is able to deliver oxygen more
deliver oxygen more efficiently to the muscles with each efficiently to the muscles with each heartbeat.
heartbeat.
</p> </p>
</div> </div>
@@ -71,12 +68,12 @@
<p class="font-semibold">VO2 Breath:</p> <p class="font-semibold">VO2 Breath:</p>
<p> <p>
VO2 Breath refers to the amount of oxygen consumed per VO2 Breath refers to the amount of oxygen consumed per
breath during exercise, which indicates how effectively breath during exercise, which indicates how effectively the
the body delivers oxygen to the bloodstream through the body delivers oxygen to the bloodstream through the lungs
lungs with each breath. A more efficient VO2 Breath with each breath. A more efficient VO2 Breath means the body
means the body requires less effort to obtain the same requires less effort to obtain the same amount of oxygen,
amount of oxygen, indicating better respiratory indicating better respiratory efficiency and oxygen
efficiency and oxygen utilization. utilization.
</p> </p>
</div> </div>
@@ -86,23 +83,21 @@
<p class="mb-2"> <p class="mb-2">
The point during exercise at which the body shifts its The point during exercise at which the body shifts its
predominant fuel source from fats to carbohydrates. This predominant fuel source from fats to carbohydrates. This
transition typically occurs as exercise intensity transition typically occurs as exercise intensity increases,
increases, and marks the transition from Zone 2 into and marks the transition from Zone 2 into Zone 3. As
Zone 3. As exercise intensity increases, the body starts exercise intensity increases, the body starts to rely more
to rely more on carbohydrates because they provide on carbohydrates because they provide faster energy.
faster energy.
</p> </p>
<p> <p>
Endurance training (e.g., long, steady-state cardio Endurance training (e.g., long, steady-state cardio within
within Zones 1 & 2) increases the body's ability to burn Zones 1 & 2) increases the body's ability to burn fat
fat efficiently at higher intensities, shifting the efficiently at higher intensities, shifting the crossover
crossover point to a faster speed, or higher heart point to a faster speed, or higher heart rate/intensity.
rate/intensity. Because fat stores are much larger and Because fat stores are much larger and can provide a steady
can provide a steady stream of energy for prolonged stream of energy for prolonged periods, a higher CHO/FAT
periods, a higher CHO/FAT crossover can help delay crossover can help delay fatigue, which is especially
fatigue, which is especially beneficial in beneficial in longer-duration events, where carbohydrate
longer-duration events, where carbohydrate depletion can depletion can lead to a significant drop in performance.
lead to a significant drop in performance.
</p> </p>
</div> </div>
@@ -110,10 +105,9 @@
<div> <div>
<p class="font-semibold">Cardiovascular Recovery:</p> <p class="font-semibold">Cardiovascular Recovery:</p>
<p> <p>
The percentage your heart rate drops within the first The percentage your heart rate drops within the first minute
minute of the inactive recovery phase in relation to the of the inactive recovery phase in relation to the lowest
lowest heart rate recorded prior to the start of the heart rate recorded prior to the start of the test.
test.
</p> </p>
</div> </div>
@@ -121,19 +115,19 @@
<div> <div>
<p class="font-semibold">Metabolic (CO2) Recovery:</p> <p class="font-semibold">Metabolic (CO2) Recovery:</p>
<p class="mb-2"> <p class="mb-2">
The percentage that your VCO2 levels (amount of CO2 you The percentage that your VCO2 levels (amount of CO2 you are
are exhaling) drop within the first 1.5 minutes of the exhaling) drop within the first 1.5 minutes of the inactive
inactive recovery phase in relation to the lowest VCO2 recovery phase in relation to the lowest VCO2 recorded prior
recorded prior to the start of the test. to the start of the test.
</p> </p>
<p> <p>
refers to the rate at which the body clears carbon refers to the rate at which the body clears carbon dioxide
dioxide (CO2) after exercise, reflecting the efficiency (CO2) after exercise, reflecting the efficiency of the
of the cardiovascular and respiratory systems in cardiovascular and respiratory systems in returning CO2
returning CO2 levels to baseline. A faster VCO2 recovery levels to baseline. A faster VCO2 recovery indicates
indicates effective management of metabolic byproducts, effective management of metabolic byproducts, signaling a
signaling a healthier metabolic system and lower risk of healthier metabolic system and lower risk of metabolic
metabolic disorders. disorders.
</p> </p>
</div> </div>
@@ -141,20 +135,19 @@
<div> <div>
<p class="font-semibold">Breath Frequency Recovery:</p> <p class="font-semibold">Breath Frequency Recovery:</p>
<p> <p>
Refers to the speed at which the body returns to a Refers to the speed at which the body returns to a normal
normal breathing rate after physical exertion. Faster breathing rate after physical exertion. Faster breath
breath frequency recovery indicates a well-conditioned frequency recovery indicates a well-conditioned
cardiovascular and respiratory system, allowing the body cardiovascular and respiratory system, allowing the body to
to efficiently regulate oxygen and CO2 levels. It efficiently regulate oxygen and CO2 levels. It supports
supports better endurance, faster recovery between better endurance, faster recovery between intervals, and the
intervals, and the ability to sustain higher performance ability to sustain higher performance during repeated
during repeated efforts or prolonged activity. efforts or prolonged activity. Additionally, a quick return
Additionally, a quick return to baseline signals that to baseline signals that the autonomic nervous system is
the autonomic nervous system is functioning well, functioning well, reducing stress on the body and promoting
reducing stress on the body and promoting more efficient more efficient recovery. This also reflects a healthier
recovery. This also reflects a healthier metabolic metabolic system, better management of metabolic byproducts
system, better management of metabolic byproducts like like CO2, and a lower risk of chronic conditions.
CO2, and a lower risk of chronic conditions.
</p> </p>
</div> </div>
</div> </div>
@@ -169,5 +162,4 @@
<div>SOCIAL: @ishplabs</div> <div>SOCIAL: @ishplabs</div>
<div class="bg-white text-black px-3 py-1 font-bold">17</div> <div class="bg-white text-black px-3 py-1 font-bold">17</div>
</div> </div>
</body> </div>
</html>
+74 -209
View File
@@ -1,13 +1,4 @@
<!DOCTYPE html> <div class="w-full page">
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Glossary - Page 18</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-white font-sans">
<!-- Header -->
<div class="bg-black text-white p-4 flex items-center justify-between"> <div class="bg-black text-white p-4 flex items-center justify-between">
<div class="flex items-center space-x-4"> <div class="flex items-center space-x-4">
<div class="text-xl font-bold">ISHP</div> <div class="text-xl font-bold">ISHP</div>
@@ -30,21 +21,20 @@
<div class="mb-12 text-sm leading-relaxed"> <div class="mb-12 text-sm leading-relaxed">
<p class="font-semibold mb-2">Local Muscle Activity/SMO2:</p> <p class="font-semibold mb-2">Local Muscle Activity/SMO2:</p>
<p> <p>
SmO2 testing is a valuable tool for understanding how SmO2 testing is a valuable tool for understanding how muscles
muscles respond to various physiological stressors and how respond to various physiological stressors and how to fine-tune
to fine-tune training, nutrition and hydration accordingly. training, nutrition and hydration accordingly. Monitoring
Monitoring changes in tissue oxygen saturation and changes in tissue oxygen saturation and utilization helps
utilization helps identify an individual's optimal intensity identify an individual's optimal intensity to work at, as well
to work at, as well as how well they recover between bouts as how well they recover between bouts of intensity. This can
of intensity. This can help optimize training to improve help optimize training to improve performance, prevent
performance, prevent overtraining, and tailor strategies for overtraining, and tailor strategies for better results.
better results.
</p> </p>
<p> <p>
During competitions, athletes can also use SmO2 data to pace During competitions, athletes can also use SmO2 data to pace
themselves effectively. Adjusting intensity based on muscle themselves effectively. Adjusting intensity based on muscle
oxygenation can help prevent premature fatigue and optimize oxygenation can help prevent premature fatigue and optimize race
race outcomes outcomes
</p> </p>
</div> </div>
@@ -57,9 +47,7 @@
<!-- Male Chart --> <!-- Male Chart -->
<div class="mb-8"> <div class="mb-8">
<div class="flex items-center mb-4"> <div class="flex items-center mb-4">
<div class="w-20 text-right mr-4 font-medium"> <div class="w-20 text-right mr-4 font-medium">Age (M)</div>
Age (M)
</div>
<div class="flex-1 grid grid-cols-11 gap-0 h-20"> <div class="flex-1 grid grid-cols-11 gap-0 h-20">
<!-- Age 20-39 row --> <!-- Age 20-39 row -->
<div <div
@@ -67,36 +55,16 @@
> >
20-39 20-39
</div> </div>
<div <div class="bg-yellow-300 border border-gray-300"></div>
class="bg-yellow-300 border border-gray-300" <div class="bg-green-300 border border-gray-300"></div>
></div> <div class="bg-green-400 border border-gray-300"></div>
<div <div class="bg-yellow-300 border border-gray-300"></div>
class="bg-green-300 border border-gray-300" <div class="bg-red-300 border border-gray-300"></div>
></div> <div class="bg-red-400 border border-gray-300"></div>
<div <div class="bg-red-400 border border-gray-300"></div>
class="bg-green-400 border border-gray-300" <div class="bg-red-400 border border-gray-300"></div>
></div> <div class="bg-red-400 border border-gray-300"></div>
<div <div class="bg-red-400 border border-gray-300"></div>
class="bg-yellow-300 border border-gray-300"
></div>
<div
class="bg-red-300 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
</div> </div>
</div> </div>
@@ -109,36 +77,16 @@
> >
40-59 40-59
</div> </div>
<div <div class="bg-green-300 border border-gray-300"></div>
class="bg-green-300 border border-gray-300" <div class="bg-green-400 border border-gray-300"></div>
></div> <div class="bg-yellow-300 border border-gray-300"></div>
<div <div class="bg-yellow-300 border border-gray-300"></div>
class="bg-green-400 border border-gray-300" <div class="bg-red-300 border border-gray-300"></div>
></div> <div class="bg-red-400 border border-gray-300"></div>
<div <div class="bg-red-400 border border-gray-300"></div>
class="bg-yellow-300 border border-gray-300" <div class="bg-red-400 border border-gray-300"></div>
></div> <div class="bg-red-400 border border-gray-300"></div>
<div <div class="bg-red-400 border border-gray-300"></div>
class="bg-yellow-300 border border-gray-300"
></div>
<div
class="bg-red-300 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
</div> </div>
</div> </div>
@@ -151,36 +99,16 @@
> >
60-79 60-79
</div> </div>
<div <div class="bg-green-300 border border-gray-300"></div>
class="bg-green-300 border border-gray-300" <div class="bg-green-400 border border-gray-300"></div>
></div> <div class="bg-green-400 border border-gray-300"></div>
<div <div class="bg-yellow-300 border border-gray-300"></div>
class="bg-green-400 border border-gray-300" <div class="bg-red-300 border border-gray-300"></div>
></div> <div class="bg-red-400 border border-gray-300"></div>
<div <div class="bg-red-400 border border-gray-300"></div>
class="bg-green-400 border border-gray-300" <div class="bg-red-400 border border-gray-300"></div>
></div> <div class="bg-red-400 border border-gray-300"></div>
<div <div class="bg-red-400 border border-gray-300"></div>
class="bg-yellow-300 border border-gray-300"
></div>
<div
class="bg-red-300 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
</div> </div>
</div> </div>
@@ -208,9 +136,7 @@
<!-- Female Chart --> <!-- Female Chart -->
<div class="mb-8"> <div class="mb-8">
<div class="flex items-center mb-4"> <div class="flex items-center mb-4">
<div class="w-20 text-right mr-4 font-medium"> <div class="w-20 text-right mr-4 font-medium">Age (F)</div>
Age (F)
</div>
<div class="flex-1 grid grid-cols-11 gap-0 h-20"> <div class="flex-1 grid grid-cols-11 gap-0 h-20">
<!-- Age 20-39 row --> <!-- Age 20-39 row -->
<div <div
@@ -218,36 +144,16 @@
> >
20-39 20-39
</div> </div>
<div <div class="bg-red-300 border border-gray-300"></div>
class="bg-red-300 border border-gray-300" <div class="bg-red-300 border border-gray-300"></div>
></div> <div class="bg-yellow-300 border border-gray-300"></div>
<div <div class="bg-green-300 border border-gray-300"></div>
class="bg-red-300 border border-gray-300" <div class="bg-green-400 border border-gray-300"></div>
></div> <div class="bg-green-300 border border-gray-300"></div>
<div <div class="bg-yellow-300 border border-gray-300"></div>
class="bg-yellow-300 border border-gray-300" <div class="bg-red-300 border border-gray-300"></div>
></div> <div class="bg-red-400 border border-gray-300"></div>
<div <div class="bg-red-400 border border-gray-300"></div>
class="bg-green-300 border border-gray-300"
></div>
<div
class="bg-green-400 border border-gray-300"
></div>
<div
class="bg-green-300 border border-gray-300"
></div>
<div
class="bg-yellow-300 border border-gray-300"
></div>
<div
class="bg-red-300 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
</div> </div>
</div> </div>
@@ -260,36 +166,16 @@
> >
40-59 40-59
</div> </div>
<div <div class="bg-red-400 border border-gray-300"></div>
class="bg-red-400 border border-gray-300" <div class="bg-red-300 border border-gray-300"></div>
></div> <div class="bg-yellow-300 border border-gray-300"></div>
<div <div class="bg-green-300 border border-gray-300"></div>
class="bg-red-300 border border-gray-300" <div class="bg-green-400 border border-gray-300"></div>
></div> <div class="bg-yellow-300 border border-gray-300"></div>
<div <div class="bg-red-300 border border-gray-300"></div>
class="bg-yellow-300 border border-gray-300" <div class="bg-red-400 border border-gray-300"></div>
></div> <div class="bg-red-400 border border-gray-300"></div>
<div <div class="bg-red-400 border border-gray-300"></div>
class="bg-green-300 border border-gray-300"
></div>
<div
class="bg-green-400 border border-gray-300"
></div>
<div
class="bg-yellow-300 border border-gray-300"
></div>
<div
class="bg-red-300 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
</div> </div>
</div> </div>
@@ -302,36 +188,16 @@
> >
60-79 60-79
</div> </div>
<div <div class="bg-red-400 border border-gray-300"></div>
class="bg-red-400 border border-gray-300" <div class="bg-red-300 border border-gray-300"></div>
></div> <div class="bg-yellow-300 border border-gray-300"></div>
<div <div class="bg-green-300 border border-gray-300"></div>
class="bg-red-300 border border-gray-300" <div class="bg-green-400 border border-gray-300"></div>
></div> <div class="bg-yellow-300 border border-gray-300"></div>
<div <div class="bg-red-300 border border-gray-300"></div>
class="bg-yellow-300 border border-gray-300" <div class="bg-red-400 border border-gray-300"></div>
></div> <div class="bg-red-400 border border-gray-300"></div>
<div <div class="bg-red-400 border border-gray-300"></div>
class="bg-green-300 border border-gray-300"
></div>
<div
class="bg-green-400 border border-gray-300"
></div>
<div
class="bg-yellow-300 border border-gray-300"
></div>
<div
class="bg-red-300 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
</div> </div>
</div> </div>
@@ -367,5 +233,4 @@
<div>SOCIAL: @ishplabs</div> <div>SOCIAL: @ishplabs</div>
<div class="bg-white text-black px-3 py-1 font-bold">18</div> <div class="bg-white text-black px-3 py-1 font-bold">18</div>
</div> </div>
</body> </div>
</html>
+1 -12
View File
@@ -1,13 +1,4 @@
<!DOCTYPE html> <div class="w-full page bg-white">
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Glossary - Page 19</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-white font-sans">
<div>
<!-- Header --> <!-- Header -->
<div <div
class="bg-black text-white p-4 flex items-center justify-between" class="bg-black text-white p-4 flex items-center justify-between"
@@ -846,5 +837,3 @@
<div class="bg-white text-black px-3 py-1 font-bold">19</div> <div class="bg-white text-black px-3 py-1 font-bold">19</div>
</div> </div>
</div> </div>
</body>
</html>
+1 -1
View File
@@ -1,4 +1,4 @@
<div class="bg-white w-full page m-0 p-0" style="height: 297mm"> <div class="bg-white w-full page m-0 p-0">
<div class="px-16 py-20"> <div class="px-16 py-20">
<!-- Table of Contents Header --> <!-- Table of Contents Header -->
<div class="mb-12"> <div class="mb-12">
+3 -3
View File
@@ -1,4 +1,4 @@
<div class="w-full page bg-white" style="height: 297mm;"></div> <div class="w-full page bg-white">
<!-- Header Section --> <!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between"> <div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
@@ -30,7 +30,7 @@
<!-- Body Composition Chart --> <!-- Body Composition Chart -->
<div class="flex justify-center mb-8"> <div class="flex justify-center mb-8">
<div class="relative"> <div class="relative">
<img src="{{ body_composition_chart | default('../graphs/page_1_body_composition.png') }}" <img src="{{ body_composition_chart}}"
alt="Body Composition Chart" alt="Body Composition Chart"
class="w-80 h-80 object-contain"> class="w-80 h-80 object-contain">
@@ -53,7 +53,7 @@
<!-- Body Fat Chart --> <!-- Body Fat Chart -->
<div class="flex justify-center"> <div class="flex justify-center">
<img src="{{ body_fat_chart | default('../graphs/page_1_body_fat.png') }}" <img src="{{ body_fat_chart}}"
alt="Body Fat Percentage Chart" alt="Body Fat Percentage Chart"
class="w-full max-w-2xl h-32 object-contain"> class="w-full max-w-2xl h-32 object-contain">
</div> </div>
+1 -1
View File
@@ -1,4 +1,4 @@
<div class="w-full page bg-white" style="height: 297mm;"></div> <div class="w-full page bg-white">
<!-- Header Section --> <!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between"> <div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
+1 -1
View File
@@ -1,4 +1,4 @@
<div class="w-full page bg-white" style="height: 297mm;"></div> <div class="w-full page bg-white">
<!-- Header Section --> <!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between"> <div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
+1 -1
View File
@@ -1,4 +1,4 @@
<div class="w-full page bg-white" style="height: 297mm;"></div> <div class="w-full page bg-white">
<!-- Header Section --> <!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between"> <div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
+2 -2
View File
@@ -1,4 +1,4 @@
<div class="w-full page bg-white" style="height: 297mm;"></div> <div class="w-full page bg-white">
<!-- Header Section --> <!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between"> <div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
@@ -150,7 +150,7 @@
<!-- Respiratory Graph --> <!-- Respiratory Graph -->
<div class="flex justify-center mb-4"> <div class="flex justify-center mb-4">
<img src="{{ respiratory_graph | default('../graphs/respiratory_chart.png') }}" <img src="{{ respiratory_graph }}"
alt="Respiratory Analysis Chart" alt="Respiratory Analysis Chart"
class="w-full max-w-4xl h-64 object-contain"> class="w-full max-w-4xl h-64 object-contain">
</div> </div>
+1 -1
View File
@@ -1,4 +1,4 @@
<div class="w-full page bg-white" style="height: 297mm;"></div> <div class="w-full page bg-white">
<!-- Header Section --> <!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between"> <div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
+2 -2
View File
@@ -1,4 +1,4 @@
<div class="w-full page bg-white" style="height: 297mm;"></div> <div class="w-full page bg-white">
<!-- Header Section --> <!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between"> <div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center"> <div class="flex items-center">
@@ -18,7 +18,7 @@
<div class="px-8 py-12 flex flex-col items-center justify-center h-full"> <div class="px-8 py-12 flex flex-col items-center justify-center h-full">
<!-- Fuel Utilization Chart --> <!-- Fuel Utilization Chart -->
<div class="w-full max-w-5xl"> <div class="w-full max-w-5xl">
<img src="{{ fuel_utilization_chart | default('../graphs/fuel_utilization_chart.png') }}" <img src="{{ fuel_utilization_chart }}"
alt="Fuel Utilization Report - Institute of Science, Health and Performance" alt="Fuel Utilization Report - Institute of Science, Health and Performance"
class="w-full h-auto object-contain"> class="w-full h-auto object-contain">
</div> </div>
BIN
View File
Binary file not shown.