Significant Progress

This commit is contained in:
bolade
2025-11-24 19:56:02 +01:00
parent 8e8280bcb0
commit 47e6e69eb7
18 changed files with 2228 additions and 2204 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

+511 -34
View File
@@ -1,38 +1,515 @@
<div class="w-full page bg-white"> <div class="w-full page bg-white">
<!-- Main Content -->
<div class="px-8 py-6">
<!-- Page Title -->
<h1 class="text-3xl font-bold text-black mb-6">Fuelling Analysis</h1>
<!-- Main Content --> <!-- Flowchart Image -->
<div class="px-8 py-6"> <div class="mb-8 flex justify-center">
<!-- VO2 Pulse Section --> <img
<div class="mb-8"> src="data:image/png;base64,{{ fuelling_analysis_flowchart }}"
<!-- VO2 Pulse Header --> alt="Fuelling Analysis Flowchart"
<div class="bg-gray-200 p-4 rounded-lg mb-4 text-center"> class="w-full max-w-4xl h-auto object-contain"
<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>
</div>
<!-- Carbohydrate Storage Table -->
<!-- VO2 Pulse Graph --> <div class="mb-8">
<div class="flex justify-center mb-6"> <h2 class="text-xl font-bold text-black mb-4 text-center">
<img src="data:image/png;base64, {{ vo2_pulse_chart }}" Estimated Carbohydrate Storage by Weight and Sex in Athletes
alt="VO2 Pulse Chart" </h2>
class="w-full max-w-4xl h-auto object-contain">
</div> <div class="flex justify-center">
<table
class="table-auto border-collapse border border-gray-400 text-sm"
>
<thead>
<tr class="bg-gray-200">
<th
class="border border-gray-400 px-4 py-2 text-center"
>
Weight (kg)
</th>
<th
class="border border-gray-400 px-4 py-2 text-center"
>
Sex
</th>
<th
class="border border-gray-400 px-4 py-2 text-center"
>
Muscle Glycogen (g)
</th>
<th
class="border border-gray-400 px-4 py-2 text-center"
>
Liver Glycogen (g)
</th>
<th
class="border border-gray-400 px-4 py-2 text-center"
>
Blood Glucose (g)
</th>
<th
class="border border-gray-400 px-4 py-2 text-center"
>
Total Carb (g)
</th>
<th
class="border border-gray-400 px-4 py-2 text-center"
>
Total Carb (kcal)
</th>
</tr>
</thead>
<tbody>
<tr>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
50
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
male
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
292
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
105
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
402
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
1608
</td>
</tr>
<tr class="bg-gray-50">
<td
class="border border-gray-400 px-4 py-2 text-center"
>
50
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
female
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
228
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
85
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
317
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
1268
</td>
</tr>
<tr>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
60
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
male
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
351
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
105
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
460
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
1842
</td>
</tr>
<tr class="bg-gray-50">
<td
class="border border-gray-400 px-4 py-2 text-center"
>
60
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
female
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
273
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
85
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
362
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
1450
</td>
</tr>
<tr>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
70
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
male
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
410
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
105
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
519
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
2076
</td>
</tr>
<tr class="bg-gray-50">
<td
class="border border-gray-400 px-4 py-2 text-center"
>
70
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
female
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
318
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
85
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
408
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
1632
</td>
</tr>
<tr>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
80
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
male
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
468
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
105
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
578
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
2310
</td>
</tr>
<tr class="bg-gray-50">
<td
class="border border-gray-400 px-4 py-2 text-center"
>
80
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
female
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
364
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
85
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
454
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
1814
</td>
</tr>
<tr>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
90
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
male
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
526
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
105
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
636
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
2544
</td>
</tr>
<tr class="bg-gray-50">
<td
class="border border-gray-400 px-4 py-2 text-center"
>
90
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
female
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
409
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
85
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
499
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
1996
</td>
</tr>
<tr>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
100
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
male
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
585
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
105
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
694
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
2778
</td>
</tr>
<tr class="bg-gray-50">
<td
class="border border-gray-400 px-4 py-2 text-center"
>
100
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
female
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
455
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
85
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
544
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
2178
</td>
</tr>
</tbody>
</table>
</div>
</div>
</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="data:image/png;base64, {{ vo2_breath_chart }}"
alt="VO2 Breath Chart"
class="w-full max-w-4xl h-auto object-contain">
</div>
</div>
</div>
</div> </div>
+33 -131
View File
@@ -1,136 +1,38 @@
<div class="w-full page bg-white"> <div class="w-full page bg-white">
<!-- Main Content --> <!-- Main Content -->
<div class="px-8 py-6"> <div class="px-8 py-6">
<!-- Fat Metabolism Section --> <!-- VO2 Pulse Section -->
<div class="mb-2"> <div class="mb-8">
<h2 class="text-xl font-bold text-black mb-4 text-center"> <!-- VO2 Pulse Header -->
Fat Metabolism <div class="bg-gray-200 p-4 rounded-lg mb-4 text-center">
</h2> <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>
<!-- Fat Metabolism Info Boxes --> </div>
<div class="grid grid-cols-2 gap-4 mb-4">
<!-- Fat Max Box --> <!-- VO2 Pulse Graph -->
<div class="bg-gray-200 p-3 rounded-lg text-center"> <div class="flex justify-center mb-6">
<h3 class="text-base font-bold text-black mb-2">Fat Max</h3> <img src="data:image/png;base64, {{ vo2_pulse_chart }}"
<p class="text-xs text-gray-600 italic mb-2"> alt="VO2 Pulse Chart"
{{ fat_max_optimal | default('*Optimal class="w-full max-w-4xl h-auto object-contain">
10-12Kcals/minute') }} </div>
</p>
<p class="text-lg font-bold text-black">
{{ fat_max_value | default('3.8Kcals/min') }}
</p>
<p class="text-xs text-black">
{{ fat_max_heart_rate | default('49% of Max Heart Rate')
}}
</p>
<p class="text-xs text-black">
{{ fat_max_bpm | default('97 bpm') }}
</p>
</div>
<!-- Carbs and Fat Crossover Box -->
<div class="bg-gray-200 p-3 rounded-lg text-center">
<h3 class="text-base font-bold text-black mb-3">
Carbs and Fat Crossover
</h3>
<p class="text-lg font-bold text-black">
{{ crossover_bpm | default('100bpm') }}
</p>
<p class="text-xs 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 text-sm"></p>
{{ fat_metabolism_note | default('100bpm at a speed of
4.0mph and incline of 2%') }}
</p>
</div> -->
<div class="flex justify-center">
<img
src="data:image/png;base64, {{ fat_metabolism_chart }}"
alt="Fat Metabolism Chart"
class="w-full max-w-4xl h-auto object-contain"
/>
</div>
</div>
</div>
<!-- Recovery Section -->
<div class="mb-2">
<h2 class="text-xl 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-3 rounded-lg text-center">
<h3 class="text-sm font-bold text-black mb-2">
Cardiac Recovery
</h3>
<p class="text-xs text-gray-600 mb-2">
{{ cardiac_recovery_time | default('(1 minute)') }}
</p>
<p class="text-lg font-bold text-black">
{{ cardiac_recovery_percentage | default('33%') }}
</p>
</div>
<!-- Metabolic Recovery -->
<div class="bg-gray-200 p-3 rounded-lg text-center">
<h3 class="text-sm font-bold text-black mb-2">
Metabolic (CO2) Recovery
</h3>
<p class="text-xs text-gray-600 mb-2">
{{ metabolic_recovery_time | default('(2 minute)') }}
</p>
<p class="text-lg font-bold text-black">
{{ metabolic_recovery_percentage | default('65%') }}
</p>
</div>
<!-- Breath Frequency Recovery -->
<div class="bg-gray-200 p-3 rounded-lg text-center">
<h3 class="text-sm font-bold text-black mb-2">
Breath Frequency Recovery
</h3>
<p class="text-xs text-gray-600 mb-2">
{{ breath_recovery_time | default('(2.5 minute)') }}
</p>
<p class="text-lg font-bold text-black">
{{ breath_recovery_percentage | default('76%') }}
</p>
</div>
</div>
<!-- Recovery Graph -->
<div class="flex justify-center mb-6">
<img
src="data:image/png;base64, {{ recovery_chart }}"
alt="Recovery Chart"
class="w-full max-w-4xl h-auto object-contain"
/>
</div>
</div>
<!-- Resting Heart Rate Table -->
<div class="mb-2">
<div class="flex justify-center">
<img
src="data:image/png;base64, {{ rhr_table }}"
alt="Resting Heart Rate Table"
class="table-image"
/>
</div>
</div>
</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="data:image/png;base64, {{ vo2_breath_chart }}"
alt="VO2 Breath Chart"
class="w-full max-w-4xl h-auto object-contain">
</div>
</div>
</div>
</div> </div>
+113 -143
View File
@@ -1,166 +1,136 @@
<div class="page bg-white p-8 max-w-4xl mx-auto"> <div class="w-full page bg-white">
<!-- Header -->
<div class="mb-8">
<h1 class="text-3xl font-bold text-gray-900 mb-4">
Local Muscle Activity
</h1>
<h2 class="text-xl font-semibold text-gray-800 mb-2">
Muscle Oxygenation Assessment
</h2>
<p class="text-sm text-gray-600 leading-relaxed">
SMO2 testing (Skeletal Muscle Oxygen Saturation) is an analysis of
how effectively oxygen is being used at a particular muscle. It
helps determine limitations on if the muscle is effectively using
oxygen when exercising.
</p>
</div>
<!-- Combined Muscle Oxygenation Chart --> <!-- Main Content -->
<div class="mb-6"> <div class="px-8 py-6">
<div class="flex justify-center mb-4"> <!-- Fat Metabolism Section -->
<img <div class="mb-2">
src="data:image/png;base64,{{ muscle_oxygenation_chart }}" <h2 class="text-xl font-bold text-black mb-4 text-center">
alt="Muscle Oxygenation Chart" Fat Metabolism
class="w-full h-auto max-w-6xl" </h2>
/>
</div>
</div>
<!-- Metrics Summary Grid --> <!-- Fat Metabolism Info Boxes -->
<div class="grid grid-cols-2 gap-6 mb-6"> <div class="grid grid-cols-2 gap-4 mb-4">
<!-- Left Leg Metrics --> <!-- Fat Max Box -->
<div class="bg-blue-50 p-4 rounded-lg border-2 border-blue-200"> <div class="bg-gray-200 p-3 rounded-lg text-center">
<h3 class="text-lg font-bold text-gray-900 mb-4 text-center"> <h3 class="text-base font-bold text-black mb-2">Fat Max</h3>
Left Leg Analysis <p class="text-xs text-gray-600 italic mb-2">
</h3> {{ fat_max_optimal | default('*Optimal
10-12Kcals/minute') }}
<div class="space-y-3"> </p>
<div class="bg-white p-3 rounded shadow-sm"> <p class="text-lg font-bold text-black">
<div class="text-xs font-semibold text-gray-700 mb-1"> {{ fat_max_value | default('3.8Kcals/min') }}
Baseline SmO₂ </p>
</div> <p class="text-xs text-black">
<div class="text-lg font-bold text-gray-900"> {{ fat_max_heart_rate | default('49% of Max Heart Rate')
{{ left_baseline_smo2 | default('75.4%') }} }}
</div> </p>
<p class="text-xs text-black">
{{ fat_max_bpm | default('97 bpm') }}
</p>
</div> </div>
<div class="bg-white p-3 rounded shadow-sm"> <!-- Carbs and Fat Crossover Box -->
<div class="text-xs font-semibold text-gray-700 mb-1"> <div class="bg-gray-200 p-3 rounded-lg text-center">
Minimum SmO₂ <h3 class="text-base font-bold text-black mb-3">
</div> Carbs and Fat Crossover
<div class="text-lg font-bold text-gray-900"> </h3>
{{ left_minimum_smo2 | default('69.3%') }} <p class="text-lg font-bold text-black">
</div> {{ crossover_bpm | default('100bpm') }}
<div class="text-xs text-gray-600 mt-1"> </p>
{{ left_minimum_lap | default('Lap 6') }} <p class="text-xs text-black">
</div> {{ crossover_heart_rate | default('51% of Max Heart
Rate') }}
</p>
</div> </div>
</div>
<div class="bg-white p-3 rounded shadow-sm"> <!-- Fat Metabolism Graph -->
<div class="text-xs font-semibold text-gray-700 mb-1"> <div class="mb-4">
Oxygen Drop <!-- <div class="bg-gray-100 p-2 rounded-lg mb-2">
</div> <p class="text-black font-semibold text-center text-sm"></p>
<div class="text-lg font-bold text-gray-900"> {{ fat_metabolism_note | default('100bpm at a speed of
{{ left_oxygen_drop | default('6.0%') }} 4.0mph and incline of 2%') }}
</div> </p>
<div class="text-xs text-gray-600 mt-1"> </div> -->
{{ left_drop_percentage | default('8% decrease') }}
</div>
</div>
<div class="bg-white p-3 rounded shadow-sm"> <div class="flex justify-center">
<div class="text-xs font-semibold text-gray-700 mb-1"> <img
Recovery src="data:image/png;base64, {{ fat_metabolism_chart }}"
</div> alt="Fat Metabolism Chart"
<div class="text-xs text-gray-600 mb-1"> class="w-full max-w-4xl h-auto object-contain"
"Optimal >100%" />
</div>
<div class="text-lg font-bold text-green-600">
{{ left_recovery_percentage | default('109%') }}
</div>
</div> </div>
</div> </div>
</div> </div>
<!-- Right Leg Metrics --> <!-- Recovery Section -->
<div class="bg-purple-50 p-4 rounded-lg border-2 border-purple-200"> <div class="mb-2">
<h3 class="text-lg font-bold text-gray-900 mb-4 text-center"> <h2 class="text-xl font-bold text-black mb-4 text-center">
Right Leg Analysis Recovery
</h3> </h2>
<div class="space-y-3"> <!-- Recovery Info Boxes -->
<div class="bg-white p-3 rounded shadow-sm"> <div class="grid grid-cols-3 gap-4 mb-4">
<div class="text-xs font-semibold text-gray-700 mb-1"> <!-- Cardiac Recovery -->
Baseline SmO₂ <div class="bg-gray-200 p-3 rounded-lg text-center">
</div> <h3 class="text-sm font-bold text-black mb-2">
<div class="text-lg font-bold text-gray-900"> Cardiac Recovery
{{ right_baseline_smo2 | default('82.9%') }} </h3>
</div> <p class="text-xs text-gray-600 mb-2">
{{ cardiac_recovery_time | default('(1 minute)') }}
</p>
<p class="text-lg font-bold text-black">
{{ cardiac_recovery_percentage | default('33%') }}
</p>
</div> </div>
<div class="bg-white p-3 rounded shadow-sm"> <!-- Metabolic Recovery -->
<div class="text-xs font-semibold text-gray-700 mb-1"> <div class="bg-gray-200 p-3 rounded-lg text-center">
Minimum SmO₂ <h3 class="text-sm font-bold text-black mb-2">
</div> Metabolic (CO2) Recovery
<div class="text-lg font-bold text-gray-900"> </h3>
{{ right_minimum_smo2 | default('73.7%') }} <p class="text-xs text-gray-600 mb-2">
</div> {{ metabolic_recovery_time | default('(2 minute)') }}
<div class="text-xs text-gray-600 mt-1"> </p>
{{ right_minimum_lap | default('Lap 6') }} <p class="text-lg font-bold text-black">
</div> {{ metabolic_recovery_percentage | default('65%') }}
</p>
</div> </div>
<div class="bg-white p-3 rounded shadow-sm"> <!-- Breath Frequency Recovery -->
<div class="text-xs font-semibold text-gray-700 mb-1"> <div class="bg-gray-200 p-3 rounded-lg text-center">
Oxygen Drop <h3 class="text-sm font-bold text-black mb-2">
</div> Breath Frequency Recovery
<div class="text-lg font-bold text-gray-900"> </h3>
{{ right_oxygen_drop | default('9.3%') }} <p class="text-xs text-gray-600 mb-2">
</div> {{ breath_recovery_time | default('(2.5 minute)') }}
<div class="text-xs text-gray-600 mt-1"> </p>
{{ right_drop_percentage | default('11% decrease') }} <p class="text-lg font-bold text-black">
</div> {{ breath_recovery_percentage | default('76%') }}
</p>
</div> </div>
</div>
<div class="bg-white p-3 rounded shadow-sm"> <!-- Recovery Graph -->
<div class="text-xs font-semibold text-gray-700 mb-1"> <div class="flex justify-center mb-6">
Recovery <img
</div> src="data:image/png;base64, {{ recovery_chart }}"
<div class="text-xs text-gray-600 mb-1"> alt="Recovery Chart"
"Optimal >100%" class="w-full max-w-4xl h-auto object-contain"
</div> />
<div class="text-lg font-bold text-blue-600"> </div>
{{ right_recovery_percentage | default('97%') }} </div>
</div>
</div> <!-- Resting Heart Rate Table -->
<div class="mb-2">
<div class="flex justify-center">
<img
src="data:image/png;base64, {{ rhr_table }}"
alt="Resting Heart Rate Table"
class="table-image"
/>
</div> </div>
</div> </div>
</div> </div>
<!-- Key Findings Summary -->
<div class="bg-gray-100 p-4 rounded-lg">
<h3 class="text-base font-bold text-gray-900 mb-3">Key Findings</h3>
<div class="text-sm text-gray-700 space-y-2">
<p>
<strong>Left leg</strong> showed better oxygen maintenance
during high-intensity work
</p>
<p>
<strong
>{{ recovery_assessment | default('Excellent recovery
capacity') }}</strong
>
- both legs recovered well
</p>
<p>
<strong>Heart rate progression:</strong> {{ hr_warmup |
default('93') }} → {{ hr_max | default('168') }} bpm
</p>
<p>
<strong>Test duration:</strong> {{ test_duration |
default('~21 minutes active test') }}
</p>
</div>
</div>
</div> </div>
+162 -212
View File
@@ -1,216 +1,166 @@
<div class="w-full page bg-white"> <div class="page bg-white p-8 max-w-4xl mx-auto">
<!-- Header Section --> <!-- Header -->
<!-- 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"> <div class="mb-8">
<h2 class="text-2xl font-bold text-black mb-6 text-center">Training Week Example with Progression</h2> <h1 class="text-3xl font-bold text-gray-900 mb-4">
Local Muscle Activity
<!-- Week 1 --> </h1>
<div class="mb-6"> <h2 class="text-xl font-semibold text-gray-800 mb-2">
<div class="grid grid-cols-7 gap-2"> Muscle Oxygenation Assessment
<!-- Monday --> </h2>
<div class="bg-cyan-300 p-3 text-center rounded-lg"> <p class="text-sm text-gray-600 leading-relaxed">
<div class="font-bold text-black mb-1">Monday</div> SMO2 testing (Skeletal Muscle Oxygen Saturation) is an analysis of
<div class="text-sm text-black">{{ week1_mon_zone | default('Zone 2') }}</div> how effectively oxygen is being used at a particular muscle. It
<div class="text-sm text-black">{{ week1_mon_duration | default('45 mins') }}</div> helps determine limitations on if the muscle is effectively using
</div> oxygen when exercising.
</p>
<!-- 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>
</div>
<!-- Footer Section --> <!-- Combined Muscle Oxygenation Chart -->
<div class="mb-6">
<div class="flex justify-center mb-4">
<img
src="data:image/png;base64,{{ muscle_oxygenation_chart }}"
alt="Muscle Oxygenation Chart"
class="w-full h-auto max-w-6xl"
/>
</div>
</div>
<!-- Metrics Summary Grid -->
<div class="grid grid-cols-2 gap-6 mb-6">
<!-- Left Leg Metrics -->
<div class="bg-blue-50 p-4 rounded-lg border-2 border-blue-200">
<h3 class="text-lg font-bold text-gray-900 mb-4 text-center">
Left Leg Analysis
</h3>
<div class="space-y-3">
<div class="bg-white p-3 rounded shadow-sm">
<div class="text-xs font-semibold text-gray-700 mb-1">
Baseline SmO₂
</div>
<div class="text-lg font-bold text-gray-900">
{{ left_baseline_smo2 | default('75.4%') }}
</div>
</div>
<div class="bg-white p-3 rounded shadow-sm">
<div class="text-xs font-semibold text-gray-700 mb-1">
Minimum SmO₂
</div>
<div class="text-lg font-bold text-gray-900">
{{ left_minimum_smo2 | default('69.3%') }}
</div>
<div class="text-xs text-gray-600 mt-1">
{{ left_minimum_lap | default('Lap 6') }}
</div>
</div>
<div class="bg-white p-3 rounded shadow-sm">
<div class="text-xs font-semibold text-gray-700 mb-1">
Oxygen Drop
</div>
<div class="text-lg font-bold text-gray-900">
{{ left_oxygen_drop | default('6.0%') }}
</div>
<div class="text-xs text-gray-600 mt-1">
{{ left_drop_percentage | default('8% decrease') }}
</div>
</div>
<div class="bg-white p-3 rounded shadow-sm">
<div class="text-xs font-semibold text-gray-700 mb-1">
Recovery
</div>
<div class="text-xs text-gray-600 mb-1">
"Optimal >100%"
</div>
<div class="text-lg font-bold text-green-600">
{{ left_recovery_percentage | default('109%') }}
</div>
</div>
</div>
</div>
<!-- Right Leg Metrics -->
<div class="bg-purple-50 p-4 rounded-lg border-2 border-purple-200">
<h3 class="text-lg font-bold text-gray-900 mb-4 text-center">
Right Leg Analysis
</h3>
<div class="space-y-3">
<div class="bg-white p-3 rounded shadow-sm">
<div class="text-xs font-semibold text-gray-700 mb-1">
Baseline SmO₂
</div>
<div class="text-lg font-bold text-gray-900">
{{ right_baseline_smo2 | default('82.9%') }}
</div>
</div>
<div class="bg-white p-3 rounded shadow-sm">
<div class="text-xs font-semibold text-gray-700 mb-1">
Minimum SmO₂
</div>
<div class="text-lg font-bold text-gray-900">
{{ right_minimum_smo2 | default('73.7%') }}
</div>
<div class="text-xs text-gray-600 mt-1">
{{ right_minimum_lap | default('Lap 6') }}
</div>
</div>
<div class="bg-white p-3 rounded shadow-sm">
<div class="text-xs font-semibold text-gray-700 mb-1">
Oxygen Drop
</div>
<div class="text-lg font-bold text-gray-900">
{{ right_oxygen_drop | default('9.3%') }}
</div>
<div class="text-xs text-gray-600 mt-1">
{{ right_drop_percentage | default('11% decrease') }}
</div>
</div>
<div class="bg-white p-3 rounded shadow-sm">
<div class="text-xs font-semibold text-gray-700 mb-1">
Recovery
</div>
<div class="text-xs text-gray-600 mb-1">
"Optimal >100%"
</div>
<div class="text-lg font-bold text-blue-600">
{{ right_recovery_percentage | default('97%') }}
</div>
</div>
</div>
</div>
</div>
<!-- Key Findings Summary -->
<div class="bg-gray-100 p-4 rounded-lg">
<h3 class="text-base font-bold text-gray-900 mb-3">Key Findings</h3>
<div class="text-sm text-gray-700 space-y-2">
<p>
<strong>Left leg</strong> showed better oxygen maintenance
during high-intensity work
</p>
<p>
<strong
>{{ recovery_assessment | default('Excellent recovery
capacity') }}</strong
>
- both legs recovered well
</p>
<p>
<strong>Heart rate progression:</strong> {{ hr_warmup |
default('93') }} → {{ hr_max | default('168') }} bpm
</p>
<p>
<strong>Test duration:</strong> {{ test_duration |
default('~21 minutes active test') }}
</p>
</div>
</div>
</div> </div>
+196 -128
View File
@@ -1,148 +1,216 @@
<div class="w-full page bg-white"> <div class="w-full page bg-white">
<!-- Header Section -->
<!-- Main Content --> <!-- Main Content -->
<div class="px-8 py-6"> <div class="px-8 py-6">
<!-- Page Title --> <!-- Page Title -->
<div class="text-center mb-8"> <h1 class="text-3xl font-bold text-black mb-8 text-center">Training Recommendations</h1>
<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 --> <!-- Training Recommendations Section -->
<div class="mb-8"> <div class="grid grid-cols-2 gap-8 mb-8">
<div class="grid grid-cols-7 gap-2 mb-4"> <!-- Left Side: Zone Recommendations -->
<!-- Week 1 Headers --> <div class="bg-gray-200 p-6 rounded-lg">
<div class="bg-cyan-300 p-2 text-center rounded-lg"> <!-- Zone 2 Recommendations -->
<div class="font-bold text-black">Monday</div> <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> </div>
<div class="bg-cyan-300 p-2 text-center rounded-lg">
<div class="font-bold text-black">Tuesday</div> <!-- Zone 3 Recommendations -->
</div> <div class="mb-6">
<div class="bg-cyan-300 p-2 text-center rounded-lg"> <h3 class="text-lg font-bold text-black mb-3">Zone 3 {{ zone3_frequency | default('1-2x/week') }}:</h3>
<div class="font-bold text-black">Wednesday</div> <ul class="text-sm text-black space-y-1 list-disc list-inside">
</div> <li>{{ zone3_duration | default('10-20 minutes') }} in zone 3 (HR {{ zone3_hr_range | default('____ bpm') }})</li>
<div class="bg-cyan-300 p-2 text-center rounded-lg"> <li>{{ zone3_speed | default('____mph') }} + at {{ zone3_incline | default('2% Incline') }}</li>
<div class="font-bold text-black">Thursday</div> <li>Slow down cadence until HR reaches {{ zone3_target_hr | default('___ bpm') }}</li>
</div> <li>{{ zone3_recovery_speed | default('____mph') }} at {{ zone3_recovery_incline | default('2% Incline') }}</li>
<div class="bg-cyan-300 p-2 text-center rounded-lg"> <li>Maintain HR in zone 1 ({{ zone1_hr_range | default('____bpm') }}) for {{ zone1_duration | default('4-8 minutes') }}</li>
<div class="font-bold text-black">Friday</div> <li>Repeat {{ zone3_repeats | default('2-3 times') }}</li>
</div> </ul>
<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>
</div> </div>
<!-- Week 1 Content Boxes --> <!-- Right Side: Training Table -->
<div class="grid grid-cols-7 gap-2 mb-8"> <div>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div> <table class="w-full border-collapse text-sm">
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div> <thead>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div> <tr>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div> <th class="bg-cyan-300 border border-gray-400 p-2 text-black font-bold">Type</th>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div> <th class="bg-cyan-300 border border-gray-400 p-2 text-black font-bold">Sets</th>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div> <th class="bg-cyan-300 border border-gray-400 p-2 text-black font-bold">Effort Duration</th>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div> <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>
</div> </div>
<!-- Second Training Week Grid --> <!-- Training Week Example Section -->
<div class="mb-8"> <div class="mb-8">
<div class="grid grid-cols-7 gap-2 mb-4"> <h2 class="text-2xl font-bold text-black mb-6 text-center">Training Week Example with Progression</h2>
<!-- 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 --> <!-- Week 1 -->
<div class="grid grid-cols-7 gap-2 mb-8"> <div class="mb-6">
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div> <div class="grid grid-cols-7 gap-2">
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div> <!-- Monday -->
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div> <div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div> <div class="font-bold text-black mb-1">Monday</div>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div> <div class="text-sm text-black">{{ week1_mon_zone | default('Zone 2') }}</div>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></div> <div class="text-sm text-black">{{ week1_mon_duration | default('45 mins') }}</div>
<div class="bg-gray-100 border-2 border-gray-300 h-32 rounded-lg"></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> </div>
</div>
<!-- Training Week Guidelines Section --> <!-- Week 2 -->
<div class="mb-6"> <div class="mb-6">
<h2 class="text-2xl font-bold text-black mb-6 text-center">Training Week Guidelines</h2> <div class="grid grid-cols-7 gap-2">
<!-- Monday -->
<!-- Guidelines Grid --> <div class="bg-cyan-300 p-3 text-center rounded-lg">
<div class="grid grid-cols-5 gap-4 mb-6"> <div class="font-bold text-black mb-1">Monday</div>
<!-- Zone 1 --> <div class="text-sm text-black">{{ week2_mon_zone | default('Zone 2') }}</div>
<div> <div class="text-sm text-black">{{ week2_mon_duration | default('50 mins') }}</div>
<h3 class="text-lg font-bold text-black mb-3">Zone 1</h3> </div>
<ul class="text-sm text-black space-y-2 list-disc list-inside">
<li>Zone 1 training is low intensity, for active recovery.</li> <!-- Tuesday -->
<li>It can be done daily or even consecutively, depending on fitness, volume, and health.</li> <div class="bg-cyan-300 p-3 text-center rounded-lg">
</ul> <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>
<!-- 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> </div>
</div> </div>
<!-- Footer Section -->
</div> </div>
+132 -54
View File
@@ -3,68 +3,146 @@
<!-- Main Content --> <!-- Main Content -->
<div class="px-8 py-6"> <div class="px-8 py-6">
<!-- Page Title --> <!-- Page Title -->
<h1 class="text-3xl font-bold text-black mb-8">Next Steps:</h1> <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>
<!-- Calorie Tracking Section --> <!-- First Training Week Grid -->
<div class="mb-8"> <div class="mb-8">
<h2 class="text-xl font-bold text-black mb-4">Calorie Tracking</h2> <div class="grid grid-cols-7 gap-2 mb-4">
<ul class="text-black space-y-2 list-disc list-inside ml-4"> <!-- Week 1 Headers -->
<li>Download and create an account with My Fitness Pal (or preferred nutrition tracker)</li> <div class="bg-cyan-300 p-2 text-center rounded-lg">
<li>Fill out the "My Profile" section with your goals (ie: height, weight, target weight) <div class="font-bold text-black">Monday</div>
<ul class="mt-2 ml-6 space-y-1 list-disc list-inside"> </div>
<li>Input your Macros</li> <div class="bg-cyan-300 p-2 text-center rounded-lg">
<li>Click the three dots on the bottom right corner</li> <div class="font-bold text-black">Tuesday</div>
<li>Click "Goals"</li> </div>
<li>Click "Calorie, Carbs, Protein and Fat Goals" under the Nutrition Goals</li> <div class="bg-cyan-300 p-2 text-center rounded-lg">
<li>Set the Calories, Carbs, Protein, and Fat to the recommended macro outlined above.</li> <div class="font-bold text-black">Wednesday</div>
</ul> </div>
</li> <div class="bg-cyan-300 p-2 text-center rounded-lg">
<li>Once completed fill out your food intake from each meal on the main page</li> <div class="font-bold text-black">Thursday</div>
</ul> </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>
<!-- Recommendation Note --> <!-- Week 1 Content Boxes -->
<div class="mt-6 text-center"> <div class="grid grid-cols-7 gap-2 mb-8">
<p class="text-black italic font-semibold">It's highly recommended to purchase a weight and food scale for more accurate results.</p> <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>
</div> </div>
<!-- Daily Tasks Section --> <!-- Second Training Week Grid -->
<div class="mb-8"> <div class="mb-8">
<h2 class="text-xl font-bold text-black mb-4">Daily Tasks</h2> <div class="grid grid-cols-7 gap-2 mb-4">
<ul class="text-black space-y-2 list-disc list-inside ml-4"> <!-- Week 2 Headers -->
<li>Weigh yourself in the morning, after your first bowel movement, and naked</li> <div class="bg-cyan-300 p-2 text-center rounded-lg">
<li>Log your weight into your my fitness pal app</li> <div class="font-bold text-black">Monday</div>
<li>Track calories in grams - FOLLOW YOUR PERSONAL RECOMMENDATIONS.</li> </div>
<li>Log in a diary: <div class="bg-cyan-300 p-2 text-center rounded-lg">
<ul class="mt-2 ml-6 space-y-1 list-disc list-inside"> <div class="font-bold text-black">Tuesday</div>
<li>Log any additional prescribed recommendation (i.e breath work)</li> </div>
<li>Complete the prescribed training recommendations (i.e Zone 2 Training)</li> <div class="bg-cyan-300 p-2 text-center rounded-lg">
<li>Log additional physical activity (i.e Monday - Strength Training 1 hour)</li> <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> </ul>
</li> </div>
</ul>
</div> <!-- Zone 2 -->
<div>
<!-- Two weeks after Appointment Section --> <h3 class="text-lg font-bold text-black mb-3">Zone 2</h3>
<div class="mb-8"> <ul class="text-sm text-black space-y-2 list-disc list-inside">
<h2 class="text-xl font-bold text-black mb-4">Two weeks after Appointment</h2> <li>Zone 2 training can be done on consecutive or daily basis with moderate sessions.</li>
<ul class="text-black space-y-2 list-disc list-inside ml-4"> <li>Can be steady state or interval sessions.</li>
<li>Should you find the macronutrient breakdown difficult to follow, reach out to us to discuss a change within your caloric parameters</li> </ul>
</ul> </div>
</div>
<!-- Zone 3 -->
<!-- Contact Information --> <div>
<div class="mb-12 text-center"> <h3 class="text-lg font-bold text-black mb-3">Zone 3</h3>
<p class="text-lg font-bold text-black">Should you have any questions or concerns please contact us!</p> <ul class="text-sm text-black space-y-2 list-disc list-inside">
</div> <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>
<!-- Recommended Next Testing Date --> </ul>
<div class="mb-8 text-center"> </div>
<h2 class="text-2xl font-bold text-black">
<span class="underline">Recommended Next Testing Date:</span> <!-- Zone 4 -->
<span class="ml-2">October 2025</span> <div>
</h2> <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>
</div> </div>
</div> </div>
+57 -44
View File
@@ -1,56 +1,69 @@
<div class="w-full page bg-white"> <div class="w-full page bg-white">
<!-- Main Content --> <!-- Main Content -->
<div class="px-6"> <div class="px-8 py-6">
<!-- Page Title --> <!-- Page Title -->
<h1 class="text-2xl font-bold text-black mb-4">Glossary</h1> <h1 class="text-3xl font-bold text-black mb-8">Next Steps:</h1>
<!-- Body Fat Percentage --> <!-- Calorie Tracking Section -->
<div class="mb-3"> <div class="mb-8">
<h2 class="text-base font-bold text-black mb-1">Body Fat Percentage:</h2> <h2 class="text-xl font-bold text-black mb-4">Calorie Tracking</h2>
<p class="text-xs text-black leading-snug">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> <ul class="text-black space-y-2 list-disc list-inside ml-4">
</div> <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)
<!-- Metabolic Rate --> <ul class="mt-2 ml-6 space-y-1 list-disc list-inside">
<div class="mb-3"> <li>Input your Macros</li>
<h2 class="text-base font-bold text-black mb-1">Metabolic Rate:</h2> <li>Click the three dots on the bottom right corner</li>
<p class="text-xs text-black leading-snug">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> <li>Click "Goals"</li>
</div> <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>
<!-- Fuel Source --> </ul>
<div class="mb-3"> </li>
<h2 class="text-base font-bold text-black mb-1">Fuel Source:</h2> <li>Once completed fill out your food intake from each meal on the main page</li>
<p class="text-xs text-black leading-snug mb-1">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-xs text-black leading-snug">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-3">
<h2 class="text-base font-bold text-black mb-1">NEAT (Non-Exercise Activity Thermogenesis)</h2>
<p class="text-xs text-black leading-snug">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-3">
<h2 class="text-base font-bold text-black mb-1">Spirometry:</h2>
<p class="text-xs text-black leading-snug mb-1">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-xs text-black leading-snug mb-1">"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-xs text-black space-y-1 list-disc list-inside ml-3">
<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> </ul>
<p class="text-xs text-black leading-snug mt-1">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> <!-- 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> </div>
<!-- VO2 max --> <!-- Daily Tasks Section -->
<div> <div class="mb-8">
<h2 class="text-base font-bold text-black mb-1">VO2 max:</h2> <h2 class="text-xl font-bold text-black mb-4">Daily Tasks</h2>
<p class="text-xs text-black leading-snug mb-1">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> <ul class="text-black space-y-2 list-disc list-inside ml-4">
<p class="text-xs text-black leading-snug">Understanding and training to increase your VO2 max can contribute to enhanced physical performance, longevity and well-being.</p> <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>
</div> </div>
+53 -84
View File
@@ -1,88 +1,57 @@
<!-- Header --> <div class="w-full page bg-white">
<div class="w-full page">
<!-- Main Content --> <!-- Main Content -->
<div class="p-4 text-sm"> <div class="px-6">
<h1 class="text-2xl font-bold mb-4">Glossary</h1> <!-- Page Title -->
<h1 class="text-2xl font-bold text-black mb-4">Glossary</h1>
<div class="space-y-3 leading-tight">
<!-- Peak VT --> <!-- Body Fat Percentage -->
<div> <div class="mb-3">
<p class="font-semibold">Peak VT:</p> <h2 class="text-base font-bold text-black mb-1">Body Fat Percentage:</h2>
<p class="mb-1"> <p class="text-xs text-black leading-snug">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>
Peak Volume of air moved throughout the test.
</p>
<p class="mb-1">
Respiratory Capability Limitations that can be found include:
</p>
<ul class="list-disc ml-4 space-y-0">
<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-1">
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-1">
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> </div>
<!-- Footer --> <!-- Metabolic Rate -->
<div class="mb-3">
<h2 class="text-base font-bold text-black mb-1">Metabolic Rate:</h2>
<p class="text-xs text-black leading-snug">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-3">
<h2 class="text-base font-bold text-black mb-1">Fuel Source:</h2>
<p class="text-xs text-black leading-snug mb-1">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-xs text-black leading-snug">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-3">
<h2 class="text-base font-bold text-black mb-1">NEAT (Non-Exercise Activity Thermogenesis)</h2>
<p class="text-xs text-black leading-snug">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-3">
<h2 class="text-base font-bold text-black mb-1">Spirometry:</h2>
<p class="text-xs text-black leading-snug mb-1">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-xs text-black leading-snug mb-1">"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-xs text-black space-y-1 list-disc list-inside ml-3">
<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-xs text-black leading-snug mt-1">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>
<h2 class="text-base font-bold text-black mb-1">VO2 max:</h2>
<p class="text-xs text-black leading-snug mb-1">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-xs text-black leading-snug">Understanding and training to increase your VO2 max can contribute to enhanced physical performance, longevity and well-being.</p>
</div>
</div>
</div> </div>
+81 -31
View File
@@ -1,38 +1,88 @@
<!-- Header -->
<div class="w-full page"> <div class="w-full page">
<!-- Main Content --> <!-- Main Content -->
<div class="p-8"> <div class="p-4 text-sm">
<h1 class="text-4xl font-bold mb-8">Glossary</h1> <h1 class="text-2xl font-bold mb-4">Glossary</h1>
<!-- Local Muscle Activity/SMO2 Definition --> <div class="space-y-3 leading-tight">
<div class="mb-12 text-sm leading-relaxed"> <!-- Peak VT -->
<p class="font-semibold mb-2">Local Muscle Activity/SMO2:</p> <div>
<p> <p class="font-semibold">Peak VT:</p>
SmO2 testing is a valuable tool for understanding how muscles <p class="mb-1">
respond to various physiological stressors and how to fine-tune Peak Volume of air moved throughout the test.
training, nutrition and hydration accordingly. Monitoring </p>
changes in tissue oxygen saturation and utilization helps <p class="mb-1">
identify an individual's optimal intensity to work at, as well Respiratory Capability Limitations that can be found include:
as how well they recover between bouts of intensity. This can </p>
help optimize training to improve performance, prevent <ul class="list-disc ml-4 space-y-0">
overtraining, and tailor strategies for better results. <li>
</p> <strong>Endurance:</strong> Normal capacity, but cannot maintain their VT over time.
<p> </li>
During competitions, athletes can also use SmO2 data to pace <li>
themselves effectively. Adjusting intensity based on muscle <strong>Strength/Power:</strong> Normal capacity, but peak VT is not 75-85% of their FEV1 despite FEV1 being normal
oxygenation can help prevent premature fatigue and optimize race </li>
outcomes <li>
</p> <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.
</div> </li>
</ul>
</div>
<div class="w-full max-w-5xl"> <!-- VO2 Pulse -->
<h1 class="text-2xl font-bold mb-4 text-center"> <div>
Body Fat Percent Master Chart <p class="font-semibold">VO2 Pulse:</p>
</h1> <p>
<img 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.
src="data:image/png;base64,{{ body_fat_percentage_chart }}" </p>
alt="Body Fat Percentage" </div>
class="w-full h-auto object-contain chart-large"
/> <!-- 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-1">
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-1">
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>
</div> </div>
<!-- Footer -->
</div> </div>
+32 -808
View File
@@ -1,814 +1,38 @@
<div class="w-full page bg-white"> <div class="w-full page">
<!-- Main Content --> <!-- Main Content -->
<div class="p-6"> <div class="p-8">
<h1 class="text-3xl font-bold mb-6">Glossary</h1> <h1 class="text-4xl font-bold mb-8">Glossary</h1>
<!-- Resting Heart Rate Section --> <!-- Local Muscle Activity/SMO2 Definition -->
<div class="mb-8"> <div class="mb-12 text-sm leading-relaxed">
<h2 class="text-xl font-bold mb-4 text-center"> <p class="font-semibold mb-2">Local Muscle Activity/SMO2:</p>
Resting Heart Rate <p>
</h2> SmO2 testing is a valuable tool for understanding how muscles
respond to various physiological stressors and how to fine-tune
<!-- Male Table --> training, nutrition and hydration accordingly. Monitoring
<div class="mb-4"> changes in tissue oxygen saturation and utilization helps
<table identify an individual's optimal intensity to work at, as well
class="w-full border-collapse border border-gray-300 text-xs" as how well they recover between bouts of intensity. This can
> help optimize training to improve performance, prevent
<thead> overtraining, and tailor strategies for better results.
<tr class="bg-cyan-200"> </p>
<th <p>
class="border border-gray-300 p-1 font-bold text-center" During competitions, athletes can also use SmO2 data to pace
> themselves effectively. Adjusting intensity based on muscle
Age (M) oxygenation can help prevent premature fatigue and optimize race
</th> outcomes
<th </p>
class="border border-gray-300 p-1 font-bold text-center"
>
Poor
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Below Average
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Average
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Above Average
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Good
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Excellent
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Athlete
</th>
</tr>
</thead>
<tbody>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
18-25
</td>
<td class="border border-gray-300 p-1 text-center">
85bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
76-84bpm
</td>
<td class="border border-gray-300 p-1 text-center">
74-78bpm
</td>
<td class="border border-gray-300 p-1 text-center">
70-73bpm
</td>
<td class="border border-gray-300 p-1 text-center">
66-69bpm
</td>
<td class="border border-gray-300 p-1 text-center">
61-65bpm
</td>
<td class="border border-gray-300 p-1 text-center">
60-60bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
26-35
</td>
<td class="border border-gray-300 p-1 text-center">
83bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
77-82bpm
</td>
<td class="border border-gray-300 p-1 text-center">
73-76bpm
</td>
<td class="border border-gray-300 p-1 text-center">
69-72bpm
</td>
<td class="border border-gray-300 p-1 text-center">
65-68bpm
</td>
<td class="border border-gray-300 p-1 text-center">
60-64bpm
</td>
<td class="border border-gray-300 p-1 text-center">
55-59bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
36-45
</td>
<td class="border border-gray-300 p-1 text-center">
85bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
79-84bpm
</td>
<td class="border border-gray-300 p-1 text-center">
74-78bpm
</td>
<td class="border border-gray-300 p-1 text-center">
70-73bpm
</td>
<td class="border border-gray-300 p-1 text-center">
65-69bpm
</td>
<td class="border border-gray-300 p-1 text-center">
60-64bpm
</td>
<td class="border border-gray-300 p-1 text-center">
55-59bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
46-55
</td>
<td class="border border-gray-300 p-1 text-center">
84bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
76-83bpm
</td>
<td class="border border-gray-300 p-1 text-center">
73-77bpm
</td>
<td class="border border-gray-300 p-1 text-center">
70-72bpm
</td>
<td class="border border-gray-300 p-1 text-center">
66-69bpm
</td>
<td class="border border-gray-300 p-1 text-center">
61-65bpm
</td>
<td class="border border-gray-300 p-1 text-center">
56-60bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
56-65
</td>
<td class="border border-gray-300 p-1 text-center">
85bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
78-84bpm
</td>
<td class="border border-gray-300 p-1 text-center">
74-77bpm
</td>
<td class="border border-gray-300 p-1 text-center">
70-73bpm
</td>
<td class="border border-gray-300 p-1 text-center">
65-69bpm
</td>
<td class="border border-gray-300 p-1 text-center">
60-64bpm
</td>
<td class="border border-gray-300 p-1 text-center">
50-59bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
65+
</td>
<td class="border border-gray-300 p-1 text-center">
84bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
77-83bpm
</td>
<td class="border border-gray-300 p-1 text-center">
73-76bpm
</td>
<td class="border border-gray-300 p-1 text-center">
70-73bpm
</td>
<td class="border border-gray-300 p-1 text-center">
65-69bpm
</td>
<td class="border border-gray-300 p-1 text-center">
60-64bpm
</td>
<td class="border border-gray-300 p-1 text-center">
55-59bpm
</td>
</tr>
</tbody>
</table>
</div>
<!-- Female Table -->
<div class="mb-4">
<table
class="w-full border-collapse border border-gray-300 text-xs"
>
<thead>
<tr class="bg-cyan-200">
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Age (F)
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Poor
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Below Average
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Average
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Above Average
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Good
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Excellent
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Athlete
</th>
</tr>
</thead>
<tbody>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
18-25
</td>
<td class="border border-gray-300 p-1 text-center">
81bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
74-81bpm
</td>
<td class="border border-gray-300 p-1 text-center">
73-78bpm
</td>
<td class="border border-gray-300 p-1 text-center">
66-69bpm
</td>
<td class="border border-gray-300 p-1 text-center">
62-65bpm
</td>
<td class="border border-gray-300 p-1 text-center">
56-61bpm
</td>
<td class="border border-gray-300 p-1 text-center">
50-55bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
26-35
</td>
<td class="border border-gray-300 p-1 text-center">
82bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
75-81bpm
</td>
<td class="border border-gray-300 p-1 text-center">
71-74bpm
</td>
<td class="border border-gray-300 p-1 text-center">
66-70bpm
</td>
<td class="border border-gray-300 p-1 text-center">
62-65bpm
</td>
<td class="border border-gray-300 p-1 text-center">
55-61bpm
</td>
<td class="border border-gray-300 p-1 text-center">
54-54bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
36-45
</td>
<td class="border border-gray-300 p-1 text-center">
83bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
76-82bpm
</td>
<td class="border border-gray-300 p-1 text-center">
71-75bpm
</td>
<td class="border border-gray-300 p-1 text-center">
67-70bpm
</td>
<td class="border border-gray-300 p-1 text-center">
63-66bpm
</td>
<td class="border border-gray-300 p-1 text-center">
57-62bpm
</td>
<td class="border border-gray-300 p-1 text-center">
47-56bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
46-55
</td>
<td class="border border-gray-300 p-1 text-center">
84bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
77-83bpm
</td>
<td class="border border-gray-300 p-1 text-center">
72-76bpm
</td>
<td class="border border-gray-300 p-1 text-center">
68-71bpm
</td>
<td class="border border-gray-300 p-1 text-center">
64-67bpm
</td>
<td class="border border-gray-300 p-1 text-center">
58-63bpm
</td>
<td class="border border-gray-300 p-1 text-center">
49-57bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
56-65
</td>
<td class="border border-gray-300 p-1 text-center">
82bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
76-81bpm
</td>
<td class="border border-gray-300 p-1 text-center">
72-75bpm
</td>
<td class="border border-gray-300 p-1 text-center">
68-71bpm
</td>
<td class="border border-gray-300 p-1 text-center">
62-67bpm
</td>
<td class="border border-gray-300 p-1 text-center">
57-61bpm
</td>
<td class="border border-gray-300 p-1 text-center">
51-56bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
65+
</td>
<td class="border border-gray-300 p-1 text-center">
80bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
74-79bpm
</td>
<td class="border border-gray-300 p-1 text-center">
70-73bpm
</td>
<td class="border border-gray-300 p-1 text-center">
66-69bpm
</td>
<td class="border border-gray-300 p-1 text-center">
62-65bpm
</td>
<td class="border border-gray-300 p-1 text-center">
56-61bpm
</td>
<td class="border border-gray-300 p-1 text-center">
52-55bpm
</td>
</tr>
</tbody>
</table>
</div>
</div> </div>
<!-- VO2 Master Chart Section --> <div class="w-full max-w-5xl">
<div class="mb-4"> <h1 class="text-2xl font-bold mb-4 text-center">
<h2 class="text-xl font-bold mb-4 text-center"> Body Fat Percent Master Chart
VO2 Master Chart </h1>
</h2> <img
src="data:image/png;base64,{{ body_fat_percentage_chart }}"
<!-- Male VO2 Table --> alt="Body Fat Percentage"
<div class="mb-4"> class="w-full h-auto object-contain chart-large"
<table />
class="w-full border-collapse border border-gray-300 text-xs"
>
<thead>
<tr class="bg-cyan-200">
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Age (M)
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Very Poor
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Poor
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Fair
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Good
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Excellent
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Superior
</th>
</tr>
</thead>
<tbody>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
20-29
</td>
<td class="border border-gray-300 p-1 text-center">
29.0-38.1
</td>
<td class="border border-gray-300 p-1 text-center">
38.1-44.9
</td>
<td class="border border-gray-300 p-1 text-center">
44.9-50.2
</td>
<td class="border border-gray-300 p-1 text-center">
50.2-61.8
</td>
<td class="border border-gray-300 p-1 text-center">
57.1-66.3
</td>
<td class="border border-gray-300 p-1 text-center">
66.3+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
30-39
</td>
<td class="border border-gray-300 p-1 text-center">
27.2-34.1
</td>
<td class="border border-gray-300 p-1 text-center">
34.1-39.6
</td>
<td class="border border-gray-300 p-1 text-center">
39.6-45.2
</td>
<td class="border border-gray-300 p-1 text-center">
45.2-51.6
</td>
<td class="border border-gray-300 p-1 text-center">
51.6-59.8
</td>
<td class="border border-gray-300 p-1 text-center">
59.8+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
40-49
</td>
<td class="border border-gray-300 p-1 text-center">
24.2-30.5
</td>
<td class="border border-gray-300 p-1 text-center">
30.5-35.7
</td>
<td class="border border-gray-300 p-1 text-center">
35.7-40.3
</td>
<td class="border border-gray-300 p-1 text-center">
40.3-46.7
</td>
<td class="border border-gray-300 p-1 text-center">
46.7-55.6
</td>
<td class="border border-gray-300 p-1 text-center">
55.6+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
50-59
</td>
<td class="border border-gray-300 p-1 text-center">
20.9-26.1
</td>
<td class="border border-gray-300 p-1 text-center">
26.1-30.7
</td>
<td class="border border-gray-300 p-1 text-center">
30.7-35.1
</td>
<td class="border border-gray-300 p-1 text-center">
35.1-41.2
</td>
<td class="border border-gray-300 p-1 text-center">
41.2-50.7
</td>
<td class="border border-gray-300 p-1 text-center">
50.7+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
60-69
</td>
<td class="border border-gray-300 p-1 text-center">
17.4-22.4
</td>
<td class="border border-gray-300 p-1 text-center">
22.4-26.6
</td>
<td class="border border-gray-300 p-1 text-center">
26.6-30.5
</td>
<td class="border border-gray-300 p-1 text-center">
30.5-36.1
</td>
<td class="border border-gray-300 p-1 text-center">
36.1-43.0
</td>
<td class="border border-gray-300 p-1 text-center">
43.0+
</td>
</tr>
</tbody>
</table>
</div>
<!-- Female VO2 Table -->
<div class="mb-4">
<table
class="w-full border-collapse border border-gray-300 text-xs"
>
<thead>
<tr class="bg-cyan-200">
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Age (F)
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Very Poor
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Poor
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Fair
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Good
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Excellent
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Superior
</th>
</tr>
</thead>
<tbody>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
20-29
</td>
<td class="border border-gray-300 p-1 text-center">
21.7-28.6
</td>
<td class="border border-gray-300 p-1 text-center">
28.6-34.6
</td>
<td class="border border-gray-300 p-1 text-center">
34.6-40.6
</td>
<td class="border border-gray-300 p-1 text-center">
40.6-46.5
</td>
<td class="border border-gray-300 p-1 text-center">
46.5-56.0
</td>
<td class="border border-gray-300 p-1 text-center">
56.0+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
30-39
</td>
<td class="border border-gray-300 p-1 text-center">
19.0-24.1
</td>
<td class="border border-gray-300 p-1 text-center">
24.1-28.2
</td>
<td class="border border-gray-300 p-1 text-center">
28.2-32.2
</td>
<td class="border border-gray-300 p-1 text-center">
32.2-35.7
</td>
<td class="border border-gray-300 p-1 text-center">
35.7-45.8
</td>
<td class="border border-gray-300 p-1 text-center">
45.8+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
40-49
</td>
<td class="border border-gray-300 p-1 text-center">
17.0-21.3
</td>
<td class="border border-gray-300 p-1 text-center">
21.3-24.9
</td>
<td class="border border-gray-300 p-1 text-center">
24.9-28.7
</td>
<td class="border border-gray-300 p-1 text-center">
28.7-34.0
</td>
<td class="border border-gray-300 p-1 text-center">
34.0-41.7
</td>
<td class="border border-gray-300 p-1 text-center">
41.7+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
50-59
</td>
<td class="border border-gray-300 p-1 text-center">
16.0-19.1
</td>
<td class="border border-gray-300 p-1 text-center">
19.1-24.4
</td>
<td class="border border-gray-300 p-1 text-center">
21.8-27.6
</td>
<td class="border border-gray-300 p-1 text-center">
25.2-28.6
</td>
<td class="border border-gray-300 p-1 text-center">
28.6-35.9
</td>
<td class="border border-gray-300 p-1 text-center">
35.9+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
60-69
</td>
<td class="border border-gray-300 p-1 text-center">
13.4-16.5
</td>
<td class="border border-gray-300 p-1 text-center">
16.5-18.9
</td>
<td class="border border-gray-300 p-1 text-center">
18.9-21.2
</td>
<td class="border border-gray-300 p-1 text-center">
21.2-24.6
</td>
<td class="border border-gray-300 p-1 text-center">
24.6-29.4
</td>
<td class="border border-gray-300 p-1 text-center">
29.4+
</td>
</tr>
</tbody>
</table>
</div>
</div> </div>
</div> </div>
</div>
</div>
+814
View File
@@ -0,0 +1,814 @@
<div class="w-full page bg-white">
<!-- Main Content -->
<div class="p-6">
<h1 class="text-3xl font-bold mb-6">Glossary</h1>
<!-- Resting Heart Rate Section -->
<div class="mb-8">
<h2 class="text-xl font-bold mb-4 text-center">
Resting Heart Rate
</h2>
<!-- Male Table -->
<div class="mb-4">
<table
class="w-full border-collapse border border-gray-300 text-xs"
>
<thead>
<tr class="bg-cyan-200">
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Age (M)
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Poor
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Below Average
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Average
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Above Average
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Good
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Excellent
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Athlete
</th>
</tr>
</thead>
<tbody>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
18-25
</td>
<td class="border border-gray-300 p-1 text-center">
85bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
76-84bpm
</td>
<td class="border border-gray-300 p-1 text-center">
74-78bpm
</td>
<td class="border border-gray-300 p-1 text-center">
70-73bpm
</td>
<td class="border border-gray-300 p-1 text-center">
66-69bpm
</td>
<td class="border border-gray-300 p-1 text-center">
61-65bpm
</td>
<td class="border border-gray-300 p-1 text-center">
60-60bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
26-35
</td>
<td class="border border-gray-300 p-1 text-center">
83bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
77-82bpm
</td>
<td class="border border-gray-300 p-1 text-center">
73-76bpm
</td>
<td class="border border-gray-300 p-1 text-center">
69-72bpm
</td>
<td class="border border-gray-300 p-1 text-center">
65-68bpm
</td>
<td class="border border-gray-300 p-1 text-center">
60-64bpm
</td>
<td class="border border-gray-300 p-1 text-center">
55-59bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
36-45
</td>
<td class="border border-gray-300 p-1 text-center">
85bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
79-84bpm
</td>
<td class="border border-gray-300 p-1 text-center">
74-78bpm
</td>
<td class="border border-gray-300 p-1 text-center">
70-73bpm
</td>
<td class="border border-gray-300 p-1 text-center">
65-69bpm
</td>
<td class="border border-gray-300 p-1 text-center">
60-64bpm
</td>
<td class="border border-gray-300 p-1 text-center">
55-59bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
46-55
</td>
<td class="border border-gray-300 p-1 text-center">
84bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
76-83bpm
</td>
<td class="border border-gray-300 p-1 text-center">
73-77bpm
</td>
<td class="border border-gray-300 p-1 text-center">
70-72bpm
</td>
<td class="border border-gray-300 p-1 text-center">
66-69bpm
</td>
<td class="border border-gray-300 p-1 text-center">
61-65bpm
</td>
<td class="border border-gray-300 p-1 text-center">
56-60bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
56-65
</td>
<td class="border border-gray-300 p-1 text-center">
85bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
78-84bpm
</td>
<td class="border border-gray-300 p-1 text-center">
74-77bpm
</td>
<td class="border border-gray-300 p-1 text-center">
70-73bpm
</td>
<td class="border border-gray-300 p-1 text-center">
65-69bpm
</td>
<td class="border border-gray-300 p-1 text-center">
60-64bpm
</td>
<td class="border border-gray-300 p-1 text-center">
50-59bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
65+
</td>
<td class="border border-gray-300 p-1 text-center">
84bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
77-83bpm
</td>
<td class="border border-gray-300 p-1 text-center">
73-76bpm
</td>
<td class="border border-gray-300 p-1 text-center">
70-73bpm
</td>
<td class="border border-gray-300 p-1 text-center">
65-69bpm
</td>
<td class="border border-gray-300 p-1 text-center">
60-64bpm
</td>
<td class="border border-gray-300 p-1 text-center">
55-59bpm
</td>
</tr>
</tbody>
</table>
</div>
<!-- Female Table -->
<div class="mb-4">
<table
class="w-full border-collapse border border-gray-300 text-xs"
>
<thead>
<tr class="bg-cyan-200">
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Age (F)
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Poor
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Below Average
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Average
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Above Average
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Good
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Excellent
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Athlete
</th>
</tr>
</thead>
<tbody>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
18-25
</td>
<td class="border border-gray-300 p-1 text-center">
81bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
74-81bpm
</td>
<td class="border border-gray-300 p-1 text-center">
73-78bpm
</td>
<td class="border border-gray-300 p-1 text-center">
66-69bpm
</td>
<td class="border border-gray-300 p-1 text-center">
62-65bpm
</td>
<td class="border border-gray-300 p-1 text-center">
56-61bpm
</td>
<td class="border border-gray-300 p-1 text-center">
50-55bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
26-35
</td>
<td class="border border-gray-300 p-1 text-center">
82bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
75-81bpm
</td>
<td class="border border-gray-300 p-1 text-center">
71-74bpm
</td>
<td class="border border-gray-300 p-1 text-center">
66-70bpm
</td>
<td class="border border-gray-300 p-1 text-center">
62-65bpm
</td>
<td class="border border-gray-300 p-1 text-center">
55-61bpm
</td>
<td class="border border-gray-300 p-1 text-center">
54-54bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
36-45
</td>
<td class="border border-gray-300 p-1 text-center">
83bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
76-82bpm
</td>
<td class="border border-gray-300 p-1 text-center">
71-75bpm
</td>
<td class="border border-gray-300 p-1 text-center">
67-70bpm
</td>
<td class="border border-gray-300 p-1 text-center">
63-66bpm
</td>
<td class="border border-gray-300 p-1 text-center">
57-62bpm
</td>
<td class="border border-gray-300 p-1 text-center">
47-56bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
46-55
</td>
<td class="border border-gray-300 p-1 text-center">
84bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
77-83bpm
</td>
<td class="border border-gray-300 p-1 text-center">
72-76bpm
</td>
<td class="border border-gray-300 p-1 text-center">
68-71bpm
</td>
<td class="border border-gray-300 p-1 text-center">
64-67bpm
</td>
<td class="border border-gray-300 p-1 text-center">
58-63bpm
</td>
<td class="border border-gray-300 p-1 text-center">
49-57bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
56-65
</td>
<td class="border border-gray-300 p-1 text-center">
82bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
76-81bpm
</td>
<td class="border border-gray-300 p-1 text-center">
72-75bpm
</td>
<td class="border border-gray-300 p-1 text-center">
68-71bpm
</td>
<td class="border border-gray-300 p-1 text-center">
62-67bpm
</td>
<td class="border border-gray-300 p-1 text-center">
57-61bpm
</td>
<td class="border border-gray-300 p-1 text-center">
51-56bpm
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
65+
</td>
<td class="border border-gray-300 p-1 text-center">
80bpm +
</td>
<td class="border border-gray-300 p-1 text-center">
74-79bpm
</td>
<td class="border border-gray-300 p-1 text-center">
70-73bpm
</td>
<td class="border border-gray-300 p-1 text-center">
66-69bpm
</td>
<td class="border border-gray-300 p-1 text-center">
62-65bpm
</td>
<td class="border border-gray-300 p-1 text-center">
56-61bpm
</td>
<td class="border border-gray-300 p-1 text-center">
52-55bpm
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- VO2 Master Chart Section -->
<div class="mb-4">
<h2 class="text-xl font-bold mb-4 text-center">
VO2 Master Chart
</h2>
<!-- Male VO2 Table -->
<div class="mb-4">
<table
class="w-full border-collapse border border-gray-300 text-xs"
>
<thead>
<tr class="bg-cyan-200">
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Age (M)
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Very Poor
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Poor
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Fair
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Good
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Excellent
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Superior
</th>
</tr>
</thead>
<tbody>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
20-29
</td>
<td class="border border-gray-300 p-1 text-center">
29.0-38.1
</td>
<td class="border border-gray-300 p-1 text-center">
38.1-44.9
</td>
<td class="border border-gray-300 p-1 text-center">
44.9-50.2
</td>
<td class="border border-gray-300 p-1 text-center">
50.2-61.8
</td>
<td class="border border-gray-300 p-1 text-center">
57.1-66.3
</td>
<td class="border border-gray-300 p-1 text-center">
66.3+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
30-39
</td>
<td class="border border-gray-300 p-1 text-center">
27.2-34.1
</td>
<td class="border border-gray-300 p-1 text-center">
34.1-39.6
</td>
<td class="border border-gray-300 p-1 text-center">
39.6-45.2
</td>
<td class="border border-gray-300 p-1 text-center">
45.2-51.6
</td>
<td class="border border-gray-300 p-1 text-center">
51.6-59.8
</td>
<td class="border border-gray-300 p-1 text-center">
59.8+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
40-49
</td>
<td class="border border-gray-300 p-1 text-center">
24.2-30.5
</td>
<td class="border border-gray-300 p-1 text-center">
30.5-35.7
</td>
<td class="border border-gray-300 p-1 text-center">
35.7-40.3
</td>
<td class="border border-gray-300 p-1 text-center">
40.3-46.7
</td>
<td class="border border-gray-300 p-1 text-center">
46.7-55.6
</td>
<td class="border border-gray-300 p-1 text-center">
55.6+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
50-59
</td>
<td class="border border-gray-300 p-1 text-center">
20.9-26.1
</td>
<td class="border border-gray-300 p-1 text-center">
26.1-30.7
</td>
<td class="border border-gray-300 p-1 text-center">
30.7-35.1
</td>
<td class="border border-gray-300 p-1 text-center">
35.1-41.2
</td>
<td class="border border-gray-300 p-1 text-center">
41.2-50.7
</td>
<td class="border border-gray-300 p-1 text-center">
50.7+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
60-69
</td>
<td class="border border-gray-300 p-1 text-center">
17.4-22.4
</td>
<td class="border border-gray-300 p-1 text-center">
22.4-26.6
</td>
<td class="border border-gray-300 p-1 text-center">
26.6-30.5
</td>
<td class="border border-gray-300 p-1 text-center">
30.5-36.1
</td>
<td class="border border-gray-300 p-1 text-center">
36.1-43.0
</td>
<td class="border border-gray-300 p-1 text-center">
43.0+
</td>
</tr>
</tbody>
</table>
</div>
<!-- Female VO2 Table -->
<div class="mb-4">
<table
class="w-full border-collapse border border-gray-300 text-xs"
>
<thead>
<tr class="bg-cyan-200">
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Age (F)
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Very Poor
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Poor
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Fair
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Good
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Excellent
</th>
<th
class="border border-gray-300 p-1 font-bold text-center"
>
Superior
</th>
</tr>
</thead>
<tbody>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
20-29
</td>
<td class="border border-gray-300 p-1 text-center">
21.7-28.6
</td>
<td class="border border-gray-300 p-1 text-center">
28.6-34.6
</td>
<td class="border border-gray-300 p-1 text-center">
34.6-40.6
</td>
<td class="border border-gray-300 p-1 text-center">
40.6-46.5
</td>
<td class="border border-gray-300 p-1 text-center">
46.5-56.0
</td>
<td class="border border-gray-300 p-1 text-center">
56.0+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
30-39
</td>
<td class="border border-gray-300 p-1 text-center">
19.0-24.1
</td>
<td class="border border-gray-300 p-1 text-center">
24.1-28.2
</td>
<td class="border border-gray-300 p-1 text-center">
28.2-32.2
</td>
<td class="border border-gray-300 p-1 text-center">
32.2-35.7
</td>
<td class="border border-gray-300 p-1 text-center">
35.7-45.8
</td>
<td class="border border-gray-300 p-1 text-center">
45.8+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
40-49
</td>
<td class="border border-gray-300 p-1 text-center">
17.0-21.3
</td>
<td class="border border-gray-300 p-1 text-center">
21.3-24.9
</td>
<td class="border border-gray-300 p-1 text-center">
24.9-28.7
</td>
<td class="border border-gray-300 p-1 text-center">
28.7-34.0
</td>
<td class="border border-gray-300 p-1 text-center">
34.0-41.7
</td>
<td class="border border-gray-300 p-1 text-center">
41.7+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
50-59
</td>
<td class="border border-gray-300 p-1 text-center">
16.0-19.1
</td>
<td class="border border-gray-300 p-1 text-center">
19.1-24.4
</td>
<td class="border border-gray-300 p-1 text-center">
21.8-27.6
</td>
<td class="border border-gray-300 p-1 text-center">
25.2-28.6
</td>
<td class="border border-gray-300 p-1 text-center">
28.6-35.9
</td>
<td class="border border-gray-300 p-1 text-center">
35.9+
</td>
</tr>
<tr>
<td
class="border border-gray-300 p-1 font-medium text-center"
>
60-69
</td>
<td class="border border-gray-300 p-1 text-center">
13.4-16.5
</td>
<td class="border border-gray-300 p-1 text-center">
16.5-18.9
</td>
<td class="border border-gray-300 p-1 text-center">
18.9-21.2
</td>
<td class="border border-gray-300 p-1 text-center">
21.2-24.6
</td>
<td class="border border-gray-300 p-1 text-center">
24.6-29.4
</td>
<td class="border border-gray-300 p-1 text-center">
29.4+
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
-515
View File
@@ -1,515 +0,0 @@
<div class="w-full page bg-white">
<!-- Main Content -->
<div class="px-8 py-6">
<!-- Page Title -->
<h1 class="text-3xl font-bold text-black mb-6">Fuelling Analysis</h1>
<!-- Flowchart Image -->
<div class="mb-8 flex justify-center">
<img
src="app/estimated_carb_storage.png"
alt="Fuelling Analysis Flowchart"
class="w-full max-w-4xl h-auto object-contain"
/>
</div>
<!-- Carbohydrate Storage Table -->
<div class="mb-8">
<h2 class="text-xl font-bold text-black mb-4 text-center">
Estimated Carbohydrate Storage by Weight and Sex in Athletes
</h2>
<div class="flex justify-center">
<table
class="table-auto border-collapse border border-gray-400 text-sm"
>
<thead>
<tr class="bg-gray-200">
<th
class="border border-gray-400 px-4 py-2 text-center"
>
Weight (kg)
</th>
<th
class="border border-gray-400 px-4 py-2 text-center"
>
Sex
</th>
<th
class="border border-gray-400 px-4 py-2 text-center"
>
Muscle Glycogen (g)
</th>
<th
class="border border-gray-400 px-4 py-2 text-center"
>
Liver Glycogen (g)
</th>
<th
class="border border-gray-400 px-4 py-2 text-center"
>
Blood Glucose (g)
</th>
<th
class="border border-gray-400 px-4 py-2 text-center"
>
Total Carb (g)
</th>
<th
class="border border-gray-400 px-4 py-2 text-center"
>
Total Carb (kcal)
</th>
</tr>
</thead>
<tbody>
<tr>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
50
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
male
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
292
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
105
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
402
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
1608
</td>
</tr>
<tr class="bg-gray-50">
<td
class="border border-gray-400 px-4 py-2 text-center"
>
50
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
female
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
228
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
85
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
317
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
1268
</td>
</tr>
<tr>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
60
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
male
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
351
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
105
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
460
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
1842
</td>
</tr>
<tr class="bg-gray-50">
<td
class="border border-gray-400 px-4 py-2 text-center"
>
60
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
female
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
273
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
85
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
362
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
1450
</td>
</tr>
<tr>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
70
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
male
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
410
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
105
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
519
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
2076
</td>
</tr>
<tr class="bg-gray-50">
<td
class="border border-gray-400 px-4 py-2 text-center"
>
70
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
female
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
318
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
85
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
408
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
1632
</td>
</tr>
<tr>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
80
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
male
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
468
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
105
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
578
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
2310
</td>
</tr>
<tr class="bg-gray-50">
<td
class="border border-gray-400 px-4 py-2 text-center"
>
80
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
female
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
364
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
85
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
454
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
1814
</td>
</tr>
<tr>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
90
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
male
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
526
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
105
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
636
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
2544
</td>
</tr>
<tr class="bg-gray-50">
<td
class="border border-gray-400 px-4 py-2 text-center"
>
90
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
female
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
409
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
85
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
499
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
1996
</td>
</tr>
<tr>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
100
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
male
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
585
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
105
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
694
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
2778
</td>
</tr>
<tr class="bg-gray-50">
<td
class="border border-gray-400 px-4 py-2 text-center"
>
100
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
female
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
455
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
85
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
4.5
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
544
</td>
<td
class="border border-gray-400 px-4 py-2 text-center"
>
2178
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
+29 -20
View File
@@ -1303,9 +1303,18 @@ class ContextGenerator:
"fat_metabolism_chart": graphs.get("fat_metabolism", ""), "fat_metabolism_chart": graphs.get("fat_metabolism", ""),
} }
# Page 10 - VO2 Pulse and VO2 Breath # Page 10 - Fuelling Analysis (new page with flowchart and carb storage table)
vo2_drop_metrics = self._calculate_vo2_drop_points(pnoe_metrics)
contexts["page_10"] = { contexts["page_10"] = {
"patient_name": self.patient_info["name"],
"page_number": 10,
"fuelling_analysis_flowchart": graphs.get(
"fuelling_analysis_flowchart", ""
),
}
# Page 11 - VO2 Pulse and VO2 Breath (previously page 10)
vo2_drop_metrics = self._calculate_vo2_drop_points(pnoe_metrics)
contexts["page_11"] = {
"vo2_pulse_chart": graphs.get("vo2_pulse", ""), "vo2_pulse_chart": graphs.get("vo2_pulse", ""),
"vo2_breath_chart": graphs.get("vo2_breath", ""), "vo2_breath_chart": graphs.get("vo2_breath", ""),
"vo2_pulse_drop_bpm": f"{vo2_drop_metrics['vo2_pulse_drop_bpm']} bpm", "vo2_pulse_drop_bpm": f"{vo2_drop_metrics['vo2_pulse_drop_bpm']} bpm",
@@ -1314,12 +1323,12 @@ class ContextGenerator:
"vo2_breath_drop_zone": vo2_drop_metrics["vo2_breath_drop_zone"], "vo2_breath_drop_zone": vo2_drop_metrics["vo2_breath_drop_zone"],
} }
# Page 11 - Fat Metabolism and Recovery # Page 12 - Fat Metabolism and Recovery (previously page 11)
fat_metabolism_metrics = self._calculate_fat_metabolism_metrics(pnoe_metrics) fat_metabolism_metrics = self._calculate_fat_metabolism_metrics(pnoe_metrics)
recovery_metrics = self._calculate_recovery_metrics() recovery_metrics = self._calculate_recovery_metrics()
resting_hr_metrics = self._calculate_resting_heart_rate_metrics() resting_hr_metrics = self._calculate_resting_heart_rate_metrics()
contexts["page_11"] = { contexts["page_12"] = {
"fat_metabolism_chart": graphs.get("fat_metabolism", ""), "fat_metabolism_chart": graphs.get("fat_metabolism", ""),
"recovery_chart": graphs.get("recovery", ""), "recovery_chart": graphs.get("recovery", ""),
**fat_metabolism_metrics, **fat_metabolism_metrics,
@@ -1328,7 +1337,7 @@ class ContextGenerator:
} }
if graph_generator: if graph_generator:
# Page 11 Resting Heart Rate Table # Page 12 Resting Heart Rate Table (previously page 11)
rhr_table_info = self._calculate_rhr_table_data( rhr_table_info = self._calculate_rhr_table_data(
self.patient_info["age"], self.patient_info["gender"] self.patient_info["age"], self.patient_info["gender"]
) )
@@ -1372,7 +1381,7 @@ class ContextGenerator:
] ]
] ]
contexts["page_11"]["rhr_table"] = ( contexts["page_12"]["rhr_table"] = (
graph_generator.generate_resting_heart_rate_table( graph_generator.generate_resting_heart_rate_table(
data=rhr_data, data=rhr_data,
columns=rhr_columns, columns=rhr_columns,
@@ -1382,10 +1391,10 @@ class ContextGenerator:
) )
) )
# Page 12 - Muscle Oxygenation # Page 13 - Muscle Oxygenation (previously page 12)
contexts["page_12"] = { contexts["page_13"] = {
"patient_name": self.patient_info["name"], "patient_name": self.patient_info["name"],
"page_number": 12, "page_number": 13,
} }
# Generate muscle oxygenation chart if data is available # Generate muscle oxygenation chart if data is available
@@ -1394,31 +1403,31 @@ class ContextGenerator:
chart_str, metrics = graph_generator.generate_muscle_oxygenation_chart( chart_str, metrics = graph_generator.generate_muscle_oxygenation_chart(
self.oxygenation_df, save_as_base64=True self.oxygenation_df, save_as_base64=True
) )
contexts["page_12"]["muscle_oxygenation_chart"] = chart_str contexts["page_13"]["muscle_oxygenation_chart"] = chart_str
contexts["page_12"].update(metrics) contexts["page_13"].update(metrics)
except Exception as e: except Exception as e:
print(f"Warning: Could not generate muscle oxygenation chart: {e}") print(f"Warning: Could not generate muscle oxygenation chart: {e}")
# Pages 13-17 # Pages 14-18 (previously 13-17)
for i in range(1, 6): for i in range(1, 6):
contexts[f"page_{i + 12}"] = { contexts[f"page_{i + 13}"] = {
"patient_name": self.patient_info["name"], "patient_name": self.patient_info["name"],
"page_number": i + 12, "page_number": i + 13,
} }
# Page 18 - Glossary with Body Fat Percentage Master Chart # Page 19 - Glossary with Body Fat Percentage Master Chart (previously page 18)
contexts["page_18"] = { contexts["page_19"] = {
"patient_name": self.patient_info["name"], "patient_name": self.patient_info["name"],
"page_number": 18, "page_number": 19,
"body_fat_percentage_chart": graphs.get( "body_fat_percentage_chart": graphs.get(
"body_fat_percentage_master_chart", "" "body_fat_percentage_master_chart", ""
), ),
} }
# Page 19 # Page 20 (previously page 19)
contexts["page_19"] = { contexts["page_20"] = {
"patient_name": self.patient_info["name"], "patient_name": self.patient_info["name"],
"page_number": 19, "page_number": 20,
} }
return contexts return contexts
+15
View File
@@ -428,6 +428,21 @@ class ReportGeneratorService:
) )
graphs_dict["body_fat_percentage_master_chart"] = "" graphs_dict["body_fat_percentage_master_chart"] = ""
# Load static fuelling analysis flowchart for page 10
flowchart_path = Path("app/estimated_carb_storage.png")
if flowchart_path.exists():
try:
with open(flowchart_path, "rb") as f:
graphs_dict["fuelling_analysis_flowchart"] = base64.b64encode(
f.read()
).decode("utf-8")
except Exception as e:
print(f"Warning: Could not load fuelling analysis flowchart: {e}")
graphs_dict["fuelling_analysis_flowchart"] = ""
else:
print(f"Warning: Fuelling analysis flowchart not found at {flowchart_path}")
graphs_dict["fuelling_analysis_flowchart"] = ""
# Generate spirometry chart # Generate spirometry chart
print("Step 4: Generating spirometry chart...") print("Step 4: Generating spirometry chart...")
try: try: