{% if section.direction == 'inbound' %} Return: {{ destination }} → {{ departure_station_name }} {% else %} Outbound: {{ departure_station_name }} → {{ destination }} {% endif %}

{{ section.date_display }}

{% if section.rows %} {% if section.direction == 'inbound' %} {% else %} {% endif %} {% set trip_rows = section.rows | selectattr('row_type', 'equalto', 'trip') | list %} {% if trip_rows %} {% set best_mins = trip_rows | map(attribute='total_minutes') | min %} {% set worst_mins = trip_rows | map(attribute='total_minutes') | max %} {% endif %} {% for row in section.rows %} {% if row.row_type == 'trip' and row.total_minutes <= best_mins + 5 and trip_rows | length > 1 %} {% set row_class = 'row-fast' %} {% elif row.row_type == 'trip' and row.total_minutes >= worst_mins - 5 and trip_rows | length > 1 %} {% set row_class = 'row-slow' %} {% elif row.row_type == 'unreachable' %} {% set row_class = 'row-unreachable' %} {% elif loop.index is odd %} {% set row_class = 'row-alt' %} {% else %} {% set row_class = '' %} {% endif %} {% if row.row_type == 'trip' %} {% if section.direction == 'inbound' %} {% else %} {% endif %} {% else %} {% endif %} {% endfor %}
Eurostar
{{ destination }} → St Pancras
Transfer
St Pancras → Paddington
National Rail
Paddington → {{ departure_station_name }}
National Rail
{{ departure_station_name }} → Paddington
Transfer
Paddington → St Pancras
Eurostar
St Pancras → {{ destination }}
Total
click row to select
(CET) {{ row.depart_destination }} → {{ row.arrive_st_pancras }} (UK)
check in by {{ row.check_in_by }} {% if row.eurostar_duration or row.train_number %}
{%- if row.eurostar_duration %}({{ row.eurostar_duration }}){% endif %} {%- if row.eurostar_duration and row.train_number %} · {% endif %} {%- if row.train_number %}{{ row.train_number }}{% endif %} {% endif %} Std{% if row.eurostar_price is not none %} £{{ "%.2f"|format(row.eurostar_price) }}{% endif %} SP{% if row.eurostar_plus_price is not none %} £{{ "%.2f"|format(row.eurostar_plus_price) }}{% endif %} then {{ row.connection_duration }} to station{% if row.connection_minutes < 45 %} ⚠️{% endif %}
{{ row.connection_duration }}{% if row.connection_minutes < 45 %} ⚠️{% endif %} {% if row.circle_services %} {% if row.circle_services | length > 1 %} {% set c_early = row.circle_services[0] %} {% set c = row.circle_services[1] %}
Circle {{ c_early.depart }} → PAD {{ c_early.arrive_pad }} · £{{ "%.2f"|format(c_early.fare) }}
next {{ c.depart }} → PAD {{ c.arrive_pad }} {% else %} {% set c = row.circle_services[0] %}
Circle {{ c.depart }} → PAD {{ c.arrive_pad }} · £{{ "%.2f"|format(c.fare) }} {% endif %} {% endif %}
{{ row.depart_paddington }} → {{ row.arrive_uk_station }} ({{ row.gwr_duration }}) {% if row.headcode or row.arrive_platform %}
{{ row.headcode }}{% if row.headcode and row.arrive_platform %} · {% endif %}{% if row.arrive_platform %}Plat {{ row.arrive_platform }}{% endif %} {% endif %} {% if row.ticket_price is not none %}£{{ "%.2f"|format(row.ticket_price) }}{% endif %}
{{ row.depart_bristol }} → {{ row.arrive_paddington }} ({{ row.gwr_duration }}) {% if row.headcode or row.arrive_platform %}
{{ row.headcode }}{% if row.headcode and row.arrive_platform %} · {% endif %}{% if row.arrive_platform %}Plat {{ row.arrive_platform }}{% endif %} {% endif %} {% if row.ticket_price is not none %}£{{ "%.2f"|format(row.ticket_price) }}{% endif %} then {{ row.connection_duration }} to Eurostar{% if row.connection_minutes < 80 %} ⚠️{% endif %}
{{ row.connection_duration }}{% if row.connection_minutes < 80 %} ⚠️{% endif %} {% if row.circle_services %} {% set c = row.circle_services[0] %}
Circle {{ c.depart }} → KX {{ c.arrive_kx }} · £{{ "%.2f"|format(c.fare) }} {% if row.circle_services | length > 1 %} {% set c2 = row.circle_services[1] %}
next {{ c2.depart }} → KX {{ c2.arrive_kx }} · £{{ "%.2f"|format(c2.fare) }} {% endif %} {% endif %}
{{ row.depart_st_pancras }} → {{ row.arrive_destination }} (CET) {% if row.eurostar_duration or row.train_number %}
{%- if row.eurostar_duration %}({{ row.eurostar_duration }}){% endif %} {%- if row.eurostar_duration and row.train_number %} · {% endif %} {%- if row.train_number %}{{ row.train_number }}{% endif %} {% endif %} Std{% if row.eurostar_price is not none %} £{{ "%.2f"|format(row.eurostar_price) }}{% endif %} SP{% if row.eurostar_plus_price is not none %} £{{ "%.2f"|format(row.eurostar_plus_price) }}{% endif %}
{% if row.total_minutes <= best_mins + 5 and trip_rows | length > 1 %} {{ row.total_duration }} ⚡ {% elif row.total_minutes >= worst_mins - 5 and trip_rows | length > 1 %} {{ row.total_duration }} 🐢 {% else %} {{ row.total_duration }} {% endif %}
Too early {% if section.direction == 'inbound' %} {{ row.depart_destination }} → {{ row.arrive_st_pancras }} {% if row.train_number %}
{{ row.train_number }}{% endif %} {% else %} {{ row.depart_st_pancras }} → {{ row.arrive_destination }} {% if row.train_number %}
{{ row.train_number }}{% endif %} {% endif %}
{% else %}

No valid journeys found.

{% if section.gwr_count == 0 and section.eurostar_count == 0 %} Could not retrieve train data. Check your network connection or try again. {% elif section.gwr_count == 0 %} No National Rail trains found for this date. {% elif section.eurostar_count == 0 %} No Eurostar services found for {{ destination }} on this date. {% else %} No National Rail + Eurostar combination has a {{ section.min_connection }}-{{ section.max_connection }} minute connection. {% endif %}

{% endif %}