- Add render_trip_element macro to macros.html; use it in trip_item for
the trip list page, giving a consistent one-line-per-element format
with emoji, route, times, duration, operator, distance, and CO₂
- Redesign trip_page.html itinerary: day headers use date-only (no year),
condense check-out to a single accent line, show time-only on transport
cards, humanise duration (Xh Ym), km-only distance, add CO₂ for all
transport modes, fix seat display for integer seat values
- Fix UndefinedError on /trip/past caused by absent 'arrive' key (Jinja2
Undefined is truthy) and date-only depart/arrive fields (no .date())
- Improve mobile map layout: text column before map in HTML order, reduce
mobile map heights, hide toggle button on mobile
- Add trips.css with design system (Playfair Display / Source Sans 3 /
JetBrains Mono, navy/gold/amber palette, card variants by type)
- Add tests/test_trip_list_render.py covering the rendering edge cases
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add case "bus" to get_locations() and bus route handling to
get_trip_routes() in trip.py. Coach stations now populate a dedicated
"coach_station" dict instead of the train station list. Add
"coach_station" (🚌) and "bus_stop" (🚏) emoji types to map.js.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>