= 0 ? layout.itemX[lastShippingIndex
@@ -240,6 +300,15 @@ const initialShippingX = lastShippingIndex >= 0 ? layout.itemX[lastShippingIndex
/* ── Desktop route ──────────────────────────────────────────────── */
.rr-wrap { position: relative; }
+
+ /* Escape the parent .page max-width so the route can use the actual
+ viewport width. The headline, dispatch banner, section header, and
+ legend all stay centred at content width — only the route widens. */
+ .rr-fullbleed {
+ width: 100vw;
+ margin-left: calc(50% - 50vw);
+ margin-right: calc(50% - 50vw);
+ }
.rr-scroll {
/* overflow-x: auto + overflow-y: visible is the only thing that lets
hovered cards expand above/below the track without being clipped.
@@ -251,11 +320,13 @@ const initialShippingX = lastShippingIndex >= 0 ? layout.itemX[lastShippingIndex
scroll-snap-type: x mandatory;
scroll-behavior: smooth;
scrollbar-width: none;
- /* Top/bottom give cards room to grow above/below the track. The 60px
- sides give the first/last cards room when fully scrolled. */
- padding: 60px 60px 80px;
- scroll-padding-left: 60px;
- scroll-padding-right: 60px;
+ /* Top/bottom give cards room to grow above/below the track. The 80px
+ sides give the first/last cards room when fully scrolled inside
+ the now full-bleed container — small but visible breathing room
+ between the route and the absolute viewport edges. */
+ padding: 60px 80px 80px;
+ scroll-padding-left: 80px;
+ scroll-padding-right: 80px;
}
.rr-scroll::-webkit-scrollbar { display: none; }
.rr-scroll-inner { /* structural — keeps the track on its own layer */ }