{% set stroke_width = 4 %} {% set margin = 2 %} {% macro path(data_points, vb_height) %} {% for value, position in data_points %} {% set x = (position * vb_width)+margin %} {% set y = (vb_height - value)+margin %} {% if loop.first %}M{{ x | int }} {{ y | int }}{% else %} L{{ x | int }} {{ y | int }}{% endif %} {% endfor %} {% endmacro %} {% macro path_best_fit(best_fit_points, vb_height) %} {% for value, position in best_fit_points %} {% set x = (position * vb_width)+margin %} {% set y = (vb_height - value)+margin %} {% if loop.first %}M{{ x | int }} {{ y | int }}{% else %} L{{ x | int }} {{ y | int }}{% endif %} {% endfor %} {% endmacro %} {% macro path_band(lower_points, upper_points, vb_height) %} {% if lower_points and upper_points %} M{% for value, position in lower_points %}{{ (((position * vb_width) + margin) | int) }} {{ (((vb_height - value) + margin) | int) }}{% if not loop.last %} L{% endif %}{% endfor %} {% for value, position in upper_points|reverse %} L{{ (((position * vb_width) + margin) | int) }} {{ (((vb_height - value) + margin) | int) }}{% endfor %} Z {% endif %} {% endmacro %} {% macro circles(data_points, color) %} {% for value, position in data_points %} {% set x = (position * vb_width)+margin %} {% set y = (vb_height - value)+margin %} {% endfor %} {% endmacro %} {% macro forecast_circles(data_points, labels, color) %} {% for value, position in data_points %} {% set x = (position * vb_width)+margin %} {% set y = (vb_height - value)+margin %} {% endfor %} {% endmacro %} {% macro plot_line(points, color) %} {{ circles(points, color) }} {% endmacro %} {% macro random_int() %}{% for n in [0,1,2,3,4,5] %}{{ [0,1,2,3,4,5,6,7,8,9]|random }}{% endfor %}{% endmacro %} {% set parts = [random_int()] %} {% set unique_id = parts|join('-') %}

{{ title }}

{% if best_fit_formula %} {{ best_fit_formula.kg_per_week }} kg/week, {{ best_fit_formula.kg_per_month }} kg/month {% endif %}

{% for epoch in epochs %}
{% if epoch == 'Custom' %} {% else %} {{ epoch}} {% endif %}
{% endfor %}
{% if forecast_enabled %}
{% if forecast.available %}
E1RM projection
{{ forecast.last_value }}kg now → {{ forecast.projected_value }}kg in {{ forecast.horizon_weeks }} weeks
{% if forecast.weekly_change >= 0 %}+{% endif %}{{ forecast.weekly_change }}kg/week
{{ forecast.confidence }} confidence · {{ forecast.observed_points }} sessions
{% if forecast.selected_top_set %}
Estimated top set
{{ forecast.selected_top_set.weight }}kg × {{ forecast.selected_top_set.repetitions }}
Likely range
{{ forecast.selected_top_set.lower_weight }}–{{ forecast.selected_top_set.upper_weight }}kg
Target reps {% for reps in forecast.target_reps %} {% endfor %}
Rounded to the nearest {{ forecast.target_weight_increment }}kg based on your recorded loads.
{% endif %}
Horizon {% for weeks in [4, 8, 12, 26] %} {% endfor %}
{% else %}
Forecast unavailable
{{ forecast.reason }}
{% endif %}
{% endif %} {% if selected_epoch == 'Custom' %}
{% endif %} {% if forecast_enabled and forecast.available %} {{ forecast_circles(forecast_points, forecast_labels, '#059669') }} {% endif %} {% for plot in plots %} {{ plot_line(plot.points, plot.color) }} {% endfor %} {% for pos, message in plot_labels %} {% set x = (pos * vb_width) - (stroke_width/2) + margin %} {% set y = 0 %} {% set width = stroke_width %} {% set height = vb_height + margin %} {% endfor %} {% if forecast_enabled and forecast.available %} {% for pos, message in forecast_labels %} {% set x = (pos * vb_width) - (stroke_width/2) + margin %} {% endfor %} {% endif %}
{% for plot in plots %}
{{ plot.label }}
{% endfor %} {% if forecast_enabled and forecast.available %}
Projected E1RM
{% endif %}