Add body fat analysis graph for page 1

This commit is contained in:
bolade
2025-09-24 09:57:15 +01:00
parent 4753276778
commit 845a7ca099
24 changed files with 4139 additions and 41 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

+341
View File
@@ -7,6 +7,347 @@ env = Environment(loader=FileSystemLoader("report_gen"))
pages = [
("page_1.html", {"name": "John Doe", "surname": "Moran", "date": "July 29, 2025"}),
("page_2.html", {"content": "This is page 2 content"}),
(
"page_3.html",
{
"patient_name": "Keirstyn Moran",
"age": "34",
"height": "5'4\"",
"weight": "123lbs",
"focus": "Endurance",
"fat_mass": "27.6lbs",
"fat_percentage": "22.4%",
"lean_mass": "95.4lbs",
"lean_percentage": "77.6%",
"body_fat_percent": "22.4%",
"age_range": "20-39",
"gender": "F",
"contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com",
"social": "@ishplabs",
"page_number": "4",
"body_composition_chart": "../graphs/page_1_body_composition.png",
"body_fat_chart": "../graphs/page_1_body_fat.png",
},
),
(
"page_4.html",
{
"patient_name": "Keirstyn Moran",
"age": "34",
"height": "5'4\"",
"weight": "123lbs",
"focus": "Endurance",
"contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com",
"social": "@ishplabs",
"page_number": "3",
},
),
(
"page_5.html",
{
"patient_name": "Keirstyn Moran",
"age": "34",
"height": "5'4\"",
"weight": "123lbs",
"focus": "Endurance",
"resting_calories": "1386kCals",
"fat_percentage": "33%",
"carb_percentage": "67%",
"neat_calories": "762kCals",
"weight_loss_calories": "423kCals",
"weight_loss_rate": "1.1lbs",
"total_calories": "~1725kCals",
"contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com",
"social": "@ishplabs",
"page_number": "5",
},
),
(
"page_6.html",
{
"patient_name": "Keirstyn Moran",
"age": "34",
"height": "5'4\"",
"weight": "123lbs",
"focus": "Endurance",
"deficit_calories": "1725KCals",
"deficit_protein": "120g Protein",
"deficit_carbs": "155g Carbs",
"deficit_fat": "69g Fat",
"deficit_fiber": "25g Fibre",
"refeed_weekday_calories": "1615KCals",
"refeed_weekday_protein": "120g Protein",
"refeed_weekday_carbs": "142g Carbs",
"refeed_weekday_fat": "63g Fat",
"refeed_weekday_fiber": "24g Fibre",
"refeed_weekend_calories": "2000KCals",
"refeed_weekend_protein": "120g Protein",
"refeed_weekend_carbs": "190g Carbs",
"refeed_weekend_fat": "84g Fat",
"refeed_weekend_fiber": "30g Fibre",
"protein_percentage": "28%",
"carbs_percentage": "36%",
"fats_percentage": "36%",
"contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com",
"social": "@ishplabs",
"page_number": "6",
},
),
(
"page_7.html",
{
"patient_name": "Keirstyn Moran",
"age": "34",
"height": "5'4\"",
"weight": "123lbs",
"focus": "Endurance",
"fvc_value": "4.24L → 112.0%",
"fev1_value": "3.26L → 103.3%",
"fev1_fvc_ratio": "76.89% → 91.8%",
"indication": "No Respiratory Capacity Limitation",
"respiratory_graph": "../graphs/respiratory_chart.png",
"peak_vt_value": "2.38L/Breath which occurs at 172bpm (Zone 3)",
"peak_vt_percentage": "73% of FEV1",
"contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com",
"social": "@ishplabs",
"page_number": "7",
},
),
(
"page_8.html",
{
"patient_name": "Keirstyn Moran",
"age": "34",
"height": "5'4\"",
"weight": "123lbs",
"focus": "Endurance",
"vo2_max_value": "49.5",
"vo2_max_percentile": "100th percentile",
"age_range": "30-39",
"very_poor_range": "19.0-24.1",
"poor_range": "24.1-28.2",
"fair_range": "28.2-32.2",
"good_range": "32.2-35.7",
"excellent_range": "35.7-45.8",
"superior_range": "45.8+",
"zone1_percentage": "55-65% of Max Heart Rate",
"zone2_percentage": "65-75% of Max Heart Rate",
"zone3_percentage": "80-85% of Max Heart Rate",
"zone4_percentage": "85-88% of Max Heart Rate",
"zone5_percentage": "90% of Max Heart Rate",
"zone1_bpm": "81-96bpm",
"zone2_bpm": "96-100bpm",
"zone3_bpm": "100-178bpm",
"zone4_bpm": "178-188bpm",
"zone5_bpm": "188-198bpm",
"zone1_speed": "3.5mph",
"zone2_speed": "3.5-4.0mph",
"zone3_speed": "4.0-6.5mph",
"zone4_speed": "6.5-7.0mph",
"zone5_speed": "7.0-8.0mph",
"zone1_incline": "2% Incline",
"zone2_incline": "2% Incline",
"zone3_incline": "2% Incline",
"zone4_incline": "2% Incline",
"zone5_incline": "2% Incline",
"zone1_pace": "10:39min/km Pace",
"zone2_pace": "10:39-9:19min/km Pace",
"zone3_pace": "9:19-5:44min/km Pace",
"zone4_pace": "5:44-5:20min/km Pace",
"zone5_pace": "5:20-4:40min/km Pace",
"zone1_calories": "4.4kcals/minute",
"zone2_calories": "5.9kcals/minute",
"zone3_calories": "9.4kcals/minute",
"zone4_calories": "12.5kcals/minute",
"zone5_calories": "12.8kcals/minute",
"zone1_carb": "Avg: 0.4g/min Carb Utilization",
"zone2_carb": "Avg: 0.6g/min Carb Utilization",
"zone3_carb": "Avg: 1.9g/min Carb Utilization",
"zone4_carb": "Avg: 2.9g/min Carb Utilization",
"zone5_carb": "Avg: 3.1g/min Carb Utilization",
"zone1_breaths": "Avg: 27 breaths",
"zone2_breaths": "Avg: 28 breaths",
"zone3_breaths": "Avg: 31 breaths",
"zone4_breaths": "Avg: 42 breaths",
"zone5_breaths": "Avg: 51 breaths",
"zone1_breath_range": "Ideal Range: 15-20 breaths",
"zone2_breath_range": "Ideal Range: 20-25 breaths",
"zone3_breath_range": "Ideal Range: 25-30 breaths",
"zone4_breath_range": "Ideal Range: 30-35 breaths",
"zone5_breath_range": "Ideal Range: 40+ breaths",
"contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com",
"social": "@ishplabs",
"page_number": "8",
},
),
(
"page_9.html",
{
"patient_name": "Keirstyn Moran",
"age": "34",
"height": "5'4\"",
"weight": "123lbs",
"focus": "Endurance",
"fuel_utilization_chart": "../graphs/fuel_utilization_chart.png",
"client_name": "Keirstyn Moran",
"assessment_date": "July 29 2025",
"contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com",
"social": "@ishplabs",
"page_number": "9",
},
),
(
"page_10.html",
{
"patient_name": "Keirstyn Moran",
"age": "34",
"height": "5'4\"",
"weight": "123lbs",
"focus": "Endurance",
"vo2_pulse_drop_bpm": "180 bpm",
"vo2_pulse_drop_zone": "Zone 4",
"vo2_pulse_chart": "../graphs/vo2_pulse_chart.png",
"vo2_breath_drop_bpm": "173 bpm",
"vo2_breath_drop_zone": "Zone 3",
"vo2_breath_chart": "../graphs/vo2_breath_chart.png",
"contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com",
"social": "@ishplabs",
"page_number": "9",
},
),
(
"page_11.html",
{
"patient_name": "Keirstyn Moran",
"age": "34",
"height": "5'4\"",
"weight": "123lbs",
"focus": "Endurance",
"fat_max_optimal": "*Optimal 10-12Kcals/minute",
"fat_max_value": "3.8Kcals/min",
"fat_max_heart_rate": "49% of Max Heart Rate",
"fat_max_bpm": "97 bpm",
"crossover_bpm": "100bpm",
"crossover_heart_rate": "51% of Max Heart Rate",
"fat_metabolism_note": "100bpm at a speed of 4.0mph and incline of 2%",
"fat_metabolism_chart": "../graphs/fat_metabolism_chart.png",
"cardiac_recovery_time": "(1 minute)",
"cardiac_recovery_percentage": "33%",
"metabolic_recovery_time": "(2 minute)",
"metabolic_recovery_percentage": "65%",
"breath_recovery_time": "(2.5 minute)",
"breath_recovery_percentage": "76%",
"recovery_chart": "../graphs/recovery_chart.png",
"resting_heart_rate": "53bpm",
"hr_age_range": "26-35",
"hr_poor": "82bpm +",
"hr_below_avg": "75-81bpm",
"hr_average": "71-74bpm",
"hr_above_avg": "66-70bpm",
"hr_good": "62-65bpm",
"hr_excellent": "55-61bpm",
"hr_athlete": "44-54bpm",
"contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com",
"social": "@ishplabs",
"page_number": "10",
},
),
(
"page_13.html",
{
"patient_name": "Keirstyn Moran",
"age": "34",
"height": "5'4\"",
"weight": "123lbs",
"focus": "Endurance",
"zone2_frequency": "3-4x/week",
"zone2_duration": "40+ minutes",
"zone2_hr_range": "____",
"zone2_speed": "____ mph",
"zone2_incline": "2% Incline",
"zone3_frequency": "1-2x/week",
"zone3_duration": "10-20 minutes",
"zone3_hr_range": "____ bpm",
"zone3_speed": "____mph",
"zone3_incline": "2% Incline",
"zone3_target_hr": "___ bpm",
"zone3_recovery_speed": "____mph",
"zone3_recovery_incline": "2% Incline",
"zone1_hr_range": "____bpm",
"zone1_duration": "4-8 minutes",
"zone3_repeats": "2-3 times",
"short_sets": "8-10",
"short_duration": "10-30 seconds",
"short_zone": "5",
"short_rpe": "10",
"short_recovery": "20-60 seconds",
"medium_sets": "6-8",
"medium_duration": "30-90 seconds",
"medium_zone": "4",
"medium_rpe": "8-9",
"medium_recovery": "30-90 seconds",
"long_sets": "4-6",
"long_duration": "5-10 minutes",
"long_zone": "3/4",
"long_rpe": "7-8",
"long_recovery": "2.5-5 minutes",
"tempo_sets": "2-3",
"tempo_duration": "10-20 minutes",
"tempo_zone": "3",
"tempo_rpe": "6-7",
"tempo_recovery": "4-8 minutes",
"cardio_sets": "1",
"cardio_duration": ">40 minutes",
"cardio_zone": "2",
"cardio_rpe": "4-5",
"cardio_recovery": "N/A",
"week1_mon_zone": "Zone 2",
"week1_mon_duration": "45 mins",
"week1_tue_zone": "Zone 2",
"week1_tue_duration": "45 mins",
"week1_wed_zone": "Zone 3",
"week1_wed_duration1": "10mins On",
"week1_wed_duration2": "8mins Rest",
"week1_wed_sets": "x2",
"week1_thu_content": "",
"week1_fri_zone": "Zone 2",
"week1_fri_duration": "45 mins",
"week1_sat_content": "",
"week1_sun_content": "",
"week2_mon_zone": "Zone 2",
"week2_mon_duration": "50 mins",
"week2_tue_zone": "Zone 2",
"week2_tue_duration": "50 mins",
"week2_wed_zone": "Zone 3",
"week2_wed_duration1": "10mins On",
"week2_wed_duration2": "6mins Rest",
"week2_wed_sets": "x2",
"week2_thu_content": "",
"week2_fri_zone": "Zone 2",
"week2_fri_duration": "50 mins",
"week2_sat_content": "",
"week2_sun_content": "",
"contact_email": "info@ishplabs.com",
"website": "www.ishplabs.com",
"social": "@ishplabs",
"page_number": "12",
},
),
("page_14.html", {}),
("page_15.html", {}),
("page_16.html", {}),
("page_17.html", {}),
("page_18.html", {}),
("page_19.html", {}),
]
# Render each template with its own context
+68 -38
View File
File diff suppressed because one or more lines are too long
+302 -2
View File
@@ -2,12 +2,312 @@
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 1,
"id": "6eee3ddd",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
"import pandas as pd\n",
"import fitz"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "7b50e3ea",
"metadata": {},
"outputs": [],
"source": [
"file = fitz.open(\"data/~Moran~K~19910201~Spirometry Exam~20250729~20250729032843.pdf\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "b7e1c3ee",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 3 image(s) on page 1\n",
"Saved: page_1_image_1.png\n",
"Saved: page_1_image_2.png\n",
"Saved: page_1_image_3.png\n",
"\n",
"Total images extracted: 3\n",
"Images saved in: extracted_images/\n"
]
}
],
"source": [
"import os\n",
"\n",
"# Create directory to save images if it doesn't exist\n",
"output_dir = \"extracted_images\"\n",
"os.makedirs(output_dir, exist_ok=True)\n",
"\n",
"# Extract all images from the PDF\n",
"image_count = 0\n",
"for page_num in range(len(file)):\n",
" page = file[page_num]\n",
" \n",
" # Get list of images on this page\n",
" image_list = page.get_images()\n",
" \n",
" if image_list:\n",
" print(f\"Found {len(image_list)} image(s) on page {page_num + 1}\")\n",
" \n",
" for img_index, img in enumerate(image_list):\n",
" # Get image reference number\n",
" xref = img[0]\n",
" \n",
" # Extract image data\n",
" base_image = file.extract_image(xref)\n",
" image_bytes = base_image[\"image\"]\n",
" image_ext = base_image[\"ext\"]\n",
" \n",
" # Create filename\n",
" image_filename = f\"page_{page_num + 1}_image_{img_index + 1}.{image_ext}\"\n",
" image_path = os.path.join(output_dir, image_filename)\n",
" \n",
" # Save image\n",
" with open(image_path, \"wb\") as image_file:\n",
" image_file.write(image_bytes)\n",
" \n",
" print(f\"Saved: {image_filename}\")\n",
" image_count += 1\n",
" else:\n",
" print(f\"No images found on page {page_num + 1}\")\n",
"\n",
"print(f\"\\nTotal images extracted: {image_count}\")\n",
"print(f\"Images saved in: {output_dir}/\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "e2af9631",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Error extracting tables from page 1: object of type 'TableFinder' has no len()\n",
"\n",
"Extracted text from 1 pages\n",
"Found 0 tables total\n",
"\n",
"First 1000 characters of extracted text:\n",
"\n",
"--- Page 1 ---\n",
"PRE#1\n",
"PRE#2\n",
"PRE#3\n",
"Spirometry Results\n",
"VISIT DATE 2025-07-29\n",
"ID\n",
"Last Name\n",
"Moran\n",
"First Name\n",
"K\n",
"Date of birth\n",
"1991-02-01\n",
"Origin\n",
"Caucasian\n",
"Age\n",
"34\n",
"Gender\n",
"F\n",
"Height\n",
"163 cm\n",
"Weight\n",
"54 kg\n",
"BMI\n",
"20.3\n",
"ACCEPTABILITY CRITERIA\n",
"Quality Grade PRE F Variability FEV1=0.05(1.56%), FVC=0.07(1.68%)\n",
"Acceptable trials 0\n",
"LLN\n",
"Predicted\n",
"FVC\n",
"FEV1\n",
"FEV1/FVC\n",
"-5\n",
"-4\n",
"-3\n",
"-2\n",
"-1\n",
"0\n",
"1\n",
"2\n",
"3\n",
"Spirometry\n",
"Parameters\n",
"FVC\n",
"FEV1\n",
"FEV1/FVC\n",
"PEF\n",
"FEF2575\n",
"FEF25\n",
"FEF50\n",
"FEF75\n",
"PEFTime\n",
"EVol\n",
"FEV6\n",
"L\n",
"L\n",
"%\n",
"L/m\n",
"L/s\n",
"L/s\n",
"L/s\n",
"ms\n",
"mL\n",
"L\n",
"L/s\n",
"Best\n",
"3.26\n",
"76.89\n",
"684\n",
"2.74\n",
"6.08\n",
"3.06\n",
"1.06\n",
"79\n",
"78.0\n",
"4.24\n",
"4.22\n",
"LLN\n",
"3.03\n",
"2.53\n",
"72.47\n",
"222\n",
"2.15\n",
"0.0\n",
"0.0\n",
"0.71\n",
"-\n",
"-\n",
"3.03\n",
"Pred.\n",
"3.79\n",
"3.16\n",
"384\n",
"3.42\n",
"0.0\n",
"0.0\n",
"1.41\n",
"-\n",
"-\n",
"3.79\n",
"83.78\n",
"%Pred.\n",
"112.0\n",
"103.3\n",
"91.8\n",
"178.7\n",
"80.2\n",
"-\n",
"-\n",
"75.1\n",
"-\n",
"-\n",
"111.4\n",
"ZScore\n",
"0.95\n",
"0.28\n",
"-1.05\n",
"-\n",
"-0.84\n",
"0.0\n",
"0.0\n",
"-0.72\n",
"-\n",
"-\n",
"-\n",
"PRE#1\n",
"4.24\n",
"3.26\n",
"76.9\n",
"444\n",
"2.74\n",
"6.08\n",
"3.06\n",
"1.06\n",
"79\n",
"78.0\n",
"4.22\n",
"PRE#2\n",
"4.17\n",
"3.21\n",
"77.0\n",
"438\n",
"2.68\n",
"6.0\n",
"1.12\n",
"49\n",
"77.0\n",
"4.17\n",
"3.1\n",
"PRE#3\n",
"0.94\n",
"684\n",
"4.15\n",
"2.77\n",
"197.0\n",
"4.13\n",
"75.7\n",
"39\n",
"2.48\n",
"3.14\n",
"5.53\n",
"NOTE\n",
"Spirobank Smart Z114689 Sent on 2025-07-29 15:28\n",
"BTPS 1.111 21.0 °C \n"
]
}
],
"source": [
"# Extract text and tables from the PDF\n",
"text_content = \"\"\n",
"tables_data = []\n",
"\n",
"for page_num in range(len(file)):\n",
" page = file[page_num]\n",
" \n",
" # Extract text from the page\n",
" page_text = page.get_text()\n",
" text_content += f\"\\n--- Page {page_num + 1} ---\\n\"\n",
" text_content += page_text\n",
" \n",
" # Try to find tables using PyMuPDF's table detection\n",
" try:\n",
" tables = page.find_tables()\n",
" if tables:\n",
" print(f\"Found {len(tables)} table(s) on page {page_num + 1}\")\n",
" for i, table in enumerate(tables):\n",
" table_data = table.extract()\n",
" tables_data.append({\n",
" 'page': page_num + 1,\n",
" 'table_index': i,\n",
" 'data': table_data\n",
" })\n",
" print(f\"Table {i+1} on page {page_num + 1}:\")\n",
" for row in table_data:\n",
" print(row)\n",
" print(\"-\" * 50)\n",
" except Exception as e:\n",
" print(f\"Error extracting tables from page {page_num + 1}: {e}\")\n",
"\n",
"print(f\"\\nExtracted text from {len(file)} pages\")\n",
"print(f\"Found {len(tables_data)} tables total\")\n",
"\n",
"# Display first 1000 characters of text content to see what we have\n",
"print(\"\\nFirst 1000 characters of extracted text:\")\n",
"print(text_content[:1000])"
]
},
{
+65
View File
@@ -0,0 +1,65 @@
<div class="w-full page bg-white" style="height: 297mm;"></div>
<!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center">
<div class="text-lg font-bold mr-2">ISHP</div>
<div class="w-6 h-4 bg-cyan-400 mr-8"></div>
</div>
<div class="flex space-x-8 text-sm">
<span>Name: {{ patient_name | default('Keirstyn Moran') }}</span>
<span>Age: {{ age | default('34') }}</span>
<span>Height: {{ height | default('5\'4"') }}</span>
<span>Weight: {{ weight | default('123lbs') }}</span>
<span>Focus: {{ focus | default('Endurance') }}</span>
</div>
</div>
<!-- Main Content -->
<div class="px-8 py-6">
<!-- VO2 Pulse Section -->
<div class="mb-8">
<!-- VO2 Pulse Header -->
<div class="bg-gray-200 p-4 rounded-lg mb-4 text-center">
<h2 class="text-lg font-bold text-black">VO2 Pulse</h2>
<p class="text-black">Begins to drop at {{ vo2_pulse_drop_bpm | default('180 bpm') }} ({{ vo2_pulse_drop_zone | default('Zone 4') }})</p>
</div>
<!-- VO2 Pulse Graph -->
<div class="flex justify-center mb-6">
<img src="{{ vo2_pulse_chart | default('../graphs/vo2_pulse_chart.png') }}"
alt="VO2 Pulse Chart"
class="w-full max-w-4xl h-auto object-contain">
</div>
</div>
<!-- VO2 Breath Section -->
<div class="mb-8">
<!-- VO2 Breath Header -->
<div class="bg-gray-200 p-4 rounded-lg mb-4 text-center">
<h2 class="text-lg font-bold text-black">VO2 Breath</h2>
<p class="text-black">Begins to drop at {{ vo2_breath_drop_bpm | default('173 bpm') }} ({{ vo2_breath_drop_zone | default('Zone 3') }})</p>
</div>
<!-- VO2 Breath Graph -->
<div class="flex justify-center mb-6">
<img src="{{ vo2_breath_chart | default('../graphs/vo2_breath_chart.png') }}"
alt="VO2 Breath Chart"
class="w-full max-w-4xl h-auto object-contain">
</div>
</div>
</div>
<!-- Footer Section -->
<div class="absolute bottom-0 left-0 right-0 bg-black text-white px-6 py-3">
<div class="flex justify-between items-center text-sm">
<div class="flex space-x-8">
<span>CONTACT: {{ contact_email | default('info@ishplabs.com') }}</span>
<span>WEBSITE: {{ website | default('www.ishplabs.com') }}</span>
<span>SOCIAL: {{ social | default('@ishplabs') }}</span>
</div>
<div class="bg-white text-black font-bold px-3 py-1 text-lg">
{{ page_number | default('9') }}
</div>
</div>
</div>
</div>
+265
View File
@@ -0,0 +1,265 @@
<div class="w-full page bg-white" style="height: 297mm">
<!-- Header Section -->
<div
class="bg-black text-white px-6 py-4 flex items-center justify-between"
>
<div class="flex items-center">
<div class="text-lg font-bold mr-2">ISHP</div>
<div class="w-6 h-4 bg-cyan-400 mr-8"></div>
</div>
<div class="flex space-x-8 text-sm">
<span>Name: {{ patient_name | default('Keirstyn Moran') }}</span>
<span>Age: {{ age | default('34') }}</span>
<span>Height: {{ height | default('5\'4"') }}</span>
<span>Weight: {{ weight | default('123lbs') }}</span>
<span>Focus: {{ focus | default('Endurance') }}</span>
</div>
</div>
<!-- Main Content -->
<div class="px-8 py-6">
<!-- Fat Metabolism Section -->
<div class="mb-8">
<h2 class="text-2xl font-bold text-black mb-4 text-center">
Fat Metabolism
</h2>
<!-- Fat Metabolism Info Boxes -->
<div class="grid grid-cols-2 gap-4 mb-4">
<!-- Fat Max Box -->
<div class="bg-gray-200 p-4 rounded-lg text-center">
<h3 class="text-lg font-bold text-black mb-2">Fat Max</h3>
<p class="text-sm text-gray-600 italic mb-2">
{{ fat_max_optimal | default('*Optimal
10-12Kcals/minute') }}
</p>
<p class="text-xl font-bold text-black">
{{ fat_max_value | default('3.8Kcals/min') }}
</p>
<p class="text-sm text-black">
{{ fat_max_heart_rate | default('49% of Max Heart Rate')
}}
</p>
<p class="text-sm text-black">
{{ fat_max_bpm | default('97 bpm') }}
</p>
</div>
<!-- Carbs and Fat Crossover Box -->
<div class="bg-gray-200 p-4 rounded-lg text-center">
<h3 class="text-lg font-bold text-black mb-4">
Carbs and Fat Crossover
</h3>
<p class="text-xl font-bold text-black">
{{ crossover_bpm | default('100bpm') }}
</p>
<p class="text-sm text-black">
{{ crossover_heart_rate | default('51% of Max Heart
Rate') }}
</p>
</div>
</div>
<!-- Fat Metabolism Graph -->
<div class="mb-4">
<div class="bg-gray-100 p-2 rounded-lg mb-2">
<p class="text-black font-semibold text-center">
{{ fat_metabolism_note | default('100bpm at a speed of
4.0mph and incline of 2%') }}
</p>
</div>
<div class="flex justify-center">
<img
src="{{ fat_metabolism_chart | default('../graphs/fat_metabolism_chart.png') }}"
alt="Fat Metabolism Chart"
class="w-full max-w-4xl h-auto object-contain"
/>
</div>
</div>
</div>
<!-- Recovery Section -->
<div class="mb-8">
<h2 class="text-2xl font-bold text-black mb-4 text-center">
Recovery
</h2>
<!-- Recovery Info Boxes -->
<div class="grid grid-cols-3 gap-4 mb-4">
<!-- Cardiac Recovery -->
<div class="bg-gray-200 p-4 rounded-lg text-center">
<h3 class="text-lg font-bold text-black mb-2">
Cardiac Recovery
</h3>
<p class="text-sm text-gray-600 mb-2">
{{ cardiac_recovery_time | default('(1 minute)') }}
</p>
<p class="text-xl font-bold text-black">
{{ cardiac_recovery_percentage | default('33%') }}
</p>
</div>
<!-- Metabolic Recovery -->
<div class="bg-gray-200 p-4 rounded-lg text-center">
<h3 class="text-lg font-bold text-black mb-2">
Metabolic (CO2) Recovery
</h3>
<p class="text-sm text-gray-600 mb-2">
{{ metabolic_recovery_time | default('(2 minute)') }}
</p>
<p class="text-xl font-bold text-black">
{{ metabolic_recovery_percentage | default('65%') }}
</p>
</div>
<!-- Breath Frequency Recovery -->
<div class="bg-gray-200 p-4 rounded-lg text-center">
<h3 class="text-lg font-bold text-black mb-2">
Breath Frequency Recovery
</h3>
<p class="text-sm text-gray-600 mb-2">
{{ breath_recovery_time | default('(2.5 minute)') }}
</p>
<p class="text-xl font-bold text-black">
{{ breath_recovery_percentage | default('76%') }}
</p>
</div>
</div>
<!-- Recovery Graph -->
<div class="flex justify-center mb-6">
<img
src="{{ recovery_chart | default('../graphs/recovery_chart.png') }}"
alt="Recovery Chart"
class="w-full max-w-4xl h-auto object-contain"
/>
</div>
</div>
<!-- Resting Heart Rate Table -->
<div class="mb-6">
<h3 class="text-lg font-bold text-black mb-4 text-center">
Resting Heart Rate - {{ resting_heart_rate | default('53bpm') }}
</h3>
<table class="w-full border-collapse">
<thead>
<tr>
<th
class="bg-cyan-300 border border-gray-400 p-3 text-black font-bold"
>
Age (F)
</th>
<th
class="bg-cyan-300 border border-gray-400 p-3 text-black font-bold"
>
Poor
</th>
<th
class="bg-cyan-300 border border-gray-400 p-3 text-black font-bold"
>
Below Average
</th>
<th
class="bg-cyan-300 border border-gray-400 p-3 text-black font-bold"
>
Average
</th>
<th
class="bg-cyan-300 border border-gray-400 p-3 text-black font-bold"
>
Above Average
</th>
<th
class="bg-cyan-300 border border-gray-400 p-3 text-black font-bold"
>
Good
</th>
<th
class="bg-cyan-300 border border-gray-400 p-3 text-black font-bold"
>
Excellent
</th>
<th
class="bg-cyan-300 border border-gray-400 p-3 text-black font-bold relative"
>
Athlete
<!-- Arrow indicator -->
<div
class="absolute -bottom-4 left-1/2 transform -translate-x-1/2"
>
<div
class="w-0 h-0 border-l-4 border-r-4 border-t-8 border-transparent border-t-black"
></div>
</div>
</th>
</tr>
</thead>
<tbody>
<tr>
<td
class="bg-cyan-200 border border-gray-400 p-3 text-black font-semibold text-center"
>
{{ hr_age_range | default('26-35') }}
</td>
<td
class="bg-gray-100 border border-gray-400 p-3 text-black text-center"
>
{{ hr_poor | default('82bpm +') }}
</td>
<td
class="bg-gray-100 border border-gray-400 p-3 text-black text-center"
>
{{ hr_below_avg | default('75-81bpm') }}
</td>
<td
class="bg-gray-100 border border-gray-400 p-3 text-black text-center"
>
{{ hr_average | default('71-74bpm') }}
</td>
<td
class="bg-gray-100 border border-gray-400 p-3 text-black text-center"
>
{{ hr_above_avg | default('66-70bpm') }}
</td>
<td
class="bg-gray-100 border border-gray-400 p-3 text-black text-center"
>
{{ hr_good | default('62-65bpm') }}
</td>
<td
class="bg-gray-100 border border-gray-400 p-3 text-black text-center"
>
{{ hr_excellent | default('55-61bpm') }}
</td>
<td
class="bg-green-200 border border-gray-400 p-3 text-black text-center font-bold"
>
{{ hr_athlete | default('44-54bpm') }}
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- Footer Section -->
<div class="absolute bottom-0 left-0 right-0 bg-black text-white px-6 py-3">
<div class="flex justify-between items-center text-sm">
<div class="flex space-x-8">
<span
>CONTACT: {{ contact_email | default('info@ishplabs.com')
}}</span
>
<span
>WEBSITE: {{ website | default('www.ishplabs.com') }}</span
>
<span>SOCIAL: {{ social | default('@ishplabs') }}</span>
</div>
<div class="bg-white text-black font-bold px-3 py-1 text-lg">
{{ page_number | default('10') }}
</div>
</div>
</div>
</div>
+242
View File
@@ -0,0 +1,242 @@
<div class="w-full page bg-white" style="height: 297mm;"></div>
<!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center">
<div class="text-lg font-bold mr-2">ISHP</div>
<div class="w-6 h-4 bg-cyan-400 mr-8"></div>
</div>
<div class="flex space-x-8 text-sm">
<span>Name: {{ patient_name | default('Keirstyn Moran') }}</span>
<span>Age: {{ age | default('34') }}</span>
<span>Height: {{ height | default('5\'4"') }}</span>
<span>Weight: {{ weight | default('123lbs') }}</span>
<span>Focus: {{ focus | default('Endurance') }}</span>
</div>
</div>
<!-- Main Content -->
<div class="px-8 py-6">
<!-- Page Title -->
<h1 class="text-3xl font-bold text-black mb-8 text-center">Training Recommendations</h1>
<!-- Training Recommendations Section -->
<div class="grid grid-cols-2 gap-8 mb-8">
<!-- Left Side: Zone Recommendations -->
<div class="bg-gray-200 p-6 rounded-lg">
<!-- Zone 2 Recommendations -->
<div class="mb-6">
<h3 class="text-lg font-bold text-black mb-3">Zone 2 {{ zone2_frequency | default('3-4x/week') }}:</h3>
<ul class="text-sm text-black space-y-1 list-disc list-inside">
<li>{{ zone2_duration | default('40+ minutes') }} of Steady State Cardio (HR {{ zone2_hr_range | default('____') }} bpm)</li>
<li>{{ zone2_speed | default('____ mph') }} at {{ zone2_incline | default('2% Incline') }}</li>
</ul>
</div>
<!-- Zone 3 Recommendations -->
<div class="mb-6">
<h3 class="text-lg font-bold text-black mb-3">Zone 3 {{ zone3_frequency | default('1-2x/week') }}:</h3>
<ul class="text-sm text-black space-y-1 list-disc list-inside">
<li>{{ zone3_duration | default('10-20 minutes') }} in zone 3 (HR {{ zone3_hr_range | default('____ bpm') }})</li>
<li>{{ zone3_speed | default('____mph') }} + at {{ zone3_incline | default('2% Incline') }}</li>
<li>Slow down cadence until HR reaches {{ zone3_target_hr | default('___ bpm') }}</li>
<li>{{ zone3_recovery_speed | default('____mph') }} at {{ zone3_recovery_incline | default('2% Incline') }}</li>
<li>Maintain HR in zone 1 ({{ zone1_hr_range | default('____bpm') }}) for {{ zone1_duration | default('4-8 minutes') }}</li>
<li>Repeat {{ zone3_repeats | default('2-3 times') }}</li>
</ul>
</div>
</div>
<!-- Right Side: Training Table -->
<div>
<table class="w-full border-collapse text-sm">
<thead>
<tr>
<th class="bg-cyan-300 border border-gray-400 p-2 text-black font-bold">Type</th>
<th class="bg-cyan-300 border border-gray-400 p-2 text-black font-bold">Sets</th>
<th class="bg-cyan-300 border border-gray-400 p-2 text-black font-bold">Effort Duration</th>
<th class="bg-cyan-300 border border-gray-400 p-2 text-black font-bold">Zone</th>
<th class="bg-cyan-300 border border-gray-400 p-2 text-black font-bold">RPE</th>
<th class="bg-cyan-300 border border-gray-400 p-2 text-black font-bold">Recovery Duration</th>
</tr>
</thead>
<tbody>
<!-- Short Row -->
<tr>
<td class="border border-gray-400 p-2 text-center text-black font-semibold">Short</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ short_sets | default('8-10') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ short_duration | default('10-30 seconds') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ short_zone | default('5') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ short_rpe | default('10') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ short_recovery | default('20-60 seconds') }}</td>
</tr>
<!-- Medium Row -->
<tr>
<td class="border border-gray-400 p-2 text-center text-black font-semibold">Medium</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ medium_sets | default('6-8') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ medium_duration | default('30-90 seconds') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ medium_zone | default('4') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ medium_rpe | default('8-9') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ medium_recovery | default('30-90 seconds') }}</td>
</tr>
<!-- Long Row -->
<tr>
<td class="border border-gray-400 p-2 text-center text-black font-semibold">Long</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ long_sets | default('4-6') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ long_duration | default('5-10 minutes') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ long_zone | default('3/4') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ long_rpe | default('7-8') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ long_recovery | default('2.5-5 minutes') }}</td>
</tr>
<!-- Tempo Row -->
<tr>
<td class="border border-gray-400 p-2 text-center text-black font-semibold">Tempo</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ tempo_sets | default('2-3') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ tempo_duration | default('10-20 minutes') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ tempo_zone | default('3') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ tempo_rpe | default('6-7') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ tempo_recovery | default('4-8 minutes') }}</td>
</tr>
<!-- Cardio Row -->
<tr>
<td class="border border-gray-400 p-2 text-center text-black font-semibold">Cardio</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ cardio_sets | default('1') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ cardio_duration | default('>40 minutes') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ cardio_zone | default('2') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ cardio_rpe | default('4-5') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ cardio_recovery | default('N/A') }}</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- Training Week Example Section -->
<div class="mb-8">
<h2 class="text-2xl font-bold text-black mb-6 text-center">Training Week Example with Progression</h2>
<!-- Week 1 -->
<div class="mb-6">
<div class="grid grid-cols-7 gap-2">
<!-- Monday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-1">Monday</div>
<div class="text-sm text-black">{{ week1_mon_zone | default('Zone 2') }}</div>
<div class="text-sm text-black">{{ week1_mon_duration | default('45 mins') }}</div>
</div>
<!-- Tuesday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-1">Tuesday</div>
<div class="text-sm text-black">{{ week1_tue_zone | default('Zone 2') }}</div>
<div class="text-sm text-black">{{ week1_tue_duration | default('45 mins') }}</div>
</div>
<!-- Wednesday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-1">Wednesday</div>
<div class="text-sm text-black">{{ week1_wed_zone | default('Zone 3') }}</div>
<div class="text-sm text-black">{{ week1_wed_duration1 | default('10mins On') }}</div>
<div class="text-sm text-black">{{ week1_wed_duration2 | default('8mins Rest') }}</div>
<div class="text-sm text-black">{{ week1_wed_sets | default('x2') }}</div>
</div>
<!-- Thursday -->
<div class="bg-gray-200 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-1">Thursday</div>
<div class="text-sm text-black">{{ week1_thu_content | default('') }}</div>
</div>
<!-- Friday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-1">Friday</div>
<div class="text-sm text-black">{{ week1_fri_zone | default('Zone 2') }}</div>
<div class="text-sm text-black">{{ week1_fri_duration | default('45 mins') }}</div>
</div>
<!-- Saturday -->
<div class="bg-gray-200 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-1">Saturday</div>
<div class="text-sm text-black">{{ week1_sat_content | default('') }}</div>
</div>
<!-- Sunday -->
<div class="bg-gray-200 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-1">Sunday</div>
<div class="text-sm text-black">{{ week1_sun_content | default('') }}</div>
</div>
</div>
</div>
<!-- Week 2 -->
<div class="mb-6">
<div class="grid grid-cols-7 gap-2">
<!-- Monday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-1">Monday</div>
<div class="text-sm text-black">{{ week2_mon_zone | default('Zone 2') }}</div>
<div class="text-sm text-black">{{ week2_mon_duration | default('50 mins') }}</div>
</div>
<!-- Tuesday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-1">Tuesday</div>
<div class="text-sm text-black">{{ week2_tue_zone | default('Zone 2') }}</div>
<div class="text-sm text-black">{{ week2_tue_duration | default('50 mins') }}</div>
</div>
<!-- Wednesday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-1">Wednesday</div>
<div class="text-sm text-black">{{ week2_wed_zone | default('Zone 3') }}</div>
<div class="text-sm text-black">{{ week2_wed_duration1 | default('10mins On') }}</div>
<div class="text-sm text-black">{{ week2_wed_duration2 | default('6mins Rest') }}</div>
<div class="text-sm text-black">{{ week2_wed_sets | default('x2') }}</div>
</div>
<!-- Thursday -->
<div class="bg-gray-200 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-1">Thursday</div>
<div class="text-sm text-black">{{ week2_thu_content | default('') }}</div>
</div>
<!-- Friday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-1">Friday</div>
<div class="text-sm text-black">{{ week2_fri_zone | default('Zone 2') }}</div>
<div class="text-sm text-black">{{ week2_fri_duration | default('50 mins') }}</div>
</div>
<!-- Saturday -->
<div class="bg-gray-200 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-1">Saturday</div>
<div class="text-sm text-black">{{ week2_sat_content | default('') }}</div>
</div>
<!-- Sunday -->
<div class="bg-gray-200 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-1">Sunday</div>
<div class="text-sm text-black">{{ week2_sun_content | default('') }}</div>
</div>
</div>
</div>
</div>
</div>
<!-- Footer Section -->
<div class="absolute bottom-0 left-0 right-0 bg-black text-white px-6 py-3">
<div class="flex justify-between items-center text-sm">
<div class="flex space-x-8">
<span>CONTACT: {{ contact_email | default('info@ishplabs.com') }}</span>
<span>WEBSITE: {{ website | default('www.ishplabs.com') }}</span>
<span>SOCIAL: {{ social | default('@ishplabs') }}</span>
</div>
<div class="bg-white text-black font-bold px-3 py-1 text-lg">
{{ page_number | default('12') }}
</div>
</div>
</div>
</div>
+176
View File
@@ -0,0 +1,176 @@
<div class="w-full page bg-white" style="height: 297mm;"></div>
<!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center">
<div class="text-lg font-bold mr-2">ISHP</div>
<div class="w-6 h-4 bg-cyan-400 mr-8"></div>
</div>
<div class="flex space-x-8 text-sm">
<span>Name: Keirstyn Moran</span>
<span>Age: 34</span>
<span>Height: 5'4"</span>
<span>Weight: 123lbs</span>
<span>Focus: Endurance</span>
</div>
</div>
<!-- Main Content -->
<div class="px-8 py-6">
<!-- Page Title -->
<div class="text-center mb-8">
<h1 class="text-3xl font-bold text-black mb-2">Training Week</h1>
<p class="text-gray-600 italic">(To be filled out by your trainer)</p>
</div>
<!-- First Training Week Grid -->
<div class="mb-8">
<div class="grid grid-cols-7 gap-2 mb-4">
<!-- Week 1 Headers -->
<div class="bg-cyan-300 p-2 text-center rounded-lg">
<div class="font-bold text-black">Monday</div>
</div>
<div class="bg-cyan-300 p-2 text-center rounded-lg">
<div class="font-bold text-black">Tuesday</div>
</div>
<div class="bg-cyan-300 p-2 text-center rounded-lg">
<div class="font-bold text-black">Wednesday</div>
</div>
<div class="bg-cyan-300 p-2 text-center rounded-lg">
<div class="font-bold text-black">Thursday</div>
</div>
<div class="bg-cyan-300 p-2 text-center rounded-lg">
<div class="font-bold text-black">Friday</div>
</div>
<div class="bg-gray-200 p-2 text-center rounded-lg">
<div class="font-bold text-black">Saturday</div>
</div>
<div class="bg-gray-200 p-2 text-center rounded-lg">
<div class="font-bold text-black">Sunday</div>
</div>
</div>
<!-- Week 1 Content Boxes -->
<div class="grid grid-cols-7 gap-2 mb-8">
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div>
</div>
</div>
<!-- Second Training Week Grid -->
<div class="mb-8">
<div class="grid grid-cols-7 gap-2 mb-4">
<!-- Week 2 Headers -->
<div class="bg-cyan-300 p-2 text-center rounded-lg">
<div class="font-bold text-black">Monday</div>
</div>
<div class="bg-cyan-300 p-2 text-center rounded-lg">
<div class="font-bold text-black">Tuesday</div>
</div>
<div class="bg-cyan-300 p-2 text-center rounded-lg">
<div class="font-bold text-black">Wednesday</div>
</div>
<div class="bg-cyan-300 p-2 text-center rounded-lg">
<div class="font-bold text-black">Thursday</div>
</div>
<div class="bg-cyan-300 p-2 text-center rounded-lg">
<div class="font-bold text-black">Friday</div>
</div>
<div class="bg-gray-200 p-2 text-center rounded-lg">
<div class="font-bold text-black">Saturday</div>
</div>
<div class="bg-gray-200 p-2 text-center rounded-lg">
<div class="font-bold text-black">Sunday</div>
</div>
</div>
<!-- Week 2 Content Boxes -->
<div class="grid grid-cols-7 gap-2 mb-8">
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div>
</div>
</div>
<!-- Training Week Guidelines Section -->
<div class="mb-6">
<h2 class="text-2xl font-bold text-black mb-6 text-center">Training Week Guidelines</h2>
<!-- Guidelines Grid -->
<div class="grid grid-cols-5 gap-4 mb-6">
<!-- Zone 1 -->
<div>
<h3 class="text-lg font-bold text-black mb-3">Zone 1</h3>
<ul class="text-sm text-black space-y-2 list-disc list-inside">
<li>Zone 1 training is low intensity, for active recovery.</li>
<li>It can be done daily or even consecutively, depending on fitness, volume, and health.</li>
</ul>
</div>
<!-- Zone 2 -->
<div>
<h3 class="text-lg font-bold text-black mb-3">Zone 2</h3>
<ul class="text-sm text-black space-y-2 list-disc list-inside">
<li>Zone 2 training can be done on consecutive or daily basis with moderate sessions.</li>
<li>Can be steady state or interval sessions.</li>
</ul>
</div>
<!-- Zone 3 -->
<div>
<h3 class="text-lg font-bold text-black mb-3">Zone 3</h3>
<ul class="text-sm text-black space-y-2 list-disc list-inside">
<li>Zone 3 training can be done 1-5 times per week.</li>
<li>Wait 24 to 48 hours between sessions for adequate recovery.</li>
</ul>
</div>
<!-- Zone 4 -->
<div>
<h3 class="text-lg font-bold text-black mb-3">Zone 4</h3>
<ul class="text-sm text-black space-y-2 list-disc list-inside">
<li>Zone 4 training: 1-4 times per week.</li>
<li>Wait 24 to 48 hours between intense sessions for recovery.</li>
</ul>
</div>
<!-- Zone 5 -->
<div>
<h3 class="text-lg font-bold text-black mb-3">Zone 5</h3>
<ul class="text-sm text-black space-y-2 list-disc list-inside">
<li>Zone 5 training: 1-2 times per week.</li>
<li>Wait 48 hours between sessions for recovery.</li>
<li>Zone 5 increases VO2 max and endurance at VO2 max.</li>
</ul>
</div>
</div>
<!-- Important Note -->
<div class="text-center">
<p class="text-lg font-bold text-black italic">Zone 3, 4, 5 can be combined with Zone 1 or 2 - the higher zone should be done first!</p>
</div>
</div>
</div>
<!-- Footer Section -->
<div class="absolute bottom-0 left-0 right-0 bg-black text-white px-6 py-3">
<div class="flex justify-between items-center text-sm">
<div class="flex space-x-8">
<span>CONTACT: info@sportandhighperformance.com</span>
<span>WEBSITE: www.sportandhighperformance.com</span>
<span>SOCIAL: @sportandhighperformance</span>
</div>
<div class="bg-white text-black font-bold px-3 py-1 text-lg">
13
</div>
</div>
</div>
</div>
+97
View File
@@ -0,0 +1,97 @@
<div class="w-full page bg-white" style="height: 297mm;"></div>
<!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center">
<div class="text-lg font-bold mr-2">ISHP</div>
<div class="w-6 h-4 bg-cyan-400 mr-8"></div>
</div>
<div class="flex space-x-8 text-sm">
<span>Name: Keirstyn Moran</span>
<span>Age: 34</span>
<span>Height: 5'4"</span>
<span>Weight: 123lbs</span>
<span>Focus: Endurance</span>
</div>
</div>
<!-- Main Content -->
<div class="px-8 py-6">
<!-- Page Title -->
<h1 class="text-3xl font-bold text-black mb-8">Next Steps:</h1>
<!-- Calorie Tracking Section -->
<div class="mb-8">
<h2 class="text-xl font-bold text-black mb-4">Calorie Tracking</h2>
<ul class="text-black space-y-2 list-disc list-inside ml-4">
<li>Download and create an account with My Fitness Pal (or preferred nutrition tracker)</li>
<li>Fill out the "My Profile" section with your goals (ie: height, weight, target weight)
<ul class="mt-2 ml-6 space-y-1 list-disc list-inside">
<li>Input your Macros</li>
<li>Click the three dots on the bottom right corner</li>
<li>Click "Goals"</li>
<li>Click "Calorie, Carbs, Protein and Fat Goals" under the Nutrition Goals</li>
<li>Set the Calories, Carbs, Protein, and Fat to the recommended macro outlined above.</li>
</ul>
</li>
<li>Once completed fill out your food intake from each meal on the main page</li>
</ul>
<!-- Recommendation Note -->
<div class="mt-6 text-center">
<p class="text-black italic font-semibold">It's highly recommended to purchase a weight and food scale for more accurate results.</p>
</div>
</div>
<!-- Daily Tasks Section -->
<div class="mb-8">
<h2 class="text-xl font-bold text-black mb-4">Daily Tasks</h2>
<ul class="text-black space-y-2 list-disc list-inside ml-4">
<li>Weigh yourself in the morning, after your first bowel movement, and naked</li>
<li>Log your weight into your my fitness pal app</li>
<li>Track calories in grams - FOLLOW YOUR PERSONAL RECOMMENDATIONS.</li>
<li>Log in a diary:
<ul class="mt-2 ml-6 space-y-1 list-disc list-inside">
<li>Log any additional prescribed recommendation (i.e breath work)</li>
<li>Complete the prescribed training recommendations (i.e Zone 2 Training)</li>
<li>Log additional physical activity (i.e Monday - Strength Training 1 hour)</li>
</ul>
</li>
</ul>
</div>
<!-- Two weeks after Appointment Section -->
<div class="mb-8">
<h2 class="text-xl font-bold text-black mb-4">Two weeks after Appointment</h2>
<ul class="text-black space-y-2 list-disc list-inside ml-4">
<li>Should you find the macronutrient breakdown difficult to follow, reach out to us to discuss a change within your caloric parameters</li>
</ul>
</div>
<!-- Contact Information -->
<div class="mb-12 text-center">
<p class="text-lg font-bold text-black">Should you have any questions or concerns please contact us!</p>
</div>
<!-- Recommended Next Testing Date -->
<div class="mb-8 text-center">
<h2 class="text-2xl font-bold text-black">
<span class="underline">Recommended Next Testing Date:</span>
<span class="ml-2">October 2025</span>
</h2>
</div>
</div>
<!-- Footer Section -->
<div class="absolute bottom-0 left-0 right-0 bg-black text-white px-6 py-3">
<div class="flex justify-between items-center text-sm">
<div class="flex space-x-8">
<span>CONTACT: info@ishplabs.com</span>
<span>WEBSITE: www.ishplabs.com</span>
<span>SOCIAL: @ishplabs</span>
</div>
<div class="bg-white text-black font-bold px-3 py-1 text-lg">
14
</div>
</div>
</div>
</div>
+84
View File
@@ -0,0 +1,84 @@
<div class="w-full page bg-white" style="height: 297mm;"></div>
<!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center">
<div class="text-lg font-bold mr-2">ISHP</div>
<div class="w-6 h-4 bg-cyan-400 mr-8"></div>
</div>
<div class="flex space-x-8 text-sm">
<span>Name: Keirstyn Moran</span>
<span>Age: 34</span>
<span>Height: 5'4"</span>
<span>Weight: 123lbs</span>
<span>Focus: Endurance</span>
</div>
</div>
<!-- Main Content -->
<div class="px-8 py-6">
<!-- Page Title -->
<h1 class="text-3xl font-bold text-black mb-8">Glossary</h1>
<!-- Body Fat Percentage -->
<div class="mb-6">
<h2 class="text-lg font-bold text-black mb-2">Body Fat Percentage:</h2>
<p class="text-sm text-black leading-relaxed">The percentage of your overall body weight that is composed of fat cells. Body fat percentage can be reduced by either losing weight from fat mass, while maintaining lean mass, or maintaining fat mass while increasing lean mass.</p>
</div>
<!-- Metabolic Rate -->
<div class="mb-6">
<h2 class="text-lg font-bold text-black mb-2">Metabolic Rate:</h2>
<p class="text-sm text-black leading-relaxed">Metabolic Rate measures the number of calories your body burns for basic functions and movement, based on factors like weight, age, gender, and height. A higher metabolic rate helps prevent weight gain and supports weight loss by ensuring you burn enough calories. Tracking metabolic rate is key for managing weight and preventing conditions linked to metabolic dysfunction. Positive influences include resistance exercise, proper sleep, and adequate protein, while negative factors include extreme dieting, yo-yo dieting, and excessive cardio. Improving it involves resistance training and optimal nutrition.</p>
</div>
<!-- Fuel Source -->
<div class="mb-6">
<h2 class="text-lg font-bold text-black mb-2">Fuel Source:</h2>
<p class="text-sm text-black leading-relaxed mb-3">Fat-burning efficiency measures your cells' ability to use fat as fuel, reflecting mitochondrial and cellular health. It indicates how well your body balances fat and carbohydrate usage to support energy needs, assessed by analyzing oxygen and carbon dioxide in your breath. High fat-burning efficiency suggests strong metabolic and mitochondrial function, linked to better weight management and longevity.</p>
<p class="text-sm text-black leading-relaxed">To improve fat-burning efficiency, focus on Zone 2 endurance training and potentially intermittent fasting to enhance oxygen absorption and cellular function. Zone 5 interval training will also help improve fat burning mitochondrial density and capillarization. Factors that reduce fat burning ability include diets high in processed foods, alcohol, and large meals before bed. Conditions related to metabolic stress also hinder fat burning abilities.</p>
</div>
<!-- NEAT -->
<div class="mb-6">
<h2 class="text-lg font-bold text-black mb-2">NEAT (Non-Exercise Activity Thermogenesis)</h2>
<p class="text-sm text-black leading-relaxed">refers to the energy expended for all activities that are not deliberate exercise or structured physical activity. This includes daily movements such as walking, fidgeting, standing, cleaning, typing, and even simple tasks like cooking or shopping. NEAT contributes significantly to the total caloric expenditure and plays a key role in maintaining body weight and overall energy balance. It varies widely among individuals, depending on lifestyle, occupation, and habits.</p>
</div>
<!-- Spirometry -->
<div class="mb-6">
<h2 class="text-lg font-bold text-black mb-2">Spirometry:</h2>
<p class="text-sm text-black leading-relaxed mb-3">Spirometry is a diagnostic device used to provide objective measurements of lung volumes and capacities. Lung function is crucial for oxygen delivery during physical activity, and comparing spirometry results to expected values can highlight any potential limitations to performance.</p>
<p class="text-sm text-black leading-relaxed mb-3">"From a Performance standpoint, it is essential in making informed training recommendations related to respiratory health to optimize endurance performance and metabolic health."</p>
<!-- Spirometry Sub-definitions -->
<ul class="text-sm text-black space-y-2 list-disc list-inside ml-4">
<li><strong>FEV1:</strong> Forced Expiratory Volume - the total amount of air expelled in the first second.</li>
<li><strong>FVC:</strong> Forced Vital Capacity - the maximum amount of air exhaled in one breath after a maximum inhalation</li>
<li><strong>FEV1/FVC:</strong> Calculated ratio used in the diagnosis of obstructive & restrictive lung disease.</li>
</ul>
<p class="text-sm text-black leading-relaxed mt-3">By comparing these measurements to expected values based on age, gender, height and ethnicity, healthcare professionals can diagnose a range of lung conditions such as asthma, COPD, restrictive lung diseases, and more.</p>
</div>
<!-- VO2 max -->
<div class="mb-6">
<h2 class="text-lg font-bold text-black mb-2">VO2 max:</h2>
<p class="text-sm text-black leading-relaxed mb-3">VO2 Max, or maximal oxygen consumption serves as a valuable indicator of overall fitness, cardiovascular health, and endurance capacity. VO2 max reflects the efficiency of your heart lung system in pumping oxygen-rich blood to working muscles. A higher VO2 max indicates a stronger cardiovascular system, which is associated with a reduced risk of heart disease and other cardiovascular issues.</p>
<p class="text-sm text-black leading-relaxed">Understanding and training to increase your VO2 max can contribute to enhanced physical performance, longevity and well-being.</p>
</div>
</div>
<!-- Footer Section -->
<div class="absolute bottom-0 left-0 right-0 bg-black text-white px-6 py-3">
<div class="flex justify-between items-center text-sm">
<div class="flex space-x-8">
<span>CONTACT: info@ishplabs.com</span>
<span>WEBSITE: www.ishplabs.com</span>
<span>SOCIAL: @ishplabs</span>
</div>
<div class="bg-white text-black font-bold px-3 py-1 text-lg">
15
</div>
</div>
</div>
</div>
+173
View File
@@ -0,0 +1,173 @@
<body class="bg-white font-sans">
<!-- Header -->
<div class="bg-black text-white p-4 flex items-center justify-between">
<div class="flex items-center space-x-4">
<div class="text-xl font-bold">ISHP</div>
<div class="w-8 h-6 bg-teal-400"></div>
</div>
<div class="text-sm">
<span class="mr-6">Name: Keirstyn Moran</span>
<span class="mr-6">Age: 34</span>
<span class="mr-6">Height: 5'4"</span>
<span class="mr-6">Weight: 123lbs</span>
<span>Focus: Endurance</span>
</div>
</div>
<!-- Main Content -->
<div class="p-8">
<h1 class="text-4xl font-bold mb-8">Glossary</h1>
<div class="space-y-6 text-sm leading-relaxed">
<!-- Peak VT -->
<div>
<p class="font-semibold">Peak VT:</p>
<p class="mb-2">
Peak Volume of air moved throughout the test.
</p>
<p class="mb-2">
Respiratory Capability Limitations that can be found
include:
</p>
<ul class="list-disc ml-6 space-y-1">
<li>
<strong>Endurance:</strong> Normal capacity, but
cannot maintain their VT over time.
</li>
<li>
<strong>Strength/Power:</strong> Normal capacity,
but peak VT is not 75-85% of their FEV1 despite FEV1
being normal
</li>
<li>
<strong
>Coordination (Hyper/Hypo-Ventilation):</strong
>
Normal capacity, but uses low volumes +/- high BFs
at lower intensities. A breathing coordination
limitation can also be identified by the loss of
volume at higher intensities, which are then
recovered upon recovery/stop of activity.
</li>
</ul>
</div>
<!-- VO2 Pulse -->
<div>
<p class="font-semibold">VO2 Pulse:</p>
<p>
VO2 Pulse refers to the relationship between oxygen
consumption (VO2) and heart rate (HR) during exercise.
This measure gives insight into how efficiently the body
is using oxygen in relation to the heart's output. A
higher VO2 Pulse suggests that an individual is able to
deliver oxygen more efficiently to the muscles with each
heartbeat.
</p>
</div>
<!-- VO2 Breath -->
<div>
<p class="font-semibold">VO2 Breath:</p>
<p>
VO2 Breath refers to the amount of oxygen consumed per
breath during exercise, which indicates how effectively
the body delivers oxygen to the bloodstream through the
lungs with each breath. A more efficient VO2 Breath
means the body requires less effort to obtain the same
amount of oxygen, indicating better respiratory
efficiency and oxygen utilization.
</p>
</div>
<!-- Carb & Fat Crossover -->
<div>
<p class="font-semibold">Carb & Fat Crossover:</p>
<p class="mb-2">
The point during exercise at which the body shifts its
predominant fuel source from fats to carbohydrates. This
transition typically occurs as exercise intensity
increases, and marks the transition from Zone 2 into
Zone 3. As exercise intensity increases, the body starts
to rely more on carbohydrates because they provide
faster energy.
</p>
<p>
Endurance training (e.g., long, steady-state cardio
within Zones 1 & 2) increases the body's ability to burn
fat efficiently at higher intensities, shifting the
crossover point to a faster speed, or higher heart
rate/intensity. Because fat stores are much larger and
can provide a steady stream of energy for prolonged
periods, a higher CHO/FAT crossover can help delay
fatigue, which is especially beneficial in
longer-duration events, where carbohydrate depletion can
lead to a significant drop in performance.
</p>
</div>
<!-- Cardiovascular Recovery -->
<div>
<p class="font-semibold">Cardiovascular Recovery:</p>
<p>
The percentage your heart rate drops within the first
minute of the inactive recovery phase in relation to the
lowest heart rate recorded prior to the start of the
test.
</p>
</div>
<!-- Metabolic (CO2) Recovery -->
<div>
<p class="font-semibold">Metabolic (CO2) Recovery:</p>
<p class="mb-2">
The percentage that your VCO2 levels (amount of CO2 you
are exhaling) drop within the first 1.5 minutes of the
inactive recovery phase in relation to the lowest VCO2
recorded prior to the start of the test.
</p>
<p>
refers to the rate at which the body clears carbon
dioxide (CO2) after exercise, reflecting the efficiency
of the cardiovascular and respiratory systems in
returning CO2 levels to baseline. A faster VCO2 recovery
indicates effective management of metabolic byproducts,
signaling a healthier metabolic system and lower risk of
metabolic disorders.
</p>
</div>
<!-- Breath Frequency Recovery -->
<div>
<p class="font-semibold">Breath Frequency Recovery:</p>
<p>
Refers to the speed at which the body returns to a
normal breathing rate after physical exertion. Faster
breath frequency recovery indicates a well-conditioned
cardiovascular and respiratory system, allowing the body
to efficiently regulate oxygen and CO2 levels. It
supports better endurance, faster recovery between
intervals, and the ability to sustain higher performance
during repeated efforts or prolonged activity.
Additionally, a quick return to baseline signals that
the autonomic nervous system is functioning well,
reducing stress on the body and promoting more efficient
recovery. This also reflects a healthier metabolic
system, better management of metabolic byproducts like
CO2, and a lower risk of chronic conditions.
</p>
</div>
</div>
</div>
<!-- Footer -->
<div
class="bg-black text-white p-4 flex justify-between items-center text-sm mt-8"
>
<div>CONTACT: info@ishplabs.com</div>
<div>WEBSITE: www.ishplabs.com</div>
<div>SOCIAL: @ishplabs</div>
<div class="bg-white text-black px-3 py-1 font-bold">17</div>
</div>
</body>
</html>
+371
View File
@@ -0,0 +1,371 @@
<!DOCTYPE html>
<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="flex items-center space-x-4">
<div class="text-xl font-bold">ISHP</div>
<div class="w-8 h-6 bg-teal-400"></div>
</div>
<div class="text-sm">
<span class="mr-6">Name: Keirstyn Moran</span>
<span class="mr-6">Age: 34</span>
<span class="mr-6">Height: 5'4"</span>
<span class="mr-6">Weight: 123lbs</span>
<span>Focus: Endurance</span>
</div>
</div>
<!-- Main Content -->
<div class="p-8">
<h1 class="text-4xl font-bold mb-8">Glossary</h1>
<!-- Local Muscle Activity/SMO2 Definition -->
<div class="mb-12 text-sm leading-relaxed">
<p class="font-semibold mb-2">Local Muscle Activity/SMO2:</p>
<p>
SmO2 testing is a valuable tool for understanding how
muscles respond to various physiological stressors and how
to fine-tune training, nutrition and hydration accordingly.
Monitoring changes in tissue oxygen saturation and
utilization helps identify an individual's optimal intensity
to work at, as well as how well they recover between bouts
of intensity. This can help optimize training to improve
performance, prevent overtraining, and tailor strategies for
better results.
</p>
<p>
During competitions, athletes can also use SmO2 data to pace
themselves effectively. Adjusting intensity based on muscle
oxygenation can help prevent premature fatigue and optimize
race outcomes
</p>
</div>
<!-- Body Fat Percent Master Chart -->
<div class="mb-8">
<h2 class="text-2xl font-bold mb-6 text-center">
Body Fat Percent Master Chart
</h2>
<!-- Male Chart -->
<div class="mb-8">
<div class="flex items-center mb-4">
<div class="w-20 text-right mr-4 font-medium">
Age (M)
</div>
<div class="flex-1 grid grid-cols-11 gap-0 h-20">
<!-- Age 20-39 row -->
<div
class="bg-red-300 border border-gray-300 flex items-center justify-center text-xs font-medium"
>
20-39
</div>
<div
class="bg-yellow-300 border border-gray-300"
></div>
<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
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
</div>
</div>
<div class="flex items-center mb-4">
<div class="w-20 text-right mr-4 font-medium"></div>
<div class="flex-1 grid grid-cols-11 gap-0 h-20">
<!-- Age 40-59 row -->
<div
class="bg-yellow-300 border border-gray-300 flex items-center justify-center text-xs font-medium"
>
40-59
</div>
<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-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 class="flex items-center mb-4">
<div class="w-20 text-right mr-4 font-medium"></div>
<div class="flex-1 grid grid-cols-11 gap-0 h-20">
<!-- Age 60-79 row -->
<div
class="bg-yellow-300 border border-gray-300 flex items-center justify-center text-xs font-medium"
>
60-79
</div>
<div
class="bg-green-300 border border-gray-300"
></div>
<div
class="bg-green-400 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
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-400 border border-gray-300"
></div>
</div>
</div>
<!-- Percentage labels for male chart -->
<div class="flex items-center">
<div class="w-20 mr-4"></div>
<div
class="flex-1 grid grid-cols-11 gap-0 text-xs text-center font-medium"
>
<div>0%</div>
<div>5%</div>
<div>10%</div>
<div>15%</div>
<div>20%</div>
<div>25%</div>
<div>30%</div>
<div>35%</div>
<div>40%</div>
<div>45%</div>
<div>50%</div>
</div>
</div>
</div>
<!-- Female Chart -->
<div class="mb-8">
<div class="flex items-center mb-4">
<div class="w-20 text-right mr-4 font-medium">
Age (F)
</div>
<div class="flex-1 grid grid-cols-11 gap-0 h-20">
<!-- Age 20-39 row -->
<div
class="bg-red-300 border border-gray-300 flex items-center justify-center text-xs font-medium"
>
20-39
</div>
<div
class="bg-red-300 border border-gray-300"
></div>
<div
class="bg-red-300 border border-gray-300"
></div>
<div
class="bg-yellow-300 border border-gray-300"
></div>
<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 class="flex items-center mb-4">
<div class="w-20 text-right mr-4 font-medium"></div>
<div class="flex-1 grid grid-cols-11 gap-0 h-20">
<!-- Age 40-59 row -->
<div
class="bg-red-400 border border-gray-300 flex items-center justify-center text-xs font-medium"
>
40-59
</div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-300 border border-gray-300"
></div>
<div
class="bg-yellow-300 border border-gray-300"
></div>
<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 class="flex items-center mb-4">
<div class="w-20 text-right mr-4 font-medium"></div>
<div class="flex-1 grid grid-cols-11 gap-0 h-20">
<!-- Age 60-79 row -->
<div
class="bg-red-400 border border-gray-300 flex items-center justify-center text-xs font-medium"
>
60-79
</div>
<div
class="bg-red-400 border border-gray-300"
></div>
<div
class="bg-red-300 border border-gray-300"
></div>
<div
class="bg-yellow-300 border border-gray-300"
></div>
<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>
<!-- Percentage labels for female chart -->
<div class="flex items-center">
<div class="w-20 mr-4"></div>
<div
class="flex-1 grid grid-cols-11 gap-0 text-xs text-center font-medium"
>
<div>0%</div>
<div>5%</div>
<div>10%</div>
<div>15%</div>
<div>20%</div>
<div>25%</div>
<div>30%</div>
<div>35%</div>
<div>40%</div>
<div>45%</div>
<div>50%</div>
</div>
</div>
</div>
</div>
</div>
<!-- Footer -->
<div
class="bg-black text-white p-4 flex justify-between items-center text-sm"
>
<div>CONTACT: info@ishplabs.com</div>
<div>WEBSITE: www.ishplabs.com</div>
<div>SOCIAL: @ishplabs</div>
<div class="bg-white text-black px-3 py-1 font-bold">18</div>
</div>
</body>
</html>
+850
View File
@@ -0,0 +1,850 @@
<!DOCTYPE html>
<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 -->
<div
class="bg-black text-white p-4 flex items-center justify-between"
>
<div class="flex items-center space-x-4">
<div class="text-xl font-bold">ISHP</div>
<div class="w-8 h-6 bg-teal-400"></div>
</div>
<div class="text-sm">
<span class="mr-6">Name: Keirstyn Moran</span>
<span class="mr-6">Age: 34</span>
<span class="mr-6">Height: 5'4"</span>
<span class="mr-6">Weight: 123lbs</span>
<span>Focus: Endurance</span>
</div>
</div>
<!-- Main Content -->
<div class="p-8">
<h1 class="text-4xl font-bold mb-8">Glossary</h1>
<!-- Resting Heart Rate Section -->
<div class="mb-12">
<h2 class="text-2xl font-bold mb-6 text-center">
Resting Heart Rate
</h2>
<!-- Male Table -->
<div class="mb-8">
<table
class="w-full border-collapse border border-gray-300 text-sm"
>
<thead>
<tr class="bg-cyan-200">
<th
class="border border-gray-300 p-2 font-bold"
>
Age (M)
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Poor
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Below Average
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Average
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Above Average
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Good
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Excellent
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Athlete
</th>
</tr>
</thead>
<tbody>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
18-25
</td>
<td class="border border-gray-300 p-2">
85bpm +
</td>
<td class="border border-gray-300 p-2">
76-84bpm
</td>
<td class="border border-gray-300 p-2">
74-78bpm
</td>
<td class="border border-gray-300 p-2">
70-73bpm
</td>
<td class="border border-gray-300 p-2">
66-69bpm
</td>
<td class="border border-gray-300 p-2">
61-65bpm
</td>
<td class="border border-gray-300 p-2">
60-60bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
26-35
</td>
<td class="border border-gray-300 p-2">
83bpm +
</td>
<td class="border border-gray-300 p-2">
77-82bpm
</td>
<td class="border border-gray-300 p-2">
73-76bpm
</td>
<td class="border border-gray-300 p-2">
69-72bpm
</td>
<td class="border border-gray-300 p-2">
65-68bpm
</td>
<td class="border border-gray-300 p-2">
60-64bpm
</td>
<td class="border border-gray-300 p-2">
55-59bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
36-45
</td>
<td class="border border-gray-300 p-2">
85bpm +
</td>
<td class="border border-gray-300 p-2">
79-84bpm
</td>
<td class="border border-gray-300 p-2">
74-78bpm
</td>
<td class="border border-gray-300 p-2">
70-73bpm
</td>
<td class="border border-gray-300 p-2">
65-69bpm
</td>
<td class="border border-gray-300 p-2">
60-64bpm
</td>
<td class="border border-gray-300 p-2">
55-59bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
46-55
</td>
<td class="border border-gray-300 p-2">
84bpm +
</td>
<td class="border border-gray-300 p-2">
76-83bpm
</td>
<td class="border border-gray-300 p-2">
73-77bpm
</td>
<td class="border border-gray-300 p-2">
70-72bpm
</td>
<td class="border border-gray-300 p-2">
66-69bpm
</td>
<td class="border border-gray-300 p-2">
61-65bpm
</td>
<td class="border border-gray-300 p-2">
56-60bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
56-65
</td>
<td class="border border-gray-300 p-2">
85bpm +
</td>
<td class="border border-gray-300 p-2">
78-84bpm
</td>
<td class="border border-gray-300 p-2">
74-77bpm
</td>
<td class="border border-gray-300 p-2">
70-73bpm
</td>
<td class="border border-gray-300 p-2">
65-69bpm
</td>
<td class="border border-gray-300 p-2">
60-64bpm
</td>
<td class="border border-gray-300 p-2">
50-59bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
65+
</td>
<td class="border border-gray-300 p-2">
84bpm +
</td>
<td class="border border-gray-300 p-2">
77-83bpm
</td>
<td class="border border-gray-300 p-2">
73-76bpm
</td>
<td class="border border-gray-300 p-2">
70-73bpm
</td>
<td class="border border-gray-300 p-2">
65-69bpm
</td>
<td class="border border-gray-300 p-2">
60-64bpm
</td>
<td class="border border-gray-300 p-2">
55-59bpm
</td>
</tr>
</tbody>
</table>
</div>
<!-- Female Table -->
<div class="mb-8">
<table
class="w-full border-collapse border border-gray-300 text-sm"
>
<thead>
<tr class="bg-cyan-200">
<th
class="border border-gray-300 p-2 font-bold"
>
Age (F)
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Poor
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Below Average
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Average
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Above Average
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Good
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Excellent
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Athlete
</th>
</tr>
</thead>
<tbody>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
18-25
</td>
<td class="border border-gray-300 p-2">
81bpm +
</td>
<td class="border border-gray-300 p-2">
74-81bpm
</td>
<td class="border border-gray-300 p-2">
73-78bpm
</td>
<td class="border border-gray-300 p-2">
66-69bpm
</td>
<td class="border border-gray-300 p-2">
62-65bpm
</td>
<td class="border border-gray-300 p-2">
56-61bpm
</td>
<td class="border border-gray-300 p-2">
50-55bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
26-35
</td>
<td class="border border-gray-300 p-2">
82bpm +
</td>
<td class="border border-gray-300 p-2">
75-81bpm
</td>
<td class="border border-gray-300 p-2">
71-74bpm
</td>
<td class="border border-gray-300 p-2">
66-70bpm
</td>
<td class="border border-gray-300 p-2">
62-65bpm
</td>
<td class="border border-gray-300 p-2">
55-61bpm
</td>
<td class="border border-gray-300 p-2">
54-54bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
36-45
</td>
<td class="border border-gray-300 p-2">
83bpm +
</td>
<td class="border border-gray-300 p-2">
76-82bpm
</td>
<td class="border border-gray-300 p-2">
71-75bpm
</td>
<td class="border border-gray-300 p-2">
67-70bpm
</td>
<td class="border border-gray-300 p-2">
63-66bpm
</td>
<td class="border border-gray-300 p-2">
57-62bpm
</td>
<td class="border border-gray-300 p-2">
47-56bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
46-55
</td>
<td class="border border-gray-300 p-2">
84bpm +
</td>
<td class="border border-gray-300 p-2">
77-83bpm
</td>
<td class="border border-gray-300 p-2">
72-76bpm
</td>
<td class="border border-gray-300 p-2">
68-71bpm
</td>
<td class="border border-gray-300 p-2">
64-67bpm
</td>
<td class="border border-gray-300 p-2">
58-63bpm
</td>
<td class="border border-gray-300 p-2">
49-57bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
56-65
</td>
<td class="border border-gray-300 p-2">
82bpm +
</td>
<td class="border border-gray-300 p-2">
76-81bpm
</td>
<td class="border border-gray-300 p-2">
72-75bpm
</td>
<td class="border border-gray-300 p-2">
68-71bpm
</td>
<td class="border border-gray-300 p-2">
62-67bpm
</td>
<td class="border border-gray-300 p-2">
57-61bpm
</td>
<td class="border border-gray-300 p-2">
51-56bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
65+
</td>
<td class="border border-gray-300 p-2">
80bpm +
</td>
<td class="border border-gray-300 p-2">
74-79bpm
</td>
<td class="border border-gray-300 p-2">
70-73bpm
</td>
<td class="border border-gray-300 p-2">
66-69bpm
</td>
<td class="border border-gray-300 p-2">
62-65bpm
</td>
<td class="border border-gray-300 p-2">
56-61bpm
</td>
<td class="border border-gray-300 p-2">
52-55bpm
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- VO2 Master Chart Section -->
<div class="mb-8">
<h2 class="text-2xl font-bold mb-6 text-center">
VO2 Master Chart
</h2>
<!-- Male VO2 Table -->
<div class="mb-8">
<table
class="w-full border-collapse border border-gray-300 text-sm"
>
<thead>
<tr class="bg-cyan-200">
<th
class="border border-gray-300 p-2 font-bold"
>
Age (M)
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Very Poor
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Poor
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Fair
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Good
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Excellent
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Superior
</th>
</tr>
</thead>
<tbody>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
20-29
</td>
<td class="border border-gray-300 p-2">
29.0-38.1
</td>
<td class="border border-gray-300 p-2">
38.1-44.9
</td>
<td class="border border-gray-300 p-2">
44.9-50.2
</td>
<td class="border border-gray-300 p-2">
50.2-61.8
</td>
<td class="border border-gray-300 p-2">
57.1-66.3
</td>
<td class="border border-gray-300 p-2">
66.3+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
30-39
</td>
<td class="border border-gray-300 p-2">
27.2-34.1
</td>
<td class="border border-gray-300 p-2">
34.1-39.6
</td>
<td class="border border-gray-300 p-2">
39.6-45.2
</td>
<td class="border border-gray-300 p-2">
45.2-51.6
</td>
<td class="border border-gray-300 p-2">
51.6-59.8
</td>
<td class="border border-gray-300 p-2">
59.8+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
40-49
</td>
<td class="border border-gray-300 p-2">
24.2-30.5
</td>
<td class="border border-gray-300 p-2">
30.5-35.7
</td>
<td class="border border-gray-300 p-2">
35.7-40.3
</td>
<td class="border border-gray-300 p-2">
40.3-46.7
</td>
<td class="border border-gray-300 p-2">
46.7-55.6
</td>
<td class="border border-gray-300 p-2">
55.6+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
50-59
</td>
<td class="border border-gray-300 p-2">
20.9-26.1
</td>
<td class="border border-gray-300 p-2">
26.1-30.7
</td>
<td class="border border-gray-300 p-2">
30.7-35.1
</td>
<td class="border border-gray-300 p-2">
35.1-41.2
</td>
<td class="border border-gray-300 p-2">
41.2-50.7
</td>
<td class="border border-gray-300 p-2">
50.7+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
60-69
</td>
<td class="border border-gray-300 p-2">
17.4-22.4
</td>
<td class="border border-gray-300 p-2">
22.4-26.6
</td>
<td class="border border-gray-300 p-2">
26.6-30.5
</td>
<td class="border border-gray-300 p-2">
30.5-36.1
</td>
<td class="border border-gray-300 p-2">
36.1-43.0
</td>
<td class="border border-gray-300 p-2">
43.0+
</td>
</tr>
</tbody>
</table>
</div>
<!-- Female VO2 Table -->
<div class="mb-8">
<table
class="w-full border-collapse border border-gray-300 text-sm"
>
<thead>
<tr class="bg-cyan-200">
<th
class="border border-gray-300 p-2 font-bold"
>
Age (F)
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Very Poor
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Poor
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Fair
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Good
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Excellent
</th>
<th
class="border border-gray-300 p-2 font-bold"
>
Superior
</th>
</tr>
</thead>
<tbody>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
20-29
</td>
<td class="border border-gray-300 p-2">
21.7-28.6
</td>
<td class="border border-gray-300 p-2">
28.6-34.6
</td>
<td class="border border-gray-300 p-2">
34.6-40.6
</td>
<td class="border border-gray-300 p-2">
40.6-46.5
</td>
<td class="border border-gray-300 p-2">
46.5-56.0
</td>
<td class="border border-gray-300 p-2">
56.0+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
30-39
</td>
<td class="border border-gray-300 p-2">
19.0-24.1
</td>
<td class="border border-gray-300 p-2">
24.1-28.2
</td>
<td class="border border-gray-300 p-2">
28.2-32.2
</td>
<td class="border border-gray-300 p-2">
32.2-35.7
</td>
<td class="border border-gray-300 p-2">
35.7-45.8
</td>
<td class="border border-gray-300 p-2">
45.8+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
40-49
</td>
<td class="border border-gray-300 p-2">
17.0-21.3
</td>
<td class="border border-gray-300 p-2">
21.3-24.9
</td>
<td class="border border-gray-300 p-2">
24.9-28.7
</td>
<td class="border border-gray-300 p-2">
28.7-34.0
</td>
<td class="border border-gray-300 p-2">
34.0-41.7
</td>
<td class="border border-gray-300 p-2">
41.7+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
50-59
</td>
<td class="border border-gray-300 p-2">
16.0-19.1
</td>
<td class="border border-gray-300 p-2">
19.1-24.4
</td>
<td class="border border-gray-300 p-2">
21.8-27.6
</td>
<td class="border border-gray-300 p-2">
25.2-28.6
</td>
<td class="border border-gray-300 p-2">
28.6-35.9
</td>
<td class="border border-gray-300 p-2">
35.9+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-2 font-medium"
>
60-69
</td>
<td class="border border-gray-300 p-2">
13.4-16.5
</td>
<td class="border border-gray-300 p-2">
16.5-18.9
</td>
<td class="border border-gray-300 p-2">
18.9-21.2
</td>
<td class="border border-gray-300 p-2">
21.2-24.6
</td>
<td class="border border-gray-300 p-2">
24.6-29.4
</td>
<td class="border border-gray-300 p-2">
29.4+
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Footer -->
<div
class="bg-black text-white p-4 flex justify-between items-center text-sm"
>
<div>CONTACT: info@ishplabs.com</div>
<div>WEBSITE: www.ishplabs.com</div>
<div>SOCIAL: @ishplabs</div>
<div class="bg-white text-black px-3 py-1 font-bold">19</div>
</div>
</div>
</body>
</html>
+83
View File
@@ -0,0 +1,83 @@
<div class="w-full page bg-white" style="height: 297mm;"></div>
<!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center">
<div class="text-lg font-bold mr-2">ISHP</div>
<div class="w-6 h-4 bg-cyan-400 mr-8"></div>
</div>
<div class="flex space-x-8 text-sm">
<span>Name: {{ patient_name | default('Keirstyn Moran') }}</span>
<span>Age: {{ age | default('34') }}</span>
<span>Height: {{ height | default('5\'4"') }}</span>
<span>Weight: {{ weight | default('123lbs') }}</span>
<span>Focus: {{ focus | default('Endurance') }}</span>
</div>
</div>
<!-- Main Content -->
<div class="px-8 py-6">
<!-- Page Title -->
<h1 class="text-3xl font-bold text-black mb-6">Nutrition Guidelines</h1>
<!-- Section Title -->
<h2 class="text-xl font-bold text-black mb-2">Ultrasound & Body Composition Assessment</h2>
<p class="text-gray-700 text-sm mb-8">Designed to track and optimize exercise and diet. Its proven technology can accurately measure tissue structure and body composition.</p>
<!-- Body Composition Section -->
<div class="mb-8">
<h3 class="text-2xl font-bold text-center text-black mb-6">Body Composition</h3>
<!-- Body Composition Chart -->
<div class="flex justify-center mb-8">
<div class="relative">
<img src="{{ body_composition_chart | default('../graphs/page_1_body_composition.png') }}"
alt="Body Composition Chart"
class="w-80 h-80 object-contain">
<!-- Chart Labels -->
<div class="absolute top-4 left-1/2 transform -translate-x-1/2 text-center">
<div class="text-lg font-semibold text-gray-700">Fat Mass ({{ fat_mass | default('27.6lbs') }})</div>
<div class="text-lg font-semibold text-gray-700">{{ fat_percentage | default('22.4%') }}</div>
</div>
<div class="absolute bottom-4 right-8 text-center">
<div class="text-lg font-semibold text-gray-700">Lean Mass ({{ lean_mass | default('95.4lbs') }})</div>
<div class="text-lg font-semibold text-gray-700">{{ lean_percentage | default('77.6%') }}</div>
</div>
</div>
</div>
<!-- Body Fat Percentage Section -->
<div class="mb-8">
<h4 class="text-xl font-bold text-center text-black mb-4">Body Fat Percent - {{ body_fat_percent | default('22.4%') }}</h4>
<!-- Body Fat Chart -->
<div class="flex justify-center">
<img src="{{ body_fat_chart | default('../graphs/page_1_body_fat.png') }}"
alt="Body Fat Percentage Chart"
class="w-full max-w-2xl h-32 object-contain">
</div>
<!-- Age Range Label -->
<div class="flex justify-start mt-2 ml-8">
<span class="text-sm font-semibold text-gray-700">{{ age_range | default('20-39') }}</span>
<span class="text-sm text-gray-700 ml-1">({{ gender | default('F') }})</span>
</div>
</div>
</div>
</div>
<!-- Footer Section -->
<div class="absolute bottom-0 left-0 right-0 bg-black text-white px-6 py-3">
<div class="flex justify-between items-center text-sm">
<div class="flex space-x-8">
<span>CONTACT: {{ contact_email | default('info@ishplabs.com') }}</span>
<span>WEBSITE: {{ website | default('www.ishplabs.com') }}</span>
<span>SOCIAL: {{ social | default('@ishplabs') }}</span>
</div>
<div class="bg-white text-black font-bold px-3 py-1 text-lg">
{{ page_number | default('4') }}
</div>
</div>
</div>
</div>
+147
View File
@@ -0,0 +1,147 @@
<div class="w-full page bg-white" style="height: 297mm;"></div>
<!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center">
<div class="text-lg font-bold mr-2">ISHP</div>
<div class="w-6 h-4 bg-cyan-400 mr-8"></div>
</div>
<div class="flex space-x-8 text-sm">
<span>Name: {{ patient_name | default('Keirstyn Moran') }}</span>
<span>Age: {{ age | default('34') }}</span>
<span>Height: {{ height | default('5\'4"') }}</span>
<span>Weight: {{ weight | default('123lbs') }}</span>
<span>Focus: {{ focus | default('Endurance') }}</span>
</div>
</div>
<!-- Main Content -->
<div class="px-8 py-6">
<!-- Page Title -->
<h1 class="text-4xl font-bold text-black mb-8">Overview</h1>
<!-- Top Row: Metabolic and Respiratory -->
<div class="grid grid-cols-2 gap-8 mb-8">
<!-- Metabolic Section -->
<div class="border border-gray-300 rounded-lg p-4">
<div class="flex items-center mb-4">
<div class="w-8 h-8 bg-gray-400 rounded-full mr-3"></div>
<h2 class="text-xl font-bold">Metabolic</h2>
</div>
<div class="grid grid-cols-2 gap-2 text-sm">
<!-- Headers -->
<div class="bg-gray-200 p-2 font-semibold border">Resting Metabolic Rate</div>
<div class="bg-gray-200 p-2 font-semibold border">Active Metabolic Rate</div>
<!-- Row 1 -->
<div class="bg-red-200 p-2 border">Fat/Carbohydrate Ratio</div>
<div class="bg-red-200 p-2 border">Metabolic Efficiency Low Intensity</div>
<!-- Row 2 -->
<div class="bg-gray-200 p-2 border">Metabolism</div>
<div class="bg-yellow-200 p-2 border">Metabolic Efficiency High Intensity</div>
<!-- Row 3 -->
<div class="bg-yellow-200 p-2 border">Breathing Frequency</div>
<div class="bg-white p-2 border"></div>
<!-- Row 4 -->
<div class="bg-red-200 p-2 border">Breath Volume</div>
<div class="bg-white p-2 border"></div>
<!-- Row 5 -->
<div class="bg-gray-200 p-2 border">Heart Rate</div>
<div class="bg-white p-2 border"></div>
</div>
</div>
<!-- Respiratory Section -->
<div class="border border-gray-300 rounded-lg p-4">
<div class="flex items-center mb-4">
<div class="w-8 h-8 bg-gray-400 rounded-full mr-3"></div>
<h2 class="text-xl font-bold">Respiratory</h2>
</div>
<div class="space-y-2 text-sm">
<div class="bg-gray-200 p-2 font-semibold border">Lung Function</div>
<div class="bg-green-200 p-2 border">Lung Capacity</div>
<div class="bg-yellow-200 p-2 border">Lung Capability</div>
<div class="bg-red-200 p-2 border">Breathing Frequency Zones</div>
</div>
</div>
</div>
<!-- Middle Row: Cardiovascular and Strength -->
<div class="grid grid-cols-2 gap-8 mb-8">
<!-- Cardiovascular Section -->
<div class="border border-gray-300 rounded-lg p-4">
<div class="flex items-center mb-4">
<div class="w-8 h-8 bg-gray-400 rounded-full mr-3"></div>
<h2 class="text-xl font-bold">Cardiovascular</h2>
</div>
<div class="space-y-2 text-sm">
<div class="bg-gray-200 p-2 font-semibold border">Active Metabolic Rate</div>
<div class="bg-green-200 p-2 border">Aerobic Health (VO2 Max)</div>
<div class="bg-red-200 p-2 border">Training Zones</div>
<div class="bg-red-200 p-2 border">Metabolic Efficiency (VO2 Pulse)</div>
</div>
</div>
<!-- Strength Section -->
<div class="border border-gray-300 rounded-lg p-4">
<div class="flex items-center mb-4">
<div class="w-8 h-8 bg-gray-400 rounded-full mr-3"></div>
<h2 class="text-xl font-bold">Strength</h2>
</div>
<div class="space-y-2 text-sm">
<div class="bg-gray-200 p-2 font-semibold border">Strength - High Intensity</div>
<div class="bg-green-200 p-2 border">CO2/O2 (RER)</div>
<div class="bg-green-200 p-2 border">Heart Rate</div>
<div class="bg-green-200 p-2 border">Breath Frequency</div>
<div class="bg-yellow-200 p-2 border">Muscle Efficiency</div>
</div>
</div>
</div>
<!-- Bottom Row: Recovery -->
<div class="grid grid-cols-2 gap-8">
<!-- Recovery Section -->
<div class="border border-gray-300 rounded-lg p-4">
<div class="flex items-center mb-4">
<div class="w-8 h-8 bg-gray-400 rounded-full mr-3"></div>
<h2 class="text-xl font-bold">Recovery</h2>
</div>
<div class="space-y-2 text-sm">
<div class="bg-gray-200 p-2 font-semibold border">Active Metabolic Rate</div>
<div class="bg-gray-200 p-2 border flex justify-between items-center">
<span>Heart Rate</span>
<span class="bg-green-400 text-white px-2 py-1 rounded font-bold">44</span>
</div>
<div class="bg-green-200 p-2 border">Metabolic (CO2)</div>
<div class="bg-gray-200 p-2 border">Muscle Oxygen</div>
<div class="bg-red-200 p-2 border">Breath Frequency</div>
</div>
</div>
<!-- Empty space for balance -->
<div></div>
</div>
</div>
<!-- Footer Section -->
<div class="absolute bottom-0 left-0 right-0 bg-black text-white px-6 py-3">
<div class="flex justify-between items-center text-sm">
<div class="flex space-x-8">
<span>CONTACT: {{ contact_email | default('info@ishplabs.com') }}</span>
<span>WEBSITE: {{ website | default('www.ishplabs.com') }}</span>
<span>SOCIAL: {{ social | default('@ishplabs') }}</span>
</div>
<div class="bg-white text-black font-bold px-3 py-1 text-lg">
{{ page_number | default('3') }}
</div>
</div>
</div>
</div>
+175
View File
@@ -0,0 +1,175 @@
<div class="w-full page bg-white" style="height: 297mm;"></div>
<!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center">
<div class="text-lg font-bold mr-2">ISHP</div>
<div class="w-6 h-4 bg-cyan-400 mr-8"></div>
</div>
<div class="flex space-x-8 text-sm">
<span>Name: {{ patient_name | default('Keirstyn Moran') }}</span>
<span>Age: {{ age | default('34') }}</span>
<span>Height: {{ height | default('5\'4"') }}</span>
<span>Weight: {{ weight | default('123lbs') }}</span>
<span>Focus: {{ focus | default('Endurance') }}</span>
</div>
</div>
<!-- Main Content -->
<div class="px-8 py-6">
<!-- Page Title -->
<h1 class="text-3xl font-bold text-black mb-6">Nutrition Guidelines</h1>
<!-- Section Title -->
<h2 class="text-xl font-bold text-black mb-4">Resting Metabolic Rate Assessment</h2>
<p class="text-gray-700 text-sm mb-8">The resting metabolic rate assessment determines the number of calories that you burn at rest, and metabolic health. It is also an indicator of overall health and well-being.</p>
<!-- Slow vs Fast Metabolism Section -->
<div class="mb-12">
<div class="text-center mb-6">
<h3 class="text-2xl font-bold text-black mb-6">Slow vs Fast Metabolism</h3>
<!-- Metabolism Scale -->
<div class="relative mx-auto max-w-2xl">
<!-- Scale background -->
<div class="bg-gray-200 h-12 rounded-lg relative">
<!-- Green indicator at slow position -->
<div class="absolute left-16 top-0 h-12 w-32 bg-green-200 rounded-lg flex items-center justify-center">
<span class="text-black font-bold">{{ resting_calories | default('1386kCals') }}</span>
</div>
<!-- Marker dot -->
<div class="absolute left-20 -top-2 w-4 h-4 bg-black rounded-full"></div>
</div>
<!-- Scale labels -->
<div class="flex justify-between mt-4 text-sm font-semibold">
<span>Very Slow</span>
<span>Slow</span>
<span>Average</span>
<span>Fast</span>
<span>Very Fast</span>
</div>
<!-- Scale dots -->
<div class="flex justify-between mt-2">
<div class="w-2 h-2 bg-black rounded-full"></div>
<div class="w-2 h-2 bg-black rounded-full"></div>
<div class="w-2 h-2 bg-black rounded-full"></div>
<div class="w-2 h-2 bg-black rounded-full"></div>
<div class="w-2 h-2 bg-black rounded-full"></div>
</div>
</div>
</div>
<!-- Fuel Source Section -->
<div class="mb-12">
<h3 class="text-2xl font-bold text-black mb-6 text-center">Fuel Source</h3>
<!-- Fuel Source Bar -->
<div class="relative mx-auto max-w-2xl">
<div class="flex h-16 rounded-lg overflow-hidden">
<!-- Fats section (33%) -->
<div class="bg-yellow-300 flex-none w-1/3 flex items-center justify-center">
<div class="text-center">
<div class="font-bold text-black">Fats</div>
<div class="font-bold text-black">{{ fat_percentage | default('33%') }}</div>
</div>
</div>
<!-- Carbs section (67%) -->
<div class="bg-cyan-300 flex-1 flex items-center justify-center">
<div class="text-center">
<div class="font-bold text-black">Carbs</div>
<div class="font-bold text-black">{{ carb_percentage | default('67%') }}</div>
</div>
</div>
</div>
<!-- Optimal marker -->
<div class="absolute top-0 left-1/2 transform -translate-x-1/2 -translate-y-8">
<div class="text-center">
<div class="text-sm font-semibold">Optimal</div>
<div class="w-0 h-0 border-l-4 border-r-4 border-t-8 border-transparent border-t-black"></div>
</div>
</div>
<!-- Scale numbers -->
<div class="flex justify-between mt-4 text-sm">
<span>0</span>
<span>25</span>
<span>50</span>
<span>75</span>
<span>100</span>
</div>
<!-- Scale dots -->
<div class="flex justify-between mt-2">
<div class="w-2 h-2 bg-black rounded-full"></div>
<div class="w-2 h-2 bg-black rounded-full"></div>
<div class="w-2 h-2 bg-black rounded-full"></div>
<div class="w-2 h-2 bg-black rounded-full"></div>
<div class="w-2 h-2 bg-black rounded-full"></div>
</div>
</div>
</div>
<!-- Caloric Intake Section -->
<div class="mb-12">
<h3 class="text-3xl font-bold text-black mb-8 text-center">Caloric Intake</h3>
<!-- Calculation Formula -->
<div class="flex items-center justify-center space-x-6 text-center">
<!-- Resting Metabolic -->
<div class="bg-gray-200 p-4 rounded-lg">
<div class="text-2xl font-bold text-black">{{ resting_calories | default('1386kCals') }}</div>
<div class="text-sm text-gray-600 mt-2">
<div>Resting</div>
<div>Metabolic</div>
</div>
</div>
<!-- Plus sign -->
<div class="text-4xl font-bold text-black">+</div>
<!-- NEAT -->
<div class="bg-gray-200 p-4 rounded-lg">
<div class="text-2xl font-bold text-black">{{ neat_calories | default('762kCals') }}</div>
<div class="text-sm text-gray-600 mt-2">NEAT</div>
</div>
<!-- Minus sign -->
<div class="text-4xl font-bold text-black">-</div>
<!-- Weight Loss -->
<div class="bg-gray-200 p-4 rounded-lg">
<div class="text-2xl font-bold text-black">{{ weight_loss_calories | default('423kCals') }}</div>
<div class="text-sm text-gray-600 mt-2">
<div>to lose {{ weight_loss_rate | default('1.1lbs') }}</div>
<div>per week</div>
</div>
</div>
<!-- Equals sign -->
<div class="text-4xl font-bold text-black">=</div>
<!-- Total -->
<div class="bg-gray-200 p-4 rounded-lg">
<div class="text-2xl font-bold text-black">{{ total_calories | default('~1725kCals') }}</div>
</div>
</div>
</div>
</div>
</div>
<!-- Footer Section -->
<div class="absolute bottom-0 left-0 right-0 bg-black text-white px-6 py-3">
<div class="flex justify-between items-center text-sm">
<div class="flex space-x-8">
<span>CONTACT: {{ contact_email | default('info@ishplabs.com') }}</span>
<span>WEBSITE: {{ website | default('www.ishplabs.com') }}</span>
<span>SOCIAL: {{ social | default('@ishplabs') }}</span>
</div>
<div class="bg-white text-black font-bold px-3 py-1 text-lg">
{{ page_number | default('5') }}
</div>
</div>
</div>
</div>
+246
View File
@@ -0,0 +1,246 @@
<div class="w-full page bg-white" style="height: 297mm;"></div>
<!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center">
<div class="text-lg font-bold mr-2">ISHP</div>
<div class="w-6 h-4 bg-cyan-400 mr-8"></div>
</div>
<div class="flex space-x-8 text-sm">
<span>Name: {{ patient_name | default('Keirstyn Moran') }}</span>
<span>Age: {{ age | default('34') }}</span>
<span>Height: {{ height | default('5\'4"') }}</span>
<span>Weight: {{ weight | default('123lbs') }}</span>
<span>Focus: {{ focus | default('Endurance') }}</span>
</div>
</div>
<!-- Main Content -->
<div class="px-8 py-6">
<!-- Page Title -->
<h1 class="text-3xl font-bold text-black mb-8 text-center">Weekly Meal Plan Breakdown</h1>
<!-- Caloric Deficit Example Section -->
<div class="mb-12">
<h2 class="text-2xl font-bold text-black mb-6 text-center">Caloric Deficit Example</h2>
<!-- Weekly Grid -->
<div class="grid grid-cols-7 gap-2 mb-8">
<!-- Monday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-2">Monday</div>
<div class="text-lg font-bold text-black mb-2">{{ deficit_calories | default('1725KCals') }}</div>
<div class="text-xs text-black space-y-1">
<div>{{ deficit_protein | default('120g Protein') }}</div>
<div>{{ deficit_carbs | default('155g Carbs') }}</div>
<div>{{ deficit_fat | default('69g Fat') }}</div>
<div>{{ deficit_fiber | default('25g Fibre') }}</div>
</div>
</div>
<!-- Tuesday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-2">Tuesday</div>
<div class="text-lg font-bold text-black mb-2">{{ deficit_calories | default('1725KCals') }}</div>
<div class="text-xs text-black space-y-1">
<div>{{ deficit_protein | default('120g Protein') }}</div>
<div class="text-xs text-black">{{ deficit_carbs | default('155g Carbs') }}</div>
<div>{{ deficit_fat | default('69g Fat') }}</div>
<div>{{ deficit_fiber | default('25g Fibre') }}</div>
</div>
</div>
<!-- Wednesday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-2">Wednesday</div>
<div class="text-lg font-bold text-black mb-2">{{ deficit_calories | default('1725KCals') }}</div>
<div class="text-xs text-black space-y-1">
<div>{{ deficit_protein | default('120g Protein') }}</div>
<div>{{ deficit_carbs | default('155g Carbs') }}</div>
<div>{{ deficit_fat | default('69g Fat') }}</div>
<div>{{ deficit_fiber | default('25g Fibre') }}</div>
</div>
</div>
<!-- Thursday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-2">Thursday</div>
<div class="text-lg font-bold text-black mb-2">{{ deficit_calories | default('1725KCals') }}</div>
<div class="text-xs text-black space-y-1">
<div>{{ deficit_protein | default('120g Protein') }}</div>
<div>{{ deficit_carbs | default('155g Carbs') }}</div>
<div>{{ deficit_fat | default('69g Fat') }}</div>
<div>{{ deficit_fiber | default('25g Fibre') }}</div>
</div>
</div>
<!-- Friday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-2">Friday</div>
<div class="text-lg font-bold text-black mb-2">{{ deficit_calories | default('1725KCals') }}</div>
<div class="text-xs text-black space-y-1">
<div>{{ deficit_protein | default('120g Protein') }}</div>
<div>{{ deficit_carbs | default('155g Carbs') }}</div>
<div>{{ deficit_fat | default('69g Fat') }}</div>
<div>{{ deficit_fiber | default('25g Fibre') }}</div>
</div>
</div>
<!-- Saturday -->
<div class="bg-gray-200 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-2">Saturday</div>
<div class="text-lg font-bold text-black mb-2">{{ deficit_calories | default('1725KCals') }}</div>
<div class="text-xs text-black space-y-1">
<div>{{ deficit_protein | default('120g Protein') }}</div>
<div>{{ deficit_carbs | default('155g Carbs') }}</div>
<div>{{ deficit_fat | default('69g Fat') }}</div>
<div>{{ deficit_fiber | default('25g Fibre') }}</div>
</div>
</div>
<!-- Sunday -->
<div class="bg-gray-200 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-2">Sunday</div>
<div class="text-lg font-bold text-black mb-2">{{ deficit_calories | default('1725KCals') }}</div>
<div class="text-xs text-black space-y-1">
<div>{{ deficit_protein | default('120g Protein') }}</div>
<div>{{ deficit_carbs | default('155g Carbs') }}</div>
<div>{{ deficit_fat | default('69g Fat') }}</div>
<div>{{ deficit_fiber | default('25g Fibre') }}</div>
</div>
</div>
</div>
</div>
<!-- Caloric Deficit with Maintenance/Refeed Example Section -->
<div class="mb-12">
<h2 class="text-2xl font-bold text-black mb-6 text-center">Caloric Deficit with Maintenance/Refeed Example</h2>
<!-- Weekly Grid -->
<div class="grid grid-cols-7 gap-2 mb-8">
<!-- Monday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-2">Monday</div>
<div class="text-lg font-bold text-black mb-2">{{ refeed_weekday_calories | default('1615KCals') }}</div>
<div class="text-xs text-black space-y-1">
<div>{{ refeed_weekday_protein | default('120g Protein') }}</div>
<div>{{ refeed_weekday_carbs | default('142g Carbs') }}</div>
<div>{{ refeed_weekday_fat | default('63g Fat') }}</div>
<div>{{ refeed_weekday_fiber | default('24g Fibre') }}</div>
</div>
</div>
<!-- Tuesday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-2">Tuesday</div>
<div class="text-lg font-bold text-black mb-2">{{ refeed_weekday_calories | default('1615KCals') }}</div>
<div class="text-xs text-black space-y-1">
<div>{{ refeed_weekday_protein | default('120g Protein') }}</div>
<div>{{ refeed_weekday_carbs | default('142g Carbs') }}</div>
<div>{{ refeed_weekday_fat | default('63g Fat') }}</div>
<div>{{ refeed_weekday_fiber | default('24g Fibre') }}</div>
</div>
</div>
<!-- Wednesday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-2">Wednesday</div>
<div class="text-lg font-bold text-black mb-2">{{ refeed_weekday_calories | default('1615KCals') }}</div>
<div class="text-xs text-black space-y-1">
<div>{{ refeed_weekday_protein | default('120g Protein') }}</div>
<div>{{ refeed_weekday_carbs | default('142g Carbs') }}</div>
<div>{{ refeed_weekday_fat | default('63g Fat') }}</div>
<div>{{ refeed_weekday_fiber | default('24g Fibre') }}</div>
</div>
</div>
<!-- Thursday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-2">Thursday</div>
<div class="text-lg font-bold text-black mb-2">{{ refeed_weekday_calories | default('1615KCals') }}</div>
<div class="text-xs text-black space-y-1">
<div>{{ refeed_weekday_protein | default('120g Protein') }}</div>
<div>{{ refeed_weekday_carbs | default('142g Carbs') }}</div>
<div>{{ refeed_weekday_fat | default('63g Fat') }}</div>
<div>{{ refeed_weekday_fiber | default('24g Fibre') }}</div>
</div>
</div>
<!-- Friday -->
<div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-2">Friday</div>
<div class="text-lg font-bold text-black mb-2">{{ refeed_weekday_calories | default('1615KCals') }}</div>
<div class="text-xs text-black space-y-1">
<div>{{ refeed_weekday_protein | default('120g Protein') }}</div>
<div>{{ refeed_weekday_carbs | default('142g Carbs') }}</div>
<div>{{ refeed_weekday_fat | default('63g Fat') }}</div>
<div>{{ refeed_weekday_fiber | default('24g Fibre') }}</div>
</div>
</div>
<!-- Saturday -->
<div class="bg-gray-200 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-2">Saturday</div>
<div class="text-lg font-bold text-black mb-2">{{ refeed_weekend_calories | default('2000KCals') }}</div>
<div class="text-xs text-black space-y-1">
<div>{{ refeed_weekend_protein | default('120g Protein') }}</div>
<div>{{ refeed_weekend_carbs | default('190g Carbs') }}</div>
<div>{{ refeed_weekend_fat | default('84g Fat') }}</div>
<div>{{ refeed_weekend_fiber | default('30g Fibre') }}</div>
</div>
</div>
<!-- Sunday -->
<div class="bg-gray-200 p-3 text-center rounded-lg">
<div class="font-bold text-black mb-2">Sunday</div>
<div class="text-lg font-bold text-black mb-2">{{ refeed_weekend_calories | default('2000KCals') }}</div>
<div class="text-xs text-black space-y-1">
<div>{{ refeed_weekend_protein | default('120g Protein') }}</div>
<div>{{ refeed_weekend_carbs | default('190g Carbs') }}</div>
<div>{{ refeed_weekend_fat | default('84g Fat') }}</div>
<div>{{ refeed_weekend_fiber | default('30g Fibre') }}</div>
</div>
</div>
</div>
</div>
<!-- Macronutrients Recommendations Section -->
<div class="mb-8">
<h2 class="text-2xl font-bold text-black mb-8 text-center">Macronutrients Recommendations</h2>
<!-- Macronutrient Boxes -->
<div class="flex justify-center space-x-12">
<!-- Protein -->
<div class="bg-gray-200 p-6 rounded-lg text-center">
<div class="text-3xl font-bold text-black mb-2">{{ protein_percentage | default('28%') }}</div>
<div class="text-lg font-semibold text-black">Protein</div>
</div>
<!-- Carbs -->
<div class="bg-gray-200 p-6 rounded-lg text-center">
<div class="text-3xl font-bold text-black mb-2">{{ carbs_percentage | default('36%') }}</div>
<div class="text-lg font-semibold text-black">Carbs</div>
</div>
<!-- Fats -->
<div class="bg-gray-200 p-6 rounded-lg text-center">
<div class="text-3xl font-bold text-black mb-2">{{ fats_percentage | default('36%') }}</div>
<div class="text-lg font-semibold text-black">Fats</div>
</div>
</div>
</div>
</div>
<!-- Footer Section -->
<div class="absolute bottom-0 left-0 right-0 bg-black text-white px-6 py-3">
<div class="flex justify-between items-center text-sm">
<div class="flex space-x-8">
<span>CONTACT: {{ contact_email | default('info@ishplabs.com') }}</span>
<span>WEBSITE: {{ website | default('www.ishplabs.com') }}</span>
<span>SOCIAL: {{ social | default('@ishplabs') }}</span>
</div>
<div class="bg-white text-black font-bold px-3 py-1 text-lg">
{{ page_number | default('6') }}
</div>
</div>
</div>
</div>
+180
View File
@@ -0,0 +1,180 @@
<div class="w-full page bg-white" style="height: 297mm;"></div>
<!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center">
<div class="text-lg font-bold mr-2">ISHP</div>
<div class="w-6 h-4 bg-cyan-400 mr-8"></div>
</div>
<div class="flex space-x-8 text-sm">
<span>Name: {{ patient_name | default('Keirstyn Moran') }}</span>
<span>Age: {{ age | default('34') }}</span>
<span>Height: {{ height | default('5\'4"') }}</span>
<span>Weight: {{ weight | default('123lbs') }}</span>
<span>Focus: {{ focus | default('Endurance') }}</span>
</div>
</div>
<!-- Main Content -->
<div class="px-8 py-6">
<!-- Page Title -->
<h1 class="text-3xl font-bold text-black mb-6">Lung Analysis</h1>
<!-- Spirometry Assessment Section -->
<h2 class="text-xl font-bold text-black mb-4">Spirometry Assessment</h2>
<p class="text-gray-700 text-sm mb-8">Spirometry is a diagnostic device that assesses how well a person breathes and how their lungs are functioning. Lung function is crucial for oxygen delivery during physical activity. Comparing results to expected/normal values can highlight potential limitations that would require additional lung training to improve overall physical activity.</p>
<!-- Spirometry Charts Section -->
<div class="mb-8 space-y-6">
<!-- Lung Volume Chart -->
<div class="flex items-center">
<div class="w-32 text-right pr-4">
<div class="font-bold text-black">Lung Volume</div>
<div class="text-xs text-gray-600">LLN</div>
</div>
<div class="flex-1 relative">
<!-- Color-coded bar -->
<div class="flex h-8 rounded">
<div class="bg-red-300 flex-1"></div>
<div class="bg-orange-300 flex-1"></div>
<div class="bg-yellow-300 flex-1"></div>
<div class="bg-green-300 flex-1"></div>
<div class="bg-green-400 flex-1"></div>
</div>
<!-- Predicted marker -->
<div class="absolute top-0 left-3/4 transform -translate-x-1/2">
<div class="text-xs font-semibold mb-1">Predicted</div>
<div class="w-0 h-0 border-l-2 border-r-2 border-t-4 border-transparent border-t-black"></div>
</div>
<!-- Scale -->
<div class="flex justify-between text-xs mt-2">
<span>-5</span>
<span>-4</span>
<span>-3</span>
<span>-2</span>
<span>-1</span>
<span>0</span>
<span>1</span>
<span>2</span>
<span>3</span>
</div>
</div>
<div class="w-32 pl-4">
<div class="font-bold text-black">FVC</div>
<div class="text-sm text-black">{{ fvc_value | default('4.24L → 112.0%') }}</div>
<div class="text-xs text-gray-600">of predicted</div>
</div>
</div>
<!-- Lung Power Chart -->
<div class="flex items-center">
<div class="w-32 text-right pr-4">
<div class="font-bold text-black">Lung Power</div>
</div>
<div class="flex-1 relative">
<!-- Color-coded bar -->
<div class="flex h-8 rounded">
<div class="bg-red-300 flex-1"></div>
<div class="bg-orange-300 flex-1"></div>
<div class="bg-yellow-300 flex-1"></div>
<div class="bg-green-300 flex-1"></div>
<div class="bg-green-400 flex-1"></div>
</div>
<!-- Marker at position -->
<div class="absolute top-0 left-2/3 transform -translate-x-1/2">
<div class="w-0 h-0 border-l-2 border-r-2 border-t-4 border-transparent border-t-black"></div>
</div>
<!-- Scale -->
<div class="flex justify-between text-xs mt-2">
<span>-5</span>
<span>-4</span>
<span>-3</span>
<span>-2</span>
<span>-1</span>
<span>0</span>
<span>1</span>
<span>2</span>
<span>3</span>
</div>
</div>
<div class="w-32 pl-4">
<div class="font-bold text-black">FEV1</div>
<div class="text-sm text-black">{{ fev1_value | default('3.26L → 103.3%') }}</div>
<div class="text-xs text-gray-600">of predicted</div>
</div>
</div>
<!-- Power/Volume Chart -->
<div class="flex items-center">
<div class="w-32 text-right pr-4">
<div class="font-bold text-black">Power/Volume</div>
</div>
<div class="flex-1 relative">
<!-- Color-coded bar -->
<div class="flex h-8 rounded">
<div class="bg-red-300 flex-1"></div>
<div class="bg-orange-300 flex-1"></div>
<div class="bg-yellow-300 flex-1"></div>
<div class="bg-green-300 flex-1"></div>
<div class="bg-green-400 flex-1"></div>
</div>
<!-- Scale -->
<div class="flex justify-between text-xs mt-2">
<span>-5</span>
<span>-4</span>
<span>-3</span>
<span>-2</span>
<span>-1</span>
<span>0</span>
<span>1</span>
<span>2</span>
<span>3</span>
</div>
</div>
<div class="w-32 pl-4">
<div class="font-bold text-black">FEV1/FVC</div>
<div class="text-sm text-black">{{ fev1_fvc_ratio | default('76.89% → 91.8%') }}</div>
<div class="text-xs text-gray-600">of predicted</div>
</div>
</div>
</div>
<!-- Indications Section -->
<div class="bg-gray-200 p-4 rounded-lg mb-8 text-center">
<h3 class="text-lg font-bold text-black mb-2">Indications</h3>
<p class="text-black">{{ indication | default('No Respiratory Capacity Limitation') }}</p>
</div>
<!-- Respiratory Section -->
<div class="mb-6">
<h2 class="text-2xl font-bold text-black mb-4 text-center">Respiratory</h2>
<!-- Respiratory Graph -->
<div class="flex justify-center mb-4">
<img src="{{ respiratory_graph | default('../graphs/respiratory_chart.png') }}"
alt="Respiratory Analysis Chart"
class="w-full max-w-4xl h-64 object-contain">
</div>
<!-- Peak VT Information -->
<div class="bg-gray-200 p-4 rounded-lg text-center">
<h4 class="text-lg font-bold text-black mb-2">Peak VT</h4>
<p class="text-black">{{ peak_vt_value | default('2.38L/Breath which occurs at 172bpm (Zone 3)') }}</p>
<p class="text-black font-semibold">{{ peak_vt_percentage | default('73% of FEV1') }}</p>
</div>
</div>
</div>
<!-- Footer Section -->
<div class="absolute bottom-0 left-0 right-0 bg-black text-white px-6 py-3">
<div class="flex justify-between items-center text-sm">
<div class="flex space-x-8">
<span>CONTACT: {{ contact_email | default('info@ishplabs.com') }}</span>
<span>WEBSITE: {{ website | default('www.ishplabs.com') }}</span>
<span>SOCIAL: {{ social | default('@ishplabs') }}</span>
</div>
<div class="bg-white text-black font-bold px-3 py-1 text-lg">
{{ page_number | default('7') }}
</div>
</div>
</div>
</div>
+225
View File
@@ -0,0 +1,225 @@
<div class="w-full page bg-white" style="height: 297mm;"></div>
<!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center">
<div class="text-lg font-bold mr-2">ISHP</div>
<div class="w-6 h-4 bg-cyan-400 mr-8"></div>
</div>
<div class="flex space-x-8 text-sm">
<span>Name: {{ patient_name | default('Keirstyn Moran') }}</span>
<span>Age: {{ age | default('34') }}</span>
<span>Height: {{ height | default('5\'4"') }}</span>
<span>Weight: {{ weight | default('123lbs') }}</span>
<span>Focus: {{ focus | default('Endurance') }}</span>
</div>
</div>
<!-- Main Content -->
<div class="px-8 py-6">
<!-- Page Title -->
<h1 class="text-3xl font-bold text-black mb-6">Cardio Metrics</h1>
<!-- Active Metabolic Rate Assessment Section -->
<h2 class="text-xl font-bold text-black mb-4">Active Metabolic Rate Assessment</h2>
<p class="text-gray-700 text-sm mb-8">The active metabolic rate assessment is a key measure of aerobic fitness. It helps determine your specific heart rate zones and how well your body uses carbohydrates and fats as fuel while you exercise. It is also an indicator of overall health and wellbeing.</p>
<!-- VO2 Max Section -->
<div class="mb-8">
<h3 class="text-xl font-bold text-black mb-4 text-center">VO2 Max - {{ vo2_max_value | default('49.5') }} ({{ vo2_max_percentile | default('100th percentile') }})</h3>
<!-- VO2 Max Table -->
<div class="mb-8">
<table class="w-full border-collapse">
<thead>
<tr>
<th class="bg-cyan-300 border border-gray-400 p-3 text-black font-bold">Age (F)</th>
<th class="bg-cyan-300 border border-gray-400 p-3 text-black font-bold">Very Poor</th>
<th class="bg-cyan-300 border border-gray-400 p-3 text-black font-bold">Poor</th>
<th class="bg-cyan-300 border border-gray-400 p-3 text-black font-bold">Fair</th>
<th class="bg-cyan-300 border border-gray-400 p-3 text-black font-bold">Good</th>
<th class="bg-cyan-300 border border-gray-400 p-3 text-black font-bold">Excellent</th>
<th class="bg-cyan-300 border border-gray-400 p-3 text-black font-bold relative">
Superior
<!-- Arrow indicator -->
<div class="absolute -bottom-4 left-1/2 transform -translate-x-1/2">
<div class="w-0 h-0 border-l-4 border-r-4 border-t-8 border-transparent border-t-black"></div>
</div>
</th>
</tr>
</thead>
<tbody>
<tr>
<td class="bg-cyan-200 border border-gray-400 p-3 text-black font-semibold">{{ age_range | default('30-39') }}</td>
<td class="bg-gray-100 border border-gray-400 p-3 text-black text-center">{{ very_poor_range | default('19.0-24.1') }}</td>
<td class="bg-gray-100 border border-gray-400 p-3 text-black text-center">{{ poor_range | default('24.1-28.2') }}</td>
<td class="bg-gray-100 border border-gray-400 p-3 text-black text-center">{{ fair_range | default('28.2-32.2') }}</td>
<td class="bg-gray-100 border border-gray-400 p-3 text-black text-center">{{ good_range | default('32.2-35.7') }}</td>
<td class="bg-gray-100 border border-gray-400 p-3 text-black text-center">{{ excellent_range | default('35.7-45.8') }}</td>
<td class="bg-gray-100 border border-gray-400 p-3 text-black text-center font-bold">{{ superior_range | default('45.8+') }}</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- Personalized Heart Rate Zones Section -->
<div class="mb-8">
<h3 class="text-xl font-bold text-black mb-6 text-center">Personalized Heart Rate Zones</h3>
<!-- Heart Rate Zones Table -->
<table class="w-full border-collapse text-sm">
<thead>
<tr>
<th class="bg-cyan-300 border border-gray-400 p-2 text-black font-bold">Zone 1</th>
<th class="bg-cyan-300 border border-gray-400 p-2 text-black font-bold">Zone 2</th>
<th class="bg-cyan-300 border border-gray-400 p-2 text-black font-bold">Zone 3</th>
<th class="bg-cyan-300 border border-gray-400 p-2 text-black font-bold">Zone 4</th>
<th class="bg-cyan-300 border border-gray-400 p-2 text-black font-bold">Zone 5</th>
</tr>
</thead>
<tbody>
<!-- Zone Descriptions -->
<tr>
<td class="border border-gray-400 p-3 text-center">
<div class="text-black font-semibold mb-1">Improves health and recovery capacity</div>
</td>
<td class="border border-gray-400 p-3 text-center">
<div class="text-black font-semibold mb-1">Improves endurance and fat burning</div>
</td>
<td class="border border-gray-400 p-3 text-center">
<div class="text-black font-semibold mb-1">Improves Aerobic fitness</div>
</td>
<td class="border border-gray-400 p-3 text-center">
<div class="text-black font-semibold mb-1">Improves maximum performance capacity</div>
</td>
<td class="border border-gray-400 p-3 text-center">
<div class="text-black font-semibold mb-1">Develops maximum performance and speed</div>
</td>
</tr>
<!-- Heart Rate Percentages -->
<tr>
<td class="border border-gray-400 p-2 text-center text-black font-semibold">{{ zone1_percentage | default('55-65% of Max Heart Rate') }}</td>
<td class="border border-gray-400 p-2 text-center text-black font-semibold">{{ zone2_percentage | default('65-75% of Max Heart Rate') }}</td>
<td class="border border-gray-400 p-2 text-center text-black font-semibold">{{ zone3_percentage | default('80-85% of Max Heart Rate') }}</td>
<td class="border border-gray-400 p-2 text-center text-black font-semibold">{{ zone4_percentage | default('85-88% of Max Heart Rate') }}</td>
<td class="border border-gray-400 p-2 text-center text-black font-semibold">{{ zone5_percentage | default('90% of Max Heart Rate') }}</td>
</tr>
<!-- Heart Rate BPM -->
<tr>
<td class="bg-red-200 border border-gray-400 p-2 text-center text-black font-bold">{{ zone1_bpm | default('81-96bpm') }}</td>
<td class="bg-red-200 border border-gray-400 p-2 text-center text-black font-bold">{{ zone2_bpm | default('96-100bpm') }}</td>
<td class="bg-yellow-200 border border-gray-400 p-2 text-center text-black font-bold">{{ zone3_bpm | default('100-178bpm') }}</td>
<td class="bg-green-200 border border-gray-400 p-2 text-center text-black font-bold">{{ zone4_bpm | default('178-188bpm') }}</td>
<td class="bg-green-200 border border-gray-400 p-2 text-center text-black font-bold">{{ zone5_bpm | default('188-198bpm') }}</td>
</tr>
<!-- Speed -->
<tr>
<td class="border border-gray-400 p-2 text-center">
<div class="text-black font-semibold">{{ zone1_speed | default('3.5mph') }}</div>
<div class="text-black text-xs">{{ zone1_incline | default('2% Incline') }}</div>
</td>
<td class="border border-gray-400 p-2 text-center">
<div class="text-black font-semibold">{{ zone2_speed | default('3.5-4.0mph') }}</div>
<div class="text-black text-xs">{{ zone2_incline | default('2% Incline') }}</div>
</td>
<td class="border border-gray-400 p-2 text-center">
<div class="text-black font-semibold">{{ zone3_speed | default('4.0-6.5mph') }}</div>
<div class="text-black text-xs">{{ zone3_incline | default('2% Incline') }}</div>
</td>
<td class="border border-gray-400 p-2 text-center">
<div class="text-black font-semibold">{{ zone4_speed | default('6.5-7.0mph') }}</div>
<div class="text-black text-xs">{{ zone4_incline | default('2% Incline') }}</div>
</td>
<td class="border border-gray-400 p-2 text-center">
<div class="text-black font-semibold">{{ zone5_speed | default('7.0-8.0mph') }}</div>
<div class="text-black text-xs">{{ zone5_incline | default('2% Incline') }}</div>
</td>
</tr>
<!-- Pace -->
<tr>
<td class="border border-gray-400 p-2 text-center text-black">{{ zone1_pace | default('10:39min/km Pace') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ zone2_pace | default('10:39-9:19min/km Pace') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ zone3_pace | default('9:19-5:44min/km Pace') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ zone4_pace | default('5:44-5:20min/km Pace') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ zone5_pace | default('5:20-4:40min/km Pace') }}</td>
</tr>
<!-- Average Calories -->
<tr>
<td class="border border-gray-400 p-2 text-center">
<div class="text-black text-xs">Avg:</div>
<div class="text-black font-semibold">{{ zone1_calories | default('4.4kcals/minute') }}</div>
</td>
<td class="border border-gray-400 p-2 text-center">
<div class="text-black text-xs">Avg:</div>
<div class="text-black font-semibold">{{ zone2_calories | default('5.9kcals/minute') }}</div>
</td>
<td class="border border-gray-400 p-2 text-center">
<div class="text-black text-xs">Avg:</div>
<div class="text-black font-semibold">{{ zone3_calories | default('9.4kcals/minute') }}</div>
</td>
<td class="border border-gray-400 p-2 text-center">
<div class="text-black text-xs">Avg:</div>
<div class="text-black font-semibold">{{ zone4_calories | default('12.5kcals/minute') }}</div>
</td>
<td class="border border-gray-400 p-2 text-center">
<div class="text-black text-xs">Avg:</div>
<div class="text-black font-semibold">{{ zone5_calories | default('12.8kcals/minute') }}</div>
</td>
</tr>
<!-- Carb Utilization -->
<tr>
<td class="border border-gray-400 p-2 text-center text-black">{{ zone1_carb | default('Avg: 0.4g/min Carb Utilization') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ zone2_carb | default('Avg: 0.6g/min Carb Utilization') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ zone3_carb | default('Avg: 1.9g/min Carb Utilization') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ zone4_carb | default('Avg: 2.9g/min Carb Utilization') }}</td>
<td class="border border-gray-400 p-2 text-center text-black">{{ zone5_carb | default('Avg: 3.1g/min Carb Utilization') }}</td>
</tr>
<!-- Breathing -->
<tr>
<td class="bg-red-200 border border-gray-400 p-2 text-center">
<div class="text-black font-bold">{{ zone1_breaths | default('Avg: 27 breaths') }}</div>
<div class="text-black text-xs italic">{{ zone1_breath_range | default('Ideal Range: 15-20 breaths') }}</div>
</td>
<td class="bg-red-200 border border-gray-400 p-2 text-center">
<div class="text-black font-bold">{{ zone2_breaths | default('Avg: 28 breaths') }}</div>
<div class="text-black text-xs italic">{{ zone2_breath_range | default('Ideal Range: 20-25 breaths') }}</div>
</td>
<td class="bg-yellow-200 border border-gray-400 p-2 text-center">
<div class="text-black font-bold">{{ zone3_breaths | default('Avg: 31 breaths') }}</div>
<div class="text-black text-xs italic">{{ zone3_breath_range | default('Ideal Range: 25-30 breaths') }}</div>
</td>
<td class="bg-green-200 border border-gray-400 p-2 text-center">
<div class="text-black font-bold">{{ zone4_breaths | default('Avg: 42 breaths') }}</div>
<div class="text-black text-xs italic">{{ zone4_breath_range | default('Ideal Range: 30-35 breaths') }}</div>
</td>
<td class="bg-green-200 border border-gray-400 p-2 text-center">
<div class="text-black font-bold">{{ zone5_breaths | default('Avg: 51 breaths') }}</div>
<div class="text-black text-xs italic">{{ zone5_breath_range | default('Ideal Range: 40+ breaths') }}</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- Footer Section -->
<div class="absolute bottom-0 left-0 right-0 bg-black text-white px-6 py-3">
<div class="flex justify-between items-center text-sm">
<div class="flex space-x-8">
<span>CONTACT: {{ contact_email | default('info@ishplabs.com') }}</span>
<span>WEBSITE: {{ website | default('www.ishplabs.com') }}</span>
<span>SOCIAL: {{ social | default('@ishplabs') }}</span>
</div>
<div class="bg-white text-black font-bold px-3 py-1 text-lg">
{{ page_number | default('8') }}
</div>
</div>
</div>
</div>
+48
View File
@@ -0,0 +1,48 @@
<div class="w-full page bg-white" style="height: 297mm;"></div>
<!-- Header Section -->
<div class="bg-black text-white px-6 py-4 flex items-center justify-between">
<div class="flex items-center">
<div class="text-lg font-bold mr-2">ISHP</div>
<div class="w-6 h-4 bg-cyan-400 mr-8"></div>
</div>
<div class="flex space-x-8 text-sm">
<span>Name: {{ patient_name | default('Keirstyn Moran') }}</span>
<span>Age: {{ age | default('34') }}</span>
<span>Height: {{ height | default('5\'4"') }}</span>
<span>Weight: {{ weight | default('123lbs') }}</span>
<span>Focus: {{ focus | default('Endurance') }}</span>
</div>
</div>
<!-- Main Content -->
<div class="px-8 py-12 flex flex-col items-center justify-center h-full">
<!-- Fuel Utilization Chart -->
<div class="w-full max-w-5xl">
<img src="{{ fuel_utilization_chart | default('../graphs/fuel_utilization_chart.png') }}"
alt="Fuel Utilization Report - Institute of Science, Health and Performance"
class="w-full h-auto object-contain">
</div>
<!-- Chart Information -->
<div class="mt-8 text-center">
<p class="text-gray-700 text-sm">
Client: {{ client_name | default('Keirstyn Moran') }} |
Assessment Date: {{ assessment_date | default('July 29 2025') }}
</p>
</div>
</div>
<!-- Footer Section -->
<div class="absolute bottom-0 left-0 right-0 bg-black text-white px-6 py-3">
<div class="flex justify-between items-center text-sm">
<div class="flex space-x-8">
<span>CONTACT: {{ contact_email | default('info@ishplabs.com') }}</span>
<span>WEBSITE: {{ website | default('www.ishplabs.com') }}</span>
<span>SOCIAL: {{ social | default('@ishplabs') }}</span>
</div>
<div class="bg-white text-black font-bold px-3 py-1 text-lg">
{{ page_number | default('9') }}
</div>
</div>
</div>
</div>