{% include "strava/widgets/filter_pill.html" with btn_id="map-year-btn" options_id="map-year-options" icon="year" all_label="All Years" current=year options=year_options trigger_class="pill-btn" %}
{% include "strava/widgets/sport_filter.html" with btn_id="map-sport-btn" options_id="map-sport-options" groups_id="map-sport-groups" current=sport trigger_class="pill-btn sport-pill" %}
{% include "strava/widgets/filter_pill.html" with btn_id="map-gear-btn" options_id="map-gear-options" icon="gear" all_label="All Gear" current=gear options=gear_options trigger_class="pill-btn" %}
Distance
– km
{{ dist_ceils|json_script:"map-dist-ceils" }}
{% include "strava/hx/dashboard_map_note.html" %}
{% comment %}
Activity cards are fetched lazily when a marker is clicked (see map JS) rather than
server-rendered for every marker — rendering ~1000 hidden cards dominated page load.
{% endcomment %}
{% comment %}
Hidden mirror of the map's filter state. The map JS keeps these inputs in sync and
fires the `refresh` trigger, so a filter change recomputes every dependent section
server-side; the response arrives as out-of-band swaps absorbed by #dash-sink.
{% endcomment %}
{% comment %}
Centered overlay for an activity's card, opened from clickable widgets such as the
Personal Records rows. The card HTML is fetched lazily from ActivityCardView (same
endpoint the map uses) into .act-modal-host.
{% endcomment %}
{% include "strava/hx/dashboard_statband.html" %}
Achievements
Personal Records
{% include "strava/hx/dashboard_run_performance.html" %}
{% include "strava/hx/dashboard_aoty.html" %}
Latest Activities
{% include "strava/hx/dashboard_latest.html" %}
Training Overview
Activity Calendar
MTWTFSS
Trends
Gear Stats
Gear Health
{% include "strava/hx/dashboard_gear_body.html" %}