{% 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, details, color) %} {% for value, position in data_points %} {% if loop.last %} {% set x = (position * vb_width)+margin %} {% set y = (vb_height - value)+margin %} {% endif %} {% 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 and not forecast_enabled %} {{ best_fit_formula.kg_per_week }} kg/week, {{ best_fit_formula.kg_per_month }} kg/month {% endif %}

History {% for epoch in epochs %} {% endfor %}
{% if forecast_enabled %}
{% if forecast.available %} {% set next = forecast.next_session %}
{{ 'Historical forecast' if forecast.stale else 'Likely next session' }}
{{ next.set_display }}
Around {{ next.date.strftime('%d %b %Y') }} · {{ next.value }} kg est. 1RM
{{ forecast.horizon_weeks }}-week scenario
{{ forecast.projected_value }} kg est. 1RM
By {{ forecast.end_date.strftime('%d %b %Y') }}
{% if forecast.profile.increment and forecast.profile.ceiling_evidence >= 2 %} Your pattern: build toward {{ forecast.profile.ceiling }} reps, then +{{ '%g'|format(forecast.profile.increment) }} kg. {% else %} Learning from your recent repeats, rep changes and load changes. {% endif %} {% if forecast.stale %}Based on an older training block; log new sessions to update.{% endif %}
Look ahead {% for weeks, label in forecast_horizons %} {% endfor %}
{% if forecast.long_range %}

Long-range scenario, assuming a similar routine. Exact sets and dates become less certain.

{% endif %} {% else %}
Learning your pattern

{{ forecast.reason }}

{% endif %}
{% endif %} {% if selected_epoch == 'Custom' %}
{% endif %} {% if forecast.available %}
Estimated 1RM · kg
{% endif %}
{% if forecast.available %}{% endif %} {% if forecast_enabled and forecast.available %} {{ forecast_circles(forecast_points, forecast_details, '#059669') }} {% endif %} {% for plot in plots %} {{ plot_line(plot.points, plot.color) }} {% endfor %} {% for detail in hover_details %} {{ detail.date }} · {{ detail.top_set }} · {{ detail.e1rm }} E1RM {% endfor %} {% if not forecast_enabled %} {% endif %}
{{ min_date.strftime('%d %b %Y') }}{{ (forecast.end_date if forecast.available else max_date).strftime('%d %b %Y') }}
{{ default_detail.kind }}
Top set{{ default_detail.top_set }}
Est. 1RM{{ default_detail.e1rm }}
E1RM scenario range{{ default_detail.range }}

Hover or tap to inspect · focus chart and use ← → for dates{% if forecast.available %} · shaded area: plausible scenarios{% endif %}

{% for plot in plots %}
{{ plot.label }}
{% endfor %} {% if forecast_enabled and forecast.available %}
Projected E1RM
{% endif %}