{"id":6973,"date":"2026-06-04T21:10:36","date_gmt":"2026-06-04T19:10:36","guid":{"rendered":"https:\/\/franceletour.com\/?page_id=6973"},"modified":"2026-06-10T08:14:15","modified_gmt":"2026-06-10T06:14:15","slug":"tour-de-france-2026-route","status":"publish","type":"page","link":"https:\/\/franceletour.com\/fr\/tour-de-france-2026-route\/","title":{"rendered":"Tour de France 2026 Route: Complete Stage-by-Stage Guide, Elevation Profiles &amp; Maps"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Tour de France 2026 Route: Complete Stage-by-Stage Guide, Elevation Profiles &amp; Maps<\/h1>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">Updated: July 10, 2026 \u00b7 21 Stages \u00b7 5 Mountain Ranges \u00b7 30 Major Climbs \u00b7 Barcelona \u2192 Paris<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is the complete Tour de France 2026 route guide, all 21 stages with confirmed elevation profiles, climb gradients, week-by-week breakdown, new climbs, summit finish profiles, spectator access guide, and road closure information. The route runs from Barcelona on July 4 to the Champs-\u00c9lys\u00e9es in Paris on July 26, crossing <a href=\"https:\/\/franceletour.com\/tour-de-france-2026-mountain-stages\/\">five mountain ranges<\/a>, the Pyrenees, Massif Central, Jura, Vosges, and Alps, across 3,333 km.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\" style=\"text-transform:uppercase\">Tour de France 2026 route Map<\/h2>\n\n\n<style>.kb-row-layout-id6973_5fdbc3-5c > .kt-row-column-wrap{align-content:start;}:where(.kb-row-layout-id6973_5fdbc3-5c > .kt-row-column-wrap) > .wp-block-kadence-column{justify-content:start;}.kb-row-layout-id6973_5fdbc3-5c > .kt-row-column-wrap{column-gap:var(--global-kb-gap-md, 2rem);row-gap:var(--global-kb-gap-md, 2rem);padding-top:var(--global-kb-spacing-sm, 1.5rem);padding-bottom:var(--global-kb-spacing-sm, 1.5rem);grid-template-columns:minmax(0, 1fr);}.kb-row-layout-id6973_5fdbc3-5c > .kt-row-layout-overlay{opacity:0.30;}@media all and (max-width: 1024px){.kb-row-layout-id6973_5fdbc3-5c > .kt-row-column-wrap{grid-template-columns:minmax(0, 1fr);}}@media all and (max-width: 767px){.kb-row-layout-id6973_5fdbc3-5c > .kt-row-column-wrap{grid-template-columns:minmax(0, 1fr);}}<\/style><div class=\"kb-row-layout-wrap kb-row-layout-id6973_5fdbc3-5c alignnone wp-block-kadence-rowlayout\"><div class=\"kt-row-column-wrap kt-has-1-columns kt-row-layout-equal kt-tab-layout-inherit kt-mobile-layout-row kt-row-valign-top\">\n<style>.kadence-column6973_986ffc-95 > .kt-inside-inner-col,.kadence-column6973_986ffc-95 > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-column6973_986ffc-95 > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-column6973_986ffc-95 > .kt-inside-inner-col{flex-direction:column;}.kadence-column6973_986ffc-95 > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-column6973_986ffc-95 > .kt-inside-inner-col:before{opacity:0.3;}.kadence-column6973_986ffc-95{position:relative;}@media all and (max-width: 1024px){.kadence-column6973_986ffc-95 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-column6973_986ffc-95 > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column kadence-column6973_986ffc-95\"><div class=\"kt-inside-inner-col\"><style>.kb-image6973_1fe181-25 .kb-image-has-overlay:after{opacity:0.3;}<\/style>\n<div class=\"wp-block-kadence-image kb-image6973_1fe181-25\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"834\" height=\"1024\" src=\"https:\/\/franceletour.com\/wp-content\/uploads\/2026\/06\/complete-tour-de-france-2026-route-map-834x1024.jpg\" alt=\"Complete Tour de France 2026 route map\" class=\"kb-img wp-image-7082\" title=\"\" srcset=\"https:\/\/franceletour.com\/wp-content\/uploads\/2026\/06\/complete-tour-de-france-2026-route-map-834x1024.jpg 834w, https:\/\/franceletour.com\/wp-content\/uploads\/2026\/06\/complete-tour-de-france-2026-route-map-244x300.jpg 244w, https:\/\/franceletour.com\/wp-content\/uploads\/2026\/06\/complete-tour-de-france-2026-route-map-768x943.jpg 768w, https:\/\/franceletour.com\/wp-content\/uploads\/2026\/06\/complete-tour-de-france-2026-route-map.jpg 1132w\" sizes=\"(max-width: 834px) 100vw, 834px\" \/><\/figure><\/div>\n<\/div><\/div>\n\n<\/div><\/div>\n\n\n<p class=\"wp-block-paragraph\">The 2026 route was revealed on October 23, 2025, at the Palais des Congr\u00e8s de Paris. Race director Christian Prudhomme presented it to an audience of approximately 3,500. The architecture is deliberate: the hardest opening week in modern Tour history, a single short time trial placed deep in week three, and back-to-back Alpe d&#8217;Huez summit finishes on consecutive days that have never been attempted in 113 editions of the race. There are <a href=\"https:\/\/franceletour.com\/tour-de-france-2026-mountain-stages\/\">30 major categorised climbs<\/a>, the same total as the highly regarded 2023 edition, 6 of them new to the Tour route, and the highest point at the Col du Galibier summit at 2,642 metres.<\/p>\n\n\n<style>.wp-block-kadence-spacer.kt-block-spacer-6973_58b24d-90 .kt-block-spacer{height:42px;}.wp-block-kadence-spacer.kt-block-spacer-6973_58b24d-90 .kt-divider{border-top-width:1px;height:1px;border-top-color:#eee;width:80%;border-top-style:solid;}<\/style>\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-6973_58b24d-90\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><hr class=\"kt-divider\"\/><\/div><\/div>\n\n\n\n<style>\n.route-tldr-wrap {\n  max-width: 960px;\n  margin: 2rem auto;\n  font-family: 'DM Sans', sans-serif;\n}\n\n.route-tldr-card {\n  background: #f6fbee;\n  border-radius: 20px;\n  border: 1px solid rgba(99,153,34,0.25);\n  overflow: hidden;\n}\n\n.route-tldr-header {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 1.2rem 1.5rem 0.9rem;\n  border-bottom: 1px solid rgba(99,153,34,0.15);\n}\n\n.route-tldr-title {\n  font-family: 'Galibier', sans-serif !important;\n  font-size: 1.2rem !important;\n  font-weight: 700 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 1.5px !important;\n  color: #111 !important;\n  margin: 0 !important;\n  line-height: 1.2 !important;\n  padding: 0 !important;\n  border: none !important;\n  flex: 1;\n}\n\n.route-tldr-badge {\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  background: #EAF3DE;\n  color: #27500A;\n  padding: 4px 10px;\n  border-radius: 12px;\n  border: 1px solid rgba(99,153,34,0.3);\n  white-space: nowrap;\n}\n\n.route-tldr-body {\n  padding: 1.2rem 1.5rem 1.5rem;\n  display: flex;\n  flex-direction: column;\n  gap: 1.2rem;\n}\n\n.route-section {\n  display: flex;\n  align-items: flex-start;\n  gap: 10px;\n}\n\n.route-section-icon {\n  width: 24px;\n  height: 24px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  color: #27500A;\n  margin-top: 2px;\n}\n\n.route-section-icon svg {\n  width: 18px;\n  height: 18px;\n  stroke: #27500A;\n}\n\n.route-section-content {\n  flex: 1;\n}\n\n.route-section-heading {\n  font-family: 'Galibier', sans-serif;\n  font-size: 0.8rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  color: #27500A;\n  margin: 0 0 3px 0;\n}\n\n.route-section-text {\n  font-size: 0.85rem;\n  color: #1a1a1a;\n  line-height: 1.6;\n  margin: 0;\n}\n\n.route-section-text strong {\n  font-weight: 600;\n  color: #000;\n}\n\n.route-highlight {\n  background: #FFC72C;\n  color: #000;\n  padding: 0 5px;\n  border-radius: 4px;\n  font-weight: 600;\n  font-size: 0.78rem;\n}\n\n@media (max-width: 600px) {\n  .route-tldr-body {\n    padding: 1rem 1.2rem 1.2rem;\n  }\n  .route-tldr-title {\n    font-size: 1.05rem !important;\n  }\n}\n<\/style>\n\n<div class=\"route-tldr-wrap\">\n  <div class=\"route-tldr-card\">\n    \n    <div class=\"route-tldr-header\">\n      <h3 class=\"route-tldr-title\">TL;DR \u2014 The 2026 Tour de France Route at a Glance<\/h3>\n      <span class=\"route-tldr-badge\">Route Summary<\/span>\n    <\/div>\n\n    <div class=\"route-tldr-body\">\n\n      <!-- Overall Route -->\n      <div class=\"route-section\">\n        <div class=\"route-section-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle>\n            <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"><\/line>\n            <path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"><\/path>\n          <\/svg>\n        <\/div>\n        <div class=\"route-section-content\">\n          <p class=\"route-section-heading\">Overall Route<\/p>\n          <p class=\"route-section-text\">\n            3,333 km \u00b7 54,450m total climbing \u00b7 21 stages \u00b7 7 French regions \u00b7 29 departments \u00b7 3 Catalan provinces \u00b7 Announced October 23, 2025.\n          <\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Five Mountain Ranges -->\n      <div class=\"route-section\">\n        <div class=\"route-section-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <polyline points=\"3 17 9 11 13 15 21 5\"><\/polyline>\n            <polyline points=\"15 5 21 5 21 11\"><\/polyline>\n          <\/svg>\n        <\/div>\n        <div class=\"route-section-content\">\n          <p class=\"route-section-heading\">Five Mountain Ranges<\/p>\n          <p class=\"route-section-text\">\n            <strong>Pyrenees<\/strong> (Stages 3 + 6) \u2192 <strong>Massif Central<\/strong> (Stages 9 + 10) \u2192 <strong>Jura<\/strong> (Stage 13) \u2192 <strong>Vosges<\/strong> (Stage 14) \u2192 <strong>Alps<\/strong> (Stages 15, 18, 19, 20).\n          <\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Barcelona Grand D\u00e9part -->\n      <div class=\"route-section\">\n        <div class=\"route-section-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"><\/path>\n            <circle cx=\"12\" cy=\"10\" r=\"3\"><\/circle>\n          <\/svg>\n        <\/div>\n        <div class=\"route-section-content\">\n          <p class=\"route-section-heading\">Barcelona Grand D\u00e9part<\/p>\n          <p class=\"route-section-text\">\n            Stage 1 TTT (19.7km) \u2014 first stage\u20111 team time trial since 1971. Stages 1 + 2 both finish in Barcelona \u2014 a historic first. Stage 3 crosses into France via the Pyrenees.\n          <\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Six New Climbs -->\n      <div class=\"route-section\">\n        <div class=\"route-section-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"><\/path>\n          <\/svg>\n        <\/div>\n        <div class=\"route-section-content\">\n          <p class=\"route-section-heading\">Six New Climbs<\/p>\n          <p class=\"route-section-text\">\n            C\u00f4te de Begues (S2), Mont\u00e9e de Gavarnie\u2011G\u00e8dre summit finish (S6), Col de la Griffoul (S10), Col du Page + Col du Haag (S14), Plateau de Solaison summit finish (S15), Col de Sarenne south\u2011eastern flank (S20).\n          <\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Five Summit Finishes -->\n      <div class=\"route-section\">\n        <div class=\"route-section-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"><\/path>\n          <\/svg>\n        <\/div>\n        <div class=\"route-section-content\">\n          <p class=\"route-section-heading\">Five Summit Finishes<\/p>\n          <p class=\"route-section-text\">\n            Gavarnie\u2011G\u00e8dre (S6) \u00b7 Le Lioran \/ Puy Mary (S10) \u00b7 Plateau de Solaison (S15) \u00b7 Orci\u00e8res\u2011Merlette (S18) \u00b7 Alpe d\u2019Huez \u00d72 (S19 + S20). <br><strong>First back\u2011to\u2011back Alpe d\u2019Huez finishes in Grand Tour history.<\/strong>\n          <\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Highest Point -->\n      <div class=\"route-section\">\n        <div class=\"route-section-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <polyline points=\"3 17 9 11 13 15 21 5\"><\/polyline>\n            <polyline points=\"15 5 21 5 21 11\"><\/polyline>\n          <\/svg>\n        <\/div>\n        <div class=\"route-section-content\">\n          <p class=\"route-section-heading\">Highest Point<\/p>\n          <p class=\"route-section-text\">\n            <strong>Col du Galibier<\/strong>, 2,642m (Stage 20). Also: Col du Tourmalet 2,115m (Stage 6), Col du Glandon 1,924m (Stage 19).\n          <\/p>\n        <\/div>\n      <\/div>\n\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<style>\n.quick-facts-wrap {\n  max-width: 960px;\n  margin: 2rem auto;\n  font-family: 'DM Sans', sans-serif;\n}\n\n.quick-facts-card {\n  background: #f6fbee;\n  border-radius: 20px;\n  border: 1px solid rgba(99,153,34,0.25);\n  overflow: hidden;\n}\n\n.quick-facts-header {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 1.2rem 1.5rem 0.9rem;\n  border-bottom: 1px solid rgba(99,153,34,0.15);\n}\n\n.quick-facts-title {\n  font-family: 'Galibier', sans-serif !important;\n  font-size: 1.2rem !important;\n  font-weight: 700 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 1.5px !important;\n  color: #111 !important;\n  margin: 0 !important;\n  line-height: 1.2 !important;\n  padding: 0 !important;\n  border: none !important;\n  flex: 1;\n}\n\n.quick-facts-badge {\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  background: #EAF3DE;\n  color: #27500A;\n  padding: 4px 10px;\n  border-radius: 12px;\n  border: 1px solid rgba(99,153,34,0.3);\n  white-space: nowrap;\n}\n\n.quick-facts-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 0;\n  padding: 1.2rem 1.5rem 0;\n}\n\n.quick-fact-item {\n  display: flex;\n  align-items: flex-start;\n  gap: 10px;\n  padding: 0.7rem 0.9rem;\n  border-bottom: 1px solid rgba(99,153,34,0.1);\n}\n\n.quick-fact-icon {\n  width: 20px;\n  height: 20px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  color: #27500A;\n  margin-top: 2px;\n}\n\n.quick-fact-icon svg {\n  width: 16px;\n  height: 16px;\n  stroke: #27500A;\n}\n\n.quick-fact-content {\n  flex: 1;\n  min-width: 0;\n}\n\n.quick-fact-label {\n  font-family: 'Galibier', sans-serif;\n  font-size: 0.68rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.6px;\n  color: #27500A;\n  margin: 0 0 3px 0;\n}\n\n.quick-fact-value {\n  font-size: 0.85rem;\n  color: #1a1a1a;\n  line-height: 1.5;\n  margin: 0;\n}\n\n.quick-fact-value strong {\n  font-weight: 600;\n  color: #000;\n}\n\n\/* New Climbs summary strip *\/\n.quick-facts-note {\n  padding: 0.9rem 1.5rem;\n  border-top: 1px solid rgba(99,153,34,0.15);\n  background: rgba(255,255,255,0.4);\n  font-size: 0.85rem;\n  color: #1a1a1a;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n}\n\n.quick-facts-note strong {\n  font-family: 'Galibier', sans-serif;\n  color: #000;\n}\n\n\/* Responsive: single column *\/\n@media (max-width: 600px) {\n  .quick-facts-grid {\n    grid-template-columns: 1fr;\n    padding: 1rem 1.2rem 0;\n  }\n  .quick-fact-item {\n    padding: 0.65rem 0.7rem;\n  }\n  .quick-facts-note {\n    padding: 0.8rem 1.2rem;\n  }\n}\n<\/style>\n\n<div class=\"quick-facts-wrap\">\n  <div class=\"quick-facts-card\">\n    \n    <div class=\"quick-facts-header\">\n      <h3 class=\"quick-facts-title\">Quick Facts<\/h3>\n      <span class=\"quick-facts-badge\">2026 Route<\/span>\n    <\/div>\n\n    <div class=\"quick-facts-grid\">\n\n      <!-- 1. Total Distance + Mountain Ranges -->\n      <div class=\"quick-fact-item\">\n        <div class=\"quick-fact-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"\/>\n            <path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"\/>\n          <\/svg>\n        <\/div>\n        <div class=\"quick-fact-content\">\n          <p class=\"quick-fact-label\">Total Distance<\/p>\n          <p class=\"quick-fact-value\">3,333 km (2,071 mi)<\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"quick-fact-item\">\n        <div class=\"quick-fact-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <polyline points=\"3 17 9 11 13 15 21 5\"\/><polyline points=\"15 5 21 5 21 11\"\/>\n          <\/svg>\n        <\/div>\n        <div class=\"quick-fact-content\">\n          <p class=\"quick-fact-label\">Mountain Ranges<\/p>\n          <p class=\"quick-fact-value\">5 \u2014 Pyrenees, Massif Central, Jura, Vosges, Alps<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- 2. Total Climbing + Highest Point -->\n      <div class=\"quick-fact-item\">\n        <div class=\"quick-fact-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <polyline points=\"3 17 9 11 13 15 21 5\"\/>\n          <\/svg>\n        <\/div>\n        <div class=\"quick-fact-content\">\n          <p class=\"quick-fact-label\">Total Climbing<\/p>\n          <p class=\"quick-fact-value\">54,450 m elevation gain<\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"quick-fact-item\">\n        <div class=\"quick-fact-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"\/>\n          <\/svg>\n        <\/div>\n        <div class=\"quick-fact-content\">\n          <p class=\"quick-fact-label\">Highest Point<\/p>\n          <p class=\"quick-fact-value\">Col du Galibier, 2,642 m<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- 3. Stage Count + French Regions -->\n      <div class=\"quick-fact-item\">\n        <div class=\"quick-fact-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"\/><line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"\/><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"\/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"\/>\n          <\/svg>\n        <\/div>\n        <div class=\"quick-fact-content\">\n          <p class=\"quick-fact-label\">Stage Count<\/p>\n          <p class=\"quick-fact-value\">21 (7 flat, 4 hilly, 8 mountain)<\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"quick-fact-item\">\n        <div class=\"quick-fact-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"\/>\n            <path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"\/>\n          <\/svg>\n        <\/div>\n        <div class=\"quick-fact-content\">\n          <p class=\"quick-fact-label\">French Regions<\/p>\n          <p class=\"quick-fact-value\">7 regions + 3 Catalan provinces<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- 4. Summit Finishes + Departments -->\n      <div class=\"quick-fact-item\">\n        <div class=\"quick-fact-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"\/>\n          <\/svg>\n        <\/div>\n        <div class=\"quick-fact-content\">\n          <p class=\"quick-fact-label\">Summit Finishes<\/p>\n          <p class=\"quick-fact-value\">5 (incl. Alpe d\u2019Huez \u00d72)<\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"quick-fact-item\">\n        <div class=\"quick-fact-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/>\n          <\/svg>\n        <\/div>\n        <div class=\"quick-fact-content\">\n          <p class=\"quick-fact-label\">Departments<\/p>\n          <p class=\"quick-fact-value\">29 French departments<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- 5. Total Major Climbs + Route Announced -->\n      <div class=\"quick-fact-item\">\n        <div class=\"quick-fact-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <polyline points=\"3 17 9 11 13 15 21 5\"\/><polyline points=\"15 5 21 5 21 11\"\/>\n          <\/svg>\n        <\/div>\n        <div class=\"quick-fact-content\">\n          <p class=\"quick-fact-label\">Total Major Climbs<\/p>\n          <p class=\"quick-fact-value\">30 categorised climbs<\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"quick-fact-item\">\n        <div class=\"quick-fact-icon\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"\/><line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"\/><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"\/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"\/>\n          <\/svg>\n        <\/div>\n        <div class=\"quick-fact-content\">\n          <p class=\"quick-fact-label\">Route Announced<\/p>\n          <p class=\"quick-fact-value\">October 23, 2025, Paris<\/p>\n        <\/div>\n      <\/div>\n\n    <\/div>\n\n    <!-- NEW CLIMBS summary line -->\n    <div class=\"quick-facts-note\">\n      <strong>NEW CLIMBS<\/strong> \u2014 6 brand new climbs, first time appearance in Tour de France\n    <\/div>\n\n  <\/div>\n<\/div>\n\n\n<style>.wp-block-kadence-spacer.kt-block-spacer-6973_31b247-8e .kt-block-spacer{height:38px;}.wp-block-kadence-spacer.kt-block-spacer-6973_31b247-8e .kt-divider{border-top-width:1px;height:1px;border-top-color:#eee;width:80%;border-top-style:solid;}<\/style>\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-6973_31b247-8e\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><hr class=\"kt-divider\"\/><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-transform:uppercase\">Tour de France 2026 Route Overview \u2014 Regions, Departments &amp; Map<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Tour de France 2026 route was designed to feel like a Grand Tour in the original sense: a race that physically crosses France rather than concentrating its stages in one or two regions. Starting on foreign soil in Catalonia, it sweeps across the southwest via the Pyrenees, cuts through the volcanic plateau of the Massif Central, rolls through Burgundy wine country, climbs the forested granite peaks of the Vosges, drops into the Jura, then finishes with a brutal Alpine week before the Paris finale.<\/p>\n\n\n\n<style>\n.city-timeline-wrap {\n  max-width: 960px;\n  margin: 2rem auto;\n  font-family: 'DM Sans', sans-serif;\n}\n\n.city-timeline-card {\n  background: #F8F8F6;\n  border-radius: 20px;\n  border: 1px solid rgba(99,153,34,0.25);\n  overflow: hidden;\n}\n\n.city-timeline-header {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 1.2rem 1.5rem 0.9rem;\n  border-bottom: 1px solid rgba(99,153,34,0.15);\n}\n\n.city-timeline-title {\n  font-family: 'Galibier', sans-serif !important;\n  font-size: 1.2rem !important;\n  font-weight: 700 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 1.5px !important;\n  color: #111 !important;\n  margin: 0 !important;\n  line-height: 1.2 !important;\n  padding: 0 !important;\n  border: none !important;\n  flex: 1;\n}\n\n.city-timeline-badge {\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  background: #EFEEEB;\n  color: #111;\n  padding: 4px 10px;\n  border-radius: 12px;\n  border: 1px solid rgba(99,153,34,0.3);\n  white-space: nowrap;\n}\n\n.city-timeline-body {\n  padding: 0.5rem 0 0 0;\n}\n\n\/* Week section *\/\n.week-group {\n  border-bottom: 1px solid rgba(99,153,34,0.08);\n}\n\n.week-group:last-child {\n  border-bottom: none;\n}\n\n.week-heading {\n  padding: 0.9rem 1.5rem 0.5rem;\n  font-family: 'Galibier', sans-serif;\n  font-size: 0.75rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  color: #111;\n  border-bottom: 1px dashed rgba(99,153,34,0.2);\n  margin: 0;\n}\n\n\/* Timeline row *\/\n.timeline-row {\n  display: flex;\n  align-items: flex-start;\n  padding: 0.5rem 1.5rem 0.5rem 0;\n  position: relative;\n}\n\n.timeline-line-col {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  width: 40px;\n  flex-shrink: 0;\n  position: relative;\n}\n\n.timeline-dot {\n  width: 12px;\n  height: 12px;\n  border-radius: 50%;\n  flex-shrink: 0;\n  z-index: 1;\n  position: relative;\n  background: #ccc;\n  margin-top: 8px;\n}\n\n\/* Terrain dot colours *\/\n.timeline-dot.flat     { background: #a5d6a7; }\n.timeline-dot.hilly    { background: #ffe082; }\n.timeline-dot.mountain { background: #ef9a9a; }\n.timeline-dot.summit   { background: #f48fb1; }\n.timeline-dot.itt      { background: #b39ddb; }\n.timeline-dot.ttt      { background: #90caf9; }\n.timeline-dot.queen    { background: #ffc107; box-shadow: 0 0 0 2px #ffc10733; }\n.timeline-dot.rest     { background: #e0e0e0; }\n.timeline-dot.finale   { background: #a5d6a7; }\n\n.timeline-line {\n  width: 2px;\n  background: rgba(99,153,34,0.2);\n  flex: 1;\n  min-height: 10px;\n  margin-top: 2px;\n}\n\n\/* Rest day entry *\/\n.timeline-row.rest .timeline-dot {\n  width: 8px;\n  height: 8px;\n  margin-top: 10px;\n}\n\n.timeline-content {\n  flex: 1;\n  min-width: 0;\n  padding-left: 12px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 12px;\n  flex-wrap: wrap;\n}\n\n.timeline-route {\n  font-size: 0.88rem;\n  color: #111;\n  font-weight: 600;\n  line-height: 1.4;\n}\n\n.timeline-route strong {\n  color: #000;\n}\n\n.timeline-type {\n  display: flex;\n  align-items: center;\n  gap: 4px;\n  font-size: 0.72rem;\n  font-weight: 500;\n  color: #555;\n  white-space: nowrap;\n}\n\n.timeline-type-icon {\n  width: 18px;\n  height: 18px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n}\n\n.timeline-type-icon svg {\n  width: 14px;\n  height: 14px;\n  stroke: #555;\n}\n\n\/* Rest day special *\/\n.timeline-row.rest .timeline-route {\n  font-size: 0.8rem;\n  font-weight: 500;\n  color: #aaa;\n  font-style: italic;\n  letter-spacing: 0.3px;\n}\n\n\/* Responsive *\/\n@media (max-width: 600px) {\n  .timeline-content {\n    flex-direction: column;\n    align-items: flex-start;\n    gap: 4px;\n  }\n  .timeline-type {\n    font-size: 0.65rem;\n  }\n  .timeline-route {\n    font-size: 0.82rem;\n  }\n}\n<\/style>\n\n<div class=\"city-timeline-wrap\">\n  <div class=\"city-timeline-card\">\n    \n    <div class=\"city-timeline-header\">\n      <h3 class=\"city-timeline-title\">Where the Route Goes \u2014 City by City<\/h3>\n      <span class=\"city-timeline-badge\">Full Route<\/span>\n    <\/div>\n\n    <div class=\"city-timeline-body\">\n\n      <!-- WEEK 1 -->\n      <div class=\"week-group\">\n        <p class=\"week-heading\">Week 1 \u2014 Spain &amp; Pyrenees<\/p>\n\n        <!-- S1 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot ttt\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Barcelona \u2192 Barcelona<\/strong> (19.7 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"><\/path><circle cx=\"9\" cy=\"7\" r=\"4\"><\/circle><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"><\/path><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"><\/path><\/svg><\/span> TTT\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S2 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot hilly\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Tarragona \u2192 Barcelona<\/strong> (182 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M3 17l6-6 4 4 8-8\"><\/path><circle cx=\"19\" cy=\"5\" r=\"1\"><\/circle><\/svg><\/span> Hilly\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S3 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot mountain\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Granollers \u2192 Les Angles<\/strong> (196 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"3 17 9 11 13 15 21 5\"><\/polyline><polyline points=\"15 5 21 5 21 11\"><\/polyline><\/svg><\/span> Mountain\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S4 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot hilly\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Carcassonne \u2192 Foix<\/strong> (182 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M3 17l6-6 4 4 8-8\"><\/path><circle cx=\"19\" cy=\"5\" r=\"1\"><\/circle><\/svg><\/span> Hilly\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S5 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot flat\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Lannemezan \u2192 Pau<\/strong> (158 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"><\/line><polyline points=\"7 8 3 12 7 16\"><\/polyline><\/svg><\/span> Flat\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S6 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot summit\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Pau \u2192 Gavarnie-G\u00e8dre<\/strong> (186 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"><\/path><\/svg><\/span> Summit \u2b50\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S7 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot flat\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Hagetmau \u2192 Bordeaux<\/strong> (175 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"><\/line><polyline points=\"7 8 3 12 7 16\"><\/polyline><\/svg><\/span> Flat\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S8 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot flat\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>P\u00e9rigueux \u2192 Bergerac<\/strong> (182 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"><\/line><polyline points=\"7 8 3 12 7 16\"><\/polyline><\/svg><\/span> Flat\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S9 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot hilly\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Malemort \u2192 Ussel<\/strong> (185 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M3 17l6-6 4 4 8-8\"><\/path><circle cx=\"19\" cy=\"5\" r=\"1\"><\/circle><\/svg><\/span> Hilly\n            <\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- REST DAY 1 -->\n      <div class=\"week-group\">\n        <p class=\"week-heading\">Rest Day<\/p>\n        <div class=\"timeline-row rest\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot rest\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\">REST DAY 1 \u2014 Cantal (July 13)<\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- WEEK 2 -->\n      <div class=\"week-group\">\n        <p class=\"week-heading\">Week 2 \u2014 Massif Central &amp; Jura<\/p>\n\n        <!-- S10 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot summit\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Aurillac \u2192 Le Lioran<\/strong> (167 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"><\/path><\/svg><\/span> Summit \u2b50\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S11 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot flat\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Vichy \u2192 Nevers<\/strong> (161 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"><\/line><polyline points=\"7 8 3 12 7 16\"><\/polyline><\/svg><\/span> Flat\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S12 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot flat\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Magny-Cours \u2192 Chalon-sur-Sa\u00f4ne<\/strong> (181 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"><\/line><polyline points=\"7 8 3 12 7 16\"><\/polyline><\/svg><\/span> Flat\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S13 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot hilly\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Dole \u2192 Belfort<\/strong> (205 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M3 17l6-6 4 4 8-8\"><\/path><circle cx=\"19\" cy=\"5\" r=\"1\"><\/circle><\/svg><\/span> Hilly\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S14 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot mountain\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Mulhouse \u2192 Le Markstein<\/strong> (155 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"3 17 9 11 13 15 21 5\"><\/polyline><polyline points=\"15 5 21 5 21 11\"><\/polyline><\/svg><\/span> Mountain\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S15 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot summit\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Champagnole \u2192 Plateau de Solaison<\/strong> (184 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"><\/path><\/svg><\/span> Summit \u2b50\n            <\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- REST DAY 2 -->\n      <div class=\"week-group\">\n        <p class=\"week-heading\">Rest Day<\/p>\n        <div class=\"timeline-row rest\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot rest\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\">REST DAY 2 \u2014 Haute-Savoie (July 20)<\/span>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- WEEK 3 -->\n      <div class=\"week-group\">\n        <p class=\"week-heading\">Week 3 \u2014 Alps &amp; Paris<\/p>\n\n        <!-- S16 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot itt\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>\u00c9vian \u2192 Thonon-les-Bains<\/strong> (26 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><polyline points=\"12 6 12 12 16 14\"><\/polyline><\/svg><\/span> ITT\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S17 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot flat\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Chamb\u00e9ry \u2192 Voiron<\/strong> (175 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"><\/line><polyline points=\"7 8 3 12 7 16\"><\/polyline><\/svg><\/span> Flat\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S18 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot summit\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Voiron \u2192 Orci\u00e8res-Merlette<\/strong> (185 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"><\/path><\/svg><\/span> Summit \u2b50\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S19 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot summit\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Gap \u2192 Alpe d\u2019Huez<\/strong> (128 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"><\/path><\/svg><\/span> Summit \u2b50\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S20 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot queen\"><\/div>\n            <div class=\"timeline-line\"><\/div>\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Le Bourg-d\u2019Oisans \u2192 Alpe d\u2019Huez<\/strong> (171 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M2 4l3 12h14l3-12-6 5-4-5-4 5-6-5z\"><\/path><\/svg><\/span> QUEEN \u2b50\u2b50\n            <\/span>\n          <\/div>\n        <\/div>\n\n        <!-- S21 -->\n        <div class=\"timeline-row\">\n          <div class=\"timeline-line-col\">\n            <div class=\"timeline-dot finale\"><\/div>\n            <!-- no line after last dot -->\n          <\/div>\n          <div class=\"timeline-content\">\n            <span class=\"timeline-route\"><strong>Thoiry \u2192 Paris Champs-\u00c9lys\u00e9es<\/strong> (130 km)<\/span>\n            <span class=\"timeline-type\">\n              <span class=\"timeline-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"><\/line><polyline points=\"7 8 3 12 7 16\"><\/polyline><\/svg><\/span> Flat \/ Finale\n            <\/span>\n          <\/div>\n        <\/div>\n\n      <\/div>\n\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<style>\n.regions-wrap {\n  max-width: 960px;\n  margin: 2rem auto;\n  font-family: 'DM Sans', sans-serif;\n}\n\n.regions-card {\n  background: #F8F8F6;\n  border-radius: 20px;\n  border: 1px solid rgba(99,153,34,0.25);\n  overflow: hidden;\n}\n\n.regions-header {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 1.2rem 1.5rem 0.9rem;\n  border-bottom: 1px solid rgba(99,153,34,0.15);\n}\n\n.regions-title {\n  font-family: 'Galibier', sans-serif !important;\n  font-size: 1.2rem !important;\n  font-weight: 700 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 1.5px !important;\n  color: #111 !important;\n  margin: 0 !important;\n  line-height: 1.2 !important;\n  padding: 0 !important;\n  border: none !important;\n  flex: 1;\n}\n\n.regions-badge {\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  background: #EAF3DE;\n  color: #27500A;\n  padding: 4px 10px;\n  border-radius: 12px;\n  border: 1px solid rgba(99,153,34,0.3);\n  white-space: nowrap;\n}\n\n.regions-body {\n  padding: 0.8rem 1.5rem 1.5rem;\n}\n\n.region-item {\n  display: flex;\n  align-items: flex-start;\n  gap: 12px;\n  padding: 0.75rem 0;\n  border-bottom: 1px solid rgba(99,153,34,0.1);\n}\n\n.region-item:last-child {\n  border-bottom: none;\n}\n\n.region-marker {\n  width: 10px;\n  height: 10px;\n  border-radius: 50%;\n  flex-shrink: 0;\n  margin-top: 6px;\n}\n\n\/* Distinct but harmonious colours for the dots *\/\n.region-marker.catalonia        { background: #FFC72C; } \/* yellow *\/\n.region-marker.occitanie        { background: #f48fb1; } \/* pink *\/\n.region-marker.nouvelle         { background: #a5d6a7; } \/* light green *\/\n.region-marker.auvergne         { background: #90caf9; } \/* light blue *\/\n.region-marker.bourgogne        { background: #ffe082; } \/* gold *\/\n.region-marker.grandest         { background: #b39ddb; } \/* lilac *\/\n.region-marker.iledefrance      { background: #ef9a9a; } \/* soft red *\/\n\n.region-content {\n  flex: 1;\n  min-width: 0;\n}\n\n.region-name {\n  font-family: 'Galibier', sans-serif;\n  font-size: 0.85rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  color: #27500A;\n  margin: 0 0 4px 0;\n}\n\n.region-details {\n  font-size: 0.85rem;\n  color: #1a1a1a;\n  line-height: 1.6;\n  margin: 0;\n}\n\n.region-details strong {\n  font-weight: 600;\n  color: #000;\n}\n\n\/* Responsive *\/\n@media (max-width: 600px) {\n  .regions-body {\n    padding: 0.6rem 1.2rem 1.2rem;\n  }\n  .region-item {\n    padding: 0.65rem 0;\n    gap: 10px;\n  }\n}\n<\/style>\n\n<div class=\"regions-wrap\">\n  <div class=\"regions-card\">\n    \n    <div class=\"regions-header\">\n      <h3 class=\"regions-title\">French Regions Crossed \u2014 In Route Order<\/h3>\n      <span class=\"regions-badge\">7 Regions<\/span>\n    <\/div>\n\n    <div class=\"regions-body\">\n\n      <!-- Catalonia (Spain) -->\n      <div class=\"region-item\">\n        <div class=\"region-marker catalonia\"><\/div>\n        <div class=\"region-content\">\n          <p class=\"region-name\">Catalonia (Spain)<\/p>\n          <p class=\"region-details\"><strong>Barcelona, Tarragona, Granollers<\/strong> \u2014 Stages 1\u20133<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Occitanie -->\n      <div class=\"region-item\">\n        <div class=\"region-marker occitanie\"><\/div>\n        <div class=\"region-content\">\n          <p class=\"region-name\">Occitanie<\/p>\n          <p class=\"region-details\"><strong>Les Angles, Carcassonne, Foix, Lannemezan, Pau, Gavarnie<\/strong> \u2014 Stages 3\u20136<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Nouvelle-Aquitaine -->\n      <div class=\"region-item\">\n        <div class=\"region-marker nouvelle\"><\/div>\n        <div class=\"region-content\">\n          <p class=\"region-name\">Nouvelle-Aquitaine<\/p>\n          <p class=\"region-details\"><strong>Hagetmau, Bordeaux, P\u00e9rigueux, Bergerac<\/strong> \u2014 Stages 7\u20138<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Auvergne-Rh\u00f4ne-Alpes -->\n      <div class=\"region-item\">\n        <div class=\"region-marker auvergne\"><\/div>\n        <div class=\"region-content\">\n          <p class=\"region-name\">Auvergne-Rh\u00f4ne-Alpes<\/p>\n          <p class=\"region-details\">\n            <strong>Ussel, Aurillac<\/strong> \u2014 Stages 9\u201310 \u00b7 \n            <strong>Chamb\u00e9ry, Voiron, Gap, Bourg-d\u2019Oisans, Alpe d\u2019Huez<\/strong> \u2014 Stages 17\u201320\n          <\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Bourgogne-Franche-Comt\u00e9 -->\n      <div class=\"region-item\">\n        <div class=\"region-marker bourgogne\"><\/div>\n        <div class=\"region-content\">\n          <p class=\"region-name\">Bourgogne-Franche-Comt\u00e9<\/p>\n          <p class=\"region-details\"><strong>Vichy, Nevers, Dole, Champagnole<\/strong> \u2014 Stages 11\u201313 and 15<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Grand Est -->\n      <div class=\"region-item\">\n        <div class=\"region-marker grandest\"><\/div>\n        <div class=\"region-content\">\n          <p class=\"region-name\">Grand Est<\/p>\n          <p class=\"region-details\"><strong>Belfort, Mulhouse, Le Markstein<\/strong> \u2014 Stages 13\u201314<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- \u00cele-de-France -->\n      <div class=\"region-item\">\n        <div class=\"region-marker iledefrance\"><\/div>\n        <div class=\"region-content\">\n          <p class=\"region-name\">\u00cele-de-France<\/p>\n          <p class=\"region-details\"><strong>Paris, Montmartre<\/strong> \u2014 Stage 21<\/p>\n        <\/div>\n      <\/div>\n\n    <\/div>\n  <\/div>\n<\/div>\n\n\n<style>.wp-block-kadence-spacer.kt-block-spacer-6973_4ef0af-96 .kt-block-spacer{height:40px;}.wp-block-kadence-spacer.kt-block-spacer-6973_4ef0af-96 .kt-divider{border-top-width:1px;height:1px;border-top-color:#eee;width:80%;border-top-style:solid;}<\/style>\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-6973_4ef0af-96\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><hr class=\"kt-divider\"\/><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\" style=\"text-transform:uppercase\">Complete Tour de France 2026 Stage Schedule \u2014 All 21 Stages<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Every stage confirmed by ASO at the October 23, 2025, route presentation and cross-referenced against the May 2026 technical guide. Key mountain stages highlighted. See the <a href=\"https:\/\/franceletour.com\/tour-de-france-2026-schedule\/\">detailed Tour de France 2026 Stage-by-stage Schedule<\/a>.<\/p>\n\n\n\n<style>\n.full-schedule-wrap {\n  max-width: 960px;\n  margin: 2rem auto;\n  font-family: 'DM Sans', sans-serif;\n}\n\n.full-schedule-card {\n  background: #ffffff;\n  border-radius: 20px;\n  border: 1px solid rgba(99,153,34,0.25);\n  overflow: hidden;\n}\n\n.full-schedule-header {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 1.2rem 1.5rem 0.9rem;\n  border-bottom: 1px solid rgba(99,153,34,0.15);\n  background: #EFEEEB;          \/* new header background *\/\n}\n\n.full-schedule-title {\n  font-family: 'Galibier', sans-serif !important;\n  font-size: 1.2rem !important;\n  font-weight: 700 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 1.5px !important;\n  color: #111 !important;\n  margin: 0 !important;\n  line-height: 1.2 !important;\n  padding: 0 !important;\n  border: none !important;\n  flex: 1;\n}\n\n.full-schedule-badge {\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  background: #EAF3DE;\n  color: #27500A;\n  padding: 4px 10px;\n  border-radius: 12px;\n  border: 1px solid rgba(99,153,34,0.3);\n  white-space: nowrap;\n}\n\n.schedule-scroll {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n  background: #ffffff;\n}\n\n\/* Column definitions \u2013 km\/mi widths increased slightly to prevent text squeezing *\/\n.schedule-grid-header,\n.schedule-row {\n  display: grid;\n  grid-template-columns: 36px 70px minmax(90px, 130px) minmax(140px, 1fr) 56px 56px minmax(160px, 1fr);\n  gap: 0;\n  align-items: center;\n  padding: 0 1.5rem;\n}\n\n.schedule-grid-header {\n  padding: 0.7rem 1.5rem;\n  border-bottom: 1px solid rgba(99,153,34,0.15);\n  background: #EFEEEB;          \/* use same soft tone *\/\n}\n\n.schedule-grid-header > div {\n  font-family: 'Galibier', sans-serif;\n  font-size: 0.6rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  color: #555;\n  text-align: left;              \/* all headers left-aligned *\/\n}\n\n\/* Make km\/mi headers left-aligned (already covered, but explicit) *\/\n.schedule-grid-header > div:nth-child(5),\n.schedule-grid-header > div:nth-child(6) {\n  text-align: left;\n}\n\n.stage-entry {\n  border-bottom: 1px solid rgba(99,153,34,0.08);\n  background: #ffffff;\n}\n\n.schedule-row {\n  padding: 0.65rem 1.5rem;\n  cursor: pointer;\n  transition: background 0.2s ease;\n}\n\n.schedule-row:hover {\n  background: #F8F8F6;\n}\n\n\/* Detail panel *\/\n.stage-detail {\n  display: none;\n  padding: 0.5rem 1.5rem 0.7rem;\n  background: #F8F8F6;\n  font-size: 0.82rem;\n  color: #333;\n  line-height: 1.5;\n}\n\n.stage-entry.open .stage-detail {\n  display: block;\n}\n\n\/* Cell styling *\/\n.s-num {\n  font-family: 'Galibier', sans-serif;\n  font-weight: 700;\n  font-size: 0.85rem;\n  color: #888;\n}\n.s-num.queen { color: #B8920A; }\n.s-num.rest { color: #ccc; }\n\n.s-date {\n  font-size: 0.75rem;\n  color: #666;\n  font-weight: 500;\n  white-space: nowrap;\n}\n\n.s-type {\n  display: flex;\n  align-items: center;\n  gap: 4px;\n  font-size: 0.72rem;\n  font-weight: 600;\n  color: #1a1a1a;\n  white-space: nowrap;\n}\n\n.s-type-icon {\n  width: 18px;\n  height: 18px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n}\n.s-type-icon svg {\n  width: 16px;\n  height: 16px;\n}\n\n.s-route {\n  font-weight: 600;\n  color: #111;\n  font-size: 0.85rem;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n\/* km and mi left-aligned *\/\n.s-km,\n.s-mi {\n  font-size: 0.75rem;\n  color: #444;\n  text-align: left;\n  font-variant-numeric: tabular-nums;\n  white-space: nowrap;\n}\n\n.s-climbs {\n  font-size: 0.78rem;\n  color: #1a1a1a;\n  line-height: 1.4;\n  white-space: normal;\n  word-break: break-word;       \/* prevent overflow *\/\n}\n\n\/* Queen stage highlight *\/\n.stage-entry.queen .schedule-row {\n  border-left: 3px solid #FFC72C;\n}\n\n\/* Rest day special *\/\n.stage-entry.rest .schedule-row {\n  cursor: default;\n  background: #ffffff;\n}\n.stage-entry.rest .s-route {\n  grid-column: 3 \/ -1;\n  font-weight: 600;\n  color: #aaa;\n  letter-spacing: 0.5px;\n  text-align: center;\n}\n\n\/* Footnotes *\/\n.schedule-footnotes {\n  padding: 1rem 1.5rem;\n  border-top: 1px solid rgba(99,153,34,0.15);\n  background: #EFEEEB;          \/* matching footer *\/\n  font-size: 0.72rem;\n  color: #777;\n  line-height: 1.6;\n}\n.schedule-footnotes strong { color: #333; }\n\n\/* Responsive: slightly tighter columns, horizontal scroll remains *\/\n@media (max-width: 768px) {\n  .schedule-grid-header,\n  .schedule-row {\n    grid-template-columns: 30px 60px 80px minmax(120px, 1fr) 46px 46px minmax(140px, 1fr);\n    padding: 0.5rem 1rem;\n  }\n  .s-num { font-size: 0.8rem; }\n  .s-type { font-size: 0.68rem; }\n  .s-route { font-size: 0.8rem; }\n}\n\n@media (max-width: 480px) {\n  .schedule-grid-header,\n  .schedule-row {\n    grid-template-columns: 28px 55px 70px minmax(100px, 1fr) 42px 42px minmax(120px, 1fr);\n    padding: 0.4rem 0.8rem;\n  }\n  .s-climbs { font-size: 0.75rem; }\n}\n<\/style>\n\n<div class=\"full-schedule-wrap\">\n  <div class=\"full-schedule-card\">\n    \n    <div class=\"full-schedule-header\">\n      <h3 class=\"full-schedule-title\">Tour de France 2026 \u2013 Full Stage Schedule<\/h3>\n      <span class=\"full-schedule-badge\">21 Stages<\/span>\n    <\/div>\n\n    <!-- Column headers -->\n    <div class=\"schedule-grid-header\">\n      <div>#<\/div>\n      <div>Date<\/div>\n      <div>Type<\/div>\n      <div>Route<\/div>\n      <div>km<\/div>\n      <div>mi<\/div>\n      <div>Key Climbs \/ Notes<\/div>\n    <\/div>\n\n    <div class=\"schedule-scroll\">\n\n      <!-- Stage 1 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">1<\/div>\n          <div class=\"s-date\">Jul 4<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"\/><circle cx=\"9\" cy=\"7\" r=\"4\"\/><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"\/><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"\/><\/svg><\/span> TTT\n          <\/div>\n          <div class=\"s-route\">Barcelona \u2192 Barcelona<\/div>\n          <div class=\"s-km\">19.7<\/div>\n          <div class=\"s-mi\">12.2<\/div>\n          <div class=\"s-climbs\">C\u00f4te de Montju\u00efc \u00d72 \u00b7 First Stage-1 TTT since 1971<\/div>\n        <\/div>\n        <div class=\"stage-detail\">Team Time Trial \u2013 two laps of Montju\u00efc. First time the Tour opens with a TTT since 1971.<\/div>\n      <\/div>\n\n      <!-- Stage 2 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">2<\/div>\n          <div class=\"s-date\">Jul 5<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M3 17l6-6 4 4 8-8\"\/><circle cx=\"19\" cy=\"5\" r=\"1\"\/><\/svg><\/span> Hilly\n          <\/div>\n          <div class=\"s-route\">Tarragona \u2192 Barcelona<\/div>\n          <div class=\"s-km\">178<\/div>\n          <div class=\"s-mi\">111<\/div>\n          <div class=\"s-climbs\">C\u00f4te de Begues (NEW) \u00b7 Montju\u00efc circuit<\/div>\n        <\/div>\n        <div class=\"stage-detail\">New climb C\u00f4te de Begues before the Barcelona finishing circuit. Breakaway-friendly finale.<\/div>\n      <\/div>\n\n      <!-- Stage 3 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">3<\/div>\n          <div class=\"s-date\">Jul 6<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"3 17 9 11 13 15 21 5\"\/><polyline points=\"15 5 21 5 21 11\"\/><\/svg><\/span> Mountain\n          <\/div>\n          <div class=\"s-route\">Granollers \u2192 Les Angles<\/div>\n          <div class=\"s-km\">196<\/div>\n          <div class=\"s-mi\">122<\/div>\n          <div class=\"s-climbs\">Toses 9.3km\/6.5% \u00b7 Calvaire 14.9km\/4.1% \u00b7 Les Angles summit<\/div>\n        <\/div>\n        <div class=\"stage-detail\">First real mountain test with a summit finish at Les Angles. Two tough climbs precede the final ascent.<\/div>\n      <\/div>\n\n      <!-- Stage 4 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">4<\/div>\n          <div class=\"s-date\">Jul 7<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M3 17l6-6 4 4 8-8\"\/><circle cx=\"19\" cy=\"5\" r=\"1\"\/><\/svg><\/span> Hilly\n          <\/div>\n          <div class=\"s-route\">Carcassonne \u2192 Foix<\/div>\n          <div class=\"s-km\">182<\/div>\n          <div class=\"s-mi\">113<\/div>\n          <div class=\"s-climbs\">Coudins 10.5km\/5.5% \u00b7 Monts\u00e9gur 6.9km\/6.6%<\/div>\n        <\/div>\n        <div class=\"stage-detail\">Two medium climbs, a classic transition day where a breakaway could survive.<\/div>\n      <\/div>\n\n      <!-- Stage 5 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">5<\/div>\n          <div class=\"s-date\">Jul 8<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"\/><polyline points=\"7 8 3 12 7 16\"\/><\/svg><\/span> Flat\n          <\/div>\n          <div class=\"s-route\">Lannemezan \u2192 Pau<\/div>\n          <div class=\"s-km\">158<\/div>\n          <div class=\"s-mi\">98<\/div>\n          <div class=\"s-climbs\">Sprinters&#8217; first clean opportunity<\/div>\n        <\/div>\n        <div class=\"stage-detail\">Flat stage, perfect for the fast men. Expected bunch sprint in Pau.<\/div>\n      <\/div>\n\n      <!-- Stage 6 \u2b50 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">6<\/div>\n          <div class=\"s-date\">Jul 9<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"\/><\/svg><\/span> Summit \u2b50\n          <\/div>\n          <div class=\"s-route\">Pau \u2192 Gavarnie-G\u00e8dre<\/div>\n          <div class=\"s-km\">186<\/div>\n          <div class=\"s-mi\">116<\/div>\n          <div class=\"s-climbs\">Aspin 12km\/6.5% \u00b7 Tourmalet 17km\/7.3% \u00b7 Gavarnie 18.7km\/4% (NEW)<\/div>\n        <\/div>\n        <div class=\"stage-detail\">Brutal Pyrenean stage with the Tourmalet and a new summit finish at Gavarnie-G\u00e8dre. GC will be decided here.<\/div>\n      <\/div>\n\n      <!-- Stage 7 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">7<\/div>\n          <div class=\"s-date\">Jul 10<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"\/><polyline points=\"7 8 3 12 7 16\"\/><\/svg><\/span> Flat\n          <\/div>\n          <div class=\"s-route\">Hagetmau \u2192 Bordeaux<\/div>\n          <div class=\"s-km\">175<\/div>\n          <div class=\"s-mi\">109<\/div>\n          <div class=\"s-climbs\">Fast run to Bordeaux \u00b7 First Hagetmau start<\/div>\n        <\/div>\n        <div class=\"stage-detail\">Sprinters&#8217; stage. Hagetmau makes its Tour de France debut as a start town.<\/div>\n      <\/div>\n\n      <!-- Stage 8 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">8<\/div>\n          <div class=\"s-date\">Jul 11<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"\/><polyline points=\"7 8 3 12 7 16\"\/><\/svg><\/span> Flat\n          <\/div>\n          <div class=\"s-route\">P\u00e9rigueux \u2192 Bergerac<\/div>\n          <div class=\"s-km\">182<\/div>\n          <div class=\"s-mi\">113<\/div>\n          <div class=\"s-climbs\">Dordogne valley flat<\/div>\n        <\/div>\n        <div class=\"stage-detail\">Another flat day through the Dordogne vineyards. Likely a bunch sprint.<\/div>\n      <\/div>\n\n      <!-- Stage 9 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">9<\/div>\n          <div class=\"s-date\">Jul 12<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M3 17l6-6 4 4 8-8\"\/><circle cx=\"19\" cy=\"5\" r=\"1\"\/><\/svg><\/span> Hilly\n          <\/div>\n          <div class=\"s-route\">Malemort \u2192 Ussel<\/div>\n          <div class=\"s-km\">185<\/div>\n          <div class=\"s-mi\">115<\/div>\n          <div class=\"s-climbs\">3,400m climbing \u00b7 No flat km \u00b7 Pre-rest-day test<\/div>\n        <\/div>\n        <div class=\"stage-detail\">A tough hilly stage with significant elevation gain. Ideal for breakaway riders before the rest day.<\/div>\n      <\/div>\n\n      <!-- REST DAY 1 -->\n      <div class=\"stage-entry rest\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num rest\">\u2014<\/div>\n          <div class=\"s-date\">Jul 13<\/div>\n          <div class=\"s-route\" style=\"grid-column:3\/-1;text-align:center;\">REST DAY 1 \u2014 Cantal Region<\/div>\n          <div class=\"s-km\"><\/div><div class=\"s-mi\"><\/div><div class=\"s-climbs\"><\/div>\n        <\/div>\n      <\/div>\n\n      <!-- Stage 10 \u2b50 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">10<\/div>\n          <div class=\"s-date\">Jul 14<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"\/><\/svg><\/span> Summit \u2b50\n          <\/div>\n          <div class=\"s-route\">Aurillac \u2192 Le Lioran (BASTILLE DAY)<\/div>\n          <div class=\"s-km\">167<\/div>\n          <div class=\"s-mi\">104<\/div>\n          <div class=\"s-climbs\">Col de la Griffoul (NEW) \u00b7 Puy Mary \u00b7 Pas de Peyrol<\/div>\n        <\/div>\n        <div class=\"stage-detail\">Bastille Day summit finish. New climb Col de la Griffoul precedes the iconic Puy Mary. Massive crowds expected.<\/div>\n      <\/div>\n\n      <!-- Stage 11 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">11<\/div>\n          <div class=\"s-date\">Jul 15<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"\/><polyline points=\"7 8 3 12 7 16\"\/><\/svg><\/span> Flat\n          <\/div>\n          <div class=\"s-route\">Vichy \u2192 Nevers<\/div>\n          <div class=\"s-km\">161<\/div>\n          <div class=\"s-mi\">100<\/div>\n          <div class=\"s-climbs\">Loire Valley sprint<\/div>\n        <\/div>\n        <div class=\"stage-detail\">Flat, fast stage along the Loire. A pure sprinter day.<\/div>\n      <\/div>\n\n      <!-- Stage 12 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">12<\/div>\n          <div class=\"s-date\">Jul 16<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"\/><polyline points=\"7 8 3 12 7 16\"\/><\/svg><\/span> Flat\n          <\/div>\n          <div class=\"s-route\">Circuit Magny-Cours \u2192 Chalon-sur-Sa\u00f4ne<\/div>\n          <div class=\"s-km\">181<\/div>\n          <div class=\"s-mi\">112<\/div>\n          <div class=\"s-climbs\">F1 circuit start \u00b7 Echelon wind risk in Burgundy<\/div>\n        <\/div>\n        <div class=\"stage-detail\">Start from the famous Formula 1 circuit. Wind could split the peloton in the open vineyards.<\/div>\n      <\/div>\n\n      <!-- Stage 13 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">13<\/div>\n          <div class=\"s-date\">Jul 17<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M3 17l6-6 4 4 8-8\"\/><circle cx=\"19\" cy=\"5\" r=\"1\"\/><\/svg><\/span> Hilly\n          <\/div>\n          <div class=\"s-route\">Dole \u2192 Belfort (Longest Stage)<\/div>\n          <div class=\"s-km\">205<\/div>\n          <div class=\"s-mi\">127<\/div>\n          <div class=\"s-climbs\">Jura hills \u00b7 Breakaway specialist stage<\/div>\n        <\/div>\n        <div class=\"stage-detail\">The longest stage of the race through the Jura hills. A perfect day for a breakaway win.<\/div>\n      <\/div>\n\n      <!-- Stage 14 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">14<\/div>\n          <div class=\"s-date\">Jul 18<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"3 17 9 11 13 15 21 5\"\/><polyline points=\"15 5 21 5 21 11\"\/><\/svg><\/span> Mountain\n          <\/div>\n          <div class=\"s-route\">Mulhouse \u2192 Le Markstein Fellering<\/div>\n          <div class=\"s-km\">155<\/div>\n          <div class=\"s-mi\">96<\/div>\n          <div class=\"s-climbs\">Col du Page (NEW) \u00b7 Col du Haag (NEW) \u00b7 Grand Ballon \u00b7 Le Markstein<\/div>\n        <\/div>\n        <div class=\"stage-detail\">Vosges mountains with two new climbs and the iconic Grand Ballon. Explosive short stage.<\/div>\n      <\/div>\n\n      <!-- Stage 15 \u2b50 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">15<\/div>\n          <div class=\"s-date\">Jul 19<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"\/><\/svg><\/span> Summit \u2b50\n          <\/div>\n          <div class=\"s-route\">Champagnole \u2192 Plateau de Solaison<\/div>\n          <div class=\"s-km\">184<\/div>\n          <div class=\"s-mi\">114<\/div>\n          <div class=\"s-climbs\">Solaison 11.3km\/9.1% (NEW summit finish) \u00b7 Steepest avg of race<\/div>\n        <\/div>\n        <div class=\"stage-detail\">Brutal new summit finish with gradients up to 9.3%. A potential GC showdown before the final rest day.<\/div>\n      <\/div>\n\n      <!-- REST DAY 2 -->\n      <div class=\"stage-entry rest\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num rest\">\u2014<\/div>\n          <div class=\"s-date\">Jul 20<\/div>\n          <div class=\"s-route\" style=\"grid-column:3\/-1;text-align:center;\">REST DAY 2 \u2014 Haute-Savoie<\/div>\n          <div class=\"s-km\"><\/div><div class=\"s-mi\"><\/div><div class=\"s-climbs\"><\/div>\n        <\/div>\n      <\/div>\n\n      <!-- Stage 16 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">16<\/div>\n          <div class=\"s-date\">Jul 21<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><polyline points=\"12 6 12 12 16 14\"\/><\/svg><\/span> ITT\n          <\/div>\n          <div class=\"s-route\">\u00c9vian-les-Bains \u2192 Thonon-les-Bains<\/div>\n          <div class=\"s-km\">26<\/div>\n          <div class=\"s-mi\">16<\/div>\n          <div class=\"s-climbs\">Lake Geneva \u00b7 Only solo ITT of race \u00b7 Start from 12:30 CET<\/div>\n        <\/div>\n        <div class=\"stage-detail\">The only individual time trial. 26km along the shores of Lake Geneva. Crucial for the GC battle.<\/div>\n      <\/div>\n\n      <!-- Stage 17 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">17<\/div>\n          <div class=\"s-date\">Jul 22<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"\/><polyline points=\"7 8 3 12 7 16\"\/><\/svg><\/span> Flat\n          <\/div>\n          <div class=\"s-route\">Chamb\u00e9ry \u2192 Voiron<\/div>\n          <div class=\"s-km\">175<\/div>\n          <div class=\"s-mi\">109<\/div>\n          <div class=\"s-climbs\">Is\u00e8re valley \u00b7 Last sprint chance<\/div>\n        <\/div>\n        <div class=\"stage-detail\">The last real opportunity for the sprinters before the Alps.<\/div>\n      <\/div>\n\n      <!-- Stage 18 \u2b50 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">18<\/div>\n          <div class=\"s-date\">Jul 23<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"\/><\/svg><\/span> Summit \u2b50\n          <\/div>\n          <div class=\"s-route\">Voiron \u2192 Orci\u00e8res-Merlette<\/div>\n          <div class=\"s-km\">185<\/div>\n          <div class=\"s-mi\">115<\/div>\n          <div class=\"s-climbs\">Col de Manse \u00b7 Col du Festre \u00b7 Orci\u00e8res summit \u00b7 3,950m climbing<\/div>\n        <\/div>\n        <div class=\"stage-detail\">Summit finish at Orci\u00e8res-Merlette. Over 3,900m of climbing. GC riders will make their move.<\/div>\n      <\/div>\n\n      <!-- Stage 19 \u2b50 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">19<\/div>\n          <div class=\"s-date\">Jul 24<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"\/><\/svg><\/span> Summit \u2b50\n          <\/div>\n          <div class=\"s-route\">Gap \u2192 Alpe d&#8217;Huez (Day 1)<\/div>\n          <div class=\"s-km\">128<\/div>\n          <div class=\"s-mi\">80<\/div>\n          <div class=\"s-climbs\">Bayard 5.1km\/7.2% \u00b7 Noyer 7.2km\/8.5% \u00b7 Ornon \u00b7 Alpe 13.8km\/8.1%<\/div>\n        <\/div>\n        <div class=\"stage-detail\">First of two Alpe d&#8217;Huez finishes. Legendary 21 hairpins, 13.8km at 8.1%.<\/div>\n      <\/div>\n\n      <!-- Stage 20 QUEEN \u2b50\u2b50 -->\n      <div class=\"stage-entry queen\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num queen\">20<\/div>\n          <div class=\"s-date\">Jul 25<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M2 4l3 12h14l3-12-6 5-4-5-4 5-6-5z\"\/><\/svg><\/span> QUEEN\n          <\/div>\n          <div class=\"s-route\">Le Bourg-d&#8217;Oisans \u2192 Alpe d&#8217;Huez (Day 2)<\/div>\n          <div class=\"s-km\">171<\/div>\n          <div class=\"s-mi\">106<\/div>\n          <div class=\"s-climbs\">Croix de Fer \u00b7 T\u00e9l\u00e9graphe \u00b7 Galibier 2,642m \u00b7 Sarenne (NEW) \u00b7 Alpe 3.8km\/6.1%<\/div>\n        <\/div>\n        <div class=\"stage-detail\">Queen stage with 5,600m climbing. Galibier, new Col de Sarenne descent, then Alpe d&#8217;Huez again. The Tour will be won here.<\/div>\n      <\/div>\n\n      <!-- Stage 21 -->\n      <div class=\"stage-entry\" onclick=\"this.classList.toggle('open')\">\n        <div class=\"schedule-row\">\n          <div class=\"s-num\">21<\/div>\n          <div class=\"s-date\">Jul 26<\/div>\n          <div class=\"s-type\">\n            <span class=\"s-type-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"\/><polyline points=\"7 8 3 12 7 16\"\/><\/svg><\/span> Flat\n          <\/div>\n          <div class=\"s-route\">Thoiry \u2192 Paris Champs-\u00c9lys\u00e9es<\/div>\n          <div class=\"s-km\">130<\/div>\n          <div class=\"s-mi\">81<\/div>\n          <div class=\"s-climbs\">Montmartre \u00d73 (15km from finish) \u00b7 Champs-\u00c9lys\u00e9es<\/div>\n        <\/div>\n        <div class=\"stage-detail\">Procession to Paris with three Montmartre climbs. Sprint on the Champs-\u00c9lys\u00e9es.<\/div>\n      <\/div>\n\n    <\/div>\n\n    <div class=\"schedule-footnotes\">\n      <strong>\u2b50 Summit finish<\/strong> | <strong>\u2b50\u2b50 Queen stage<\/strong> | <strong>NEW<\/strong> first-time climb \u00b7 Total distance: 3,333 km\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-transform:uppercase\">The Grand D\u00e9part Barcelona \u2014 Spain&#8217;s Route<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Barcelona is only the third Spanish city to host a <a href=\"https:\/\/franceletour.com\/tour-de-france-2026-stage-1\/\">Tour de France Grand D\u00e9part<\/a> in 113 editions. San Sebasti\u00e1n opened the 1992 Tour; Bilbao started the 2023 edition; now Catalonia&#8217;s capital adds its name to a list that includes London, Brussels, and Copenhagen. Race director Christian Prudhomme told reporters at the October 2025 announcement: &#8216;Barcelona is a city of sport, a city that knows how to receive the world, a city of passion.&#8217; The Tour de France 2026 route treats the city with genuine ambition: two stage finishes on Montju\u00efc in two days.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 1 Route Profile \u2014 Barcelona TTT (July 4, 19.7 km)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The 2026 route starts near Barcelona&#8217;s seafront before the road sweeps past the Sagrada Fam\u00edlia and climbs toward the Olympic complex on Montju\u00efc hill. The C\u00f4te de Montju\u00efc (1.1 km at 5.1%) and the C\u00f4te du Stade Olympique (1.1 km at 5.1%) define the final 4 km. Crucially, ASO uses the individual finish time format first trialled at Paris-Nice 2023 \u2014 each rider&#8217;s own time is recorded at the line, not the traditional fourth-rider team time. Teams will lead out their GC leaders into the two Montju\u00efc climbs for a de facto sprint. The <a href=\"https:\/\/franceletour.com\/tour-de-france-2026-stage-1\/\">first stage-1 TTT<\/a> in the Tour since 1971. The first-ever stage finish adjacent to the 1992 Olympic venue.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 2 Route Profile \u2014 Tarragona to Barcelona (July 5, 178 km)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tarragona&#8217;s UNESCO-listed Roman amphitheatre is the backdrop for the <a href=\"https:\/\/franceletour.com\/tour-de-france-2026-stage-2\/\">Stage 2 start<\/a>. The coastal road runs north through Sitges before the new C\u00f4te de Begues mid-stage. The decisive section is the Montju\u00efc finishing circuit, where the C\u00f4te du Ch\u00e2teau de Montju\u00efc (1.6 km at 9.3%, including a 600m section that tops 7%) is significantly harder than Stage 1&#8217;s climbs. The race circuit loops twice. In 2023&#8217;s Bilbao Grand D\u00e9part, Poga\u010dar, Vingegaard, and van der Poel ignited the Tour on less demanding terrain inside 48 hours. The Montju\u00efc circuit in 2026 is harder, expect the pattern to repeat.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 3 Route Profile \u2014 Granollers to Les Angles (July 6, 196 km, Cross-Border Pyrenees)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Stage 3 departs Granollers and immediately begins climbing. The Col de Sant Feliu de Codines is a gentle opener. The Collada de Toses (9.3 km at 6.5%) takes the race into the high pre-Pyrenean ridgeline. The Col du Calvaire (14.9 km at 4.1%) crosses the French border at 1,836 metres above sea level, a sustained climb despite its moderate average gradient. A 24 km rolling descent leads to the Les Angles ski station finish (1.7 km at 6.5%). Near 4,000 metres of total climbing on day three. The race leaves Spain permanently here. Any GC rider not fully prepared for this Tour pays the price before a mountain stage has officially been named.<\/p>\n\n\n<style>.wp-block-kadence-spacer.kt-block-spacer-6973_6d0032-b8 .kt-block-spacer{height:46px;}.wp-block-kadence-spacer.kt-block-spacer-6973_6d0032-b8 .kt-divider{border-top-width:1px;height:1px;border-top-color:#eee;width:80%;border-top-style:solid;}<\/style>\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-6973_6d0032-b8\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><hr class=\"kt-divider\"\/><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-transform:uppercase\">tdf 2026 Week One Route \u2014 July 4\u201312<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Spain &amp; The Pyrenees \u2014 Stages 1\u20139<\/strong><br><em>Approx. 22,000m climbing \u00b7 Three sprint stages \u00b7 Pyrenean queen stage on day 6 \u00b7 Week 1 record for modern Tour elevation<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Week 1 of the 2026 Tour de France is the most front-loaded opening week in modern Tour history by elevation. By the end of Stage 6, six days into the race, riders will have climbed approximately 16,200 metres. For comparison, the 2023 Basque Grand D\u00e9part produced 12,800 metres through Stage 6. The Pyrenees arrive on Stage 3. By Stage 6, the Tourmalet and a new summit finish at Gavarnie will have produced the first clear GC verdict of the race. Three sprint stages (5, 7, 8) and one breakaway hilly day (4) provide the sprinters with windows between mountain blocks.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 4 Route \u2014 Carcassonne to Foix (July 7, 182 km, Hilly)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Carcassonne&#8217;s 12th-century citadel, a double-walled UNESCO World Heritage fortress with 52 towers, is the stage start backdrop. The road heads east through Cathar country into the Ari\u00e8ge via Col de Villerouge (8.6 km\/3%), Col de Bedos (3.4 km\/4.3%), Col du Paradis (6.4 km\/4.1%), Col de Coudins (10.5 km\/5.5%), and Col de Monts\u00e9gur (6.9 km\/6.6%). The final climb comes 35 km from the Foix finish, a long enough run-in for a sprint or for a small group to hold off the bunch. Classic breakaway-specialist terrain: heavy roads, rolling hills, multiple climbs in the first half, and enough distance between the last summit and the finish to create tactical uncertainty.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 5 Route \u2014 Lannemezan to Pau (July 8, 158 km, Flat)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The sprinters&#8217; first clean opportunity. Lannemezan to Pau at 158 km is the shortest road stage in Week 1 and finishes on the flat run into Pau, a familiar Tour sprint town. There is rolling terrain mid-stage but nothing to threaten a pure sprinter who has managed the early road section. Jasper Philipsen, Tim Merlier, Jonathan Milan, and Olav Kooij all come into this stage having burned minimal energy since Stage 3. The last flat road before the Pyrenean queen stage.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 6 Route &amp; Elevation Profile \u2014 Pau to Gavarnie-G\u00e8dre (July 9, 186 km) \u2b50 Summit Finish<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Stage 6 is the first GC verdict of the 2026 Tour. Three mountain passes in the final 80 km. The Col d&#8217;Aspin (12 km at 6.5%, summit 1,490m) opens the mountain sequence. The Col du Tourmalet via the Sainte-Marie-de-Campan approach (17 km at 7.3%, summit 2,115m) makes its 91st Tour de France appearance \u2014 the most of any climb in Tour history \u2014 and brings the race above 2,000 metres for the first time in 2026. After a fast descent, the new Gavarnie-G\u00e8dre summit finish climbs 18.7 km at 4% average through the Gave de Pau valley toward the Cirque de Gavarnie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The Gavarnie deception:<\/strong> a 4% average sounds manageable. After 4,100 metres of previous climbing with the Tourmalet&#8217;s toll fully settled into the legs, that 18.7 km is anything but manageable. The Cirque de Gavarnie at the summit is a UNESCO World Heritage glacial amphitheatre \u2014 a vertical rock wall of 1,400 metres. It is one of the most dramatic natural backdrops in European sport. This stage will produce the first clear separation of 2026&#8217;s GC field. Evenepoel abandoned on the Tourmalet in 2025; how he handles these same slopes defines the early race narrative.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stages 7 &amp; 8 Route \u2014 Hagetmau to Bordeaux + P\u00e9rigueux to Bergerac (Flat Sprints)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Stage 7 (175 km, Hagetmau to Bordeaux) gives the sprinters their second window. Hagetmau makes its first Tour de France appearance, and the town is a Camino Franc\u00e9s stop. The fast run to Bordeaux through the Landes forests is a classic sprint stage. Stage 8 (182 km, P\u00e9rigueux to Bergerac) crosses Dordogne country between two of the region&#8217;s most recognisable names, on the flat valley roads that suit pure bunch sprint dynamics. Two intermediate sprint points are contested on each stage in 2026, the first time since 2010, making the points classification battle more active throughout each day.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 9 Route \u2014 Malemort to Ussel (July 12, 185 km, Hilly)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Week 1 closes with 3,400 metres of climbing across the Corr\u00e8ze without a single flat kilometre. Malemort to Ussel through the rolling volcanic Massif Central terrain is the most consistently demanding non-mountain stage of the entire race. No single climb is a GC threat, but the accumulated fatigue of 185 km without recovery is real. This stage reveals which squads have fresh domestiques heading into Week 2 and which have been grinding all week.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Rest Day 1 \u2014 Monday, July 13, Cantal<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Transfer day: teams move from Ussel to Aurillac (~90 km). Race infrastructure relocates. Press conferences throughout the day. GC teams conduct physical assessments, tactical planning, and equipment preparation. The first genuine public interrogation of whether Vingegaard&#8217;s Giro\u2013Tour double is showing fatigue. This rest day is not recovery \u2014 it is repositioning.<\/p>\n\n\n<style>.wp-block-kadence-spacer.kt-block-spacer-6973_ddd586-0a .kt-block-spacer{height:46px;}.wp-block-kadence-spacer.kt-block-spacer-6973_ddd586-0a .kt-divider{border-top-width:1px;height:1px;border-top-color:#eee;width:80%;border-top-style:solid;}<\/style>\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-6973_ddd586-0a\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><hr class=\"kt-divider\"\/><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-transform:uppercase\">TDF 2026 Week Two Route \u2014 July 14\u201319<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Massif Central, Jura, Vosges &amp; Alps \u2014 Stages 10\u201315<\/strong><br><em>Approx. 18,000m climbing \u00b7 Bastille Day summit \u00b7 Vosges dark horse \u00b7 New Alpine summit at Solaison<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Week 2 builds from Bastille Day&#8217;s volcanic Massif Central summit to the pre-rest-day ambush of a new Alpine summit finish that no rider has ever contested. Three distinct terrain phases: Massif Central (Stage 10), transitional plains through the Loire Valley and Burgundy (Stages 11\u201313), the Vosges dark horse (Stage 14), and the Alpine opener on the new Plateau de Solaison (Stage 15). A total of approximately 18,000 metres of climbing across six stages \u2014 fewer than Week 1, but concentrated in ways that expose second-week fatigue.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 10 Route &amp; Elevation Profile \u2014 Aurillac to Le Lioran (July 14, 167 km) \u2b50 Bastille Day Summit<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Stage 10 falls on July 14. That date has an effect on French cycling that no other calendar date replicates \u2014 ASO deliberately sequences its most aggressive GC racing on Bastille Day, and the crowd density on Puy Mary and Pas de Peyrol transforms the race into something closer to a football final. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The route from Aurillac crosses the new Col de la Griffoul before the iconic Puy Mary (1,589m) and Pas de Peyrol before a summit finish at the Le Lioran ski station. The Massif Central character is specific: no climb reaches alpine altitude, but the volcanic terrain creates repeated short sharp ramps rather than sustained gradients. Riders who excel at threshold-level power held for 8\u201315 minutes tend to perform better here than those who prefer 20\u201325 minute sustained alpine efforts.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stages 11 &amp; 12 Route \u2014 Vichy to Nevers + Magny-Cours to Chalon-sur-Sa\u00f4ne (Flat)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Stage 11 (161 km, Vichy to Nevers) runs through the Loire Valley from the thermal spa city to Nevers. The shortest flat stage of the 2026 race. Stage 12 (181 km) starts from the Circuit de Nevers Magny-Cours, one of France&#8217;s Formula 1 venues, making its Tour debut, and runs through Burgundy wine country to Chalon-sur-Sa\u00f4ne. Open Burgundy plains carry echelon risk if south-westerly winds develop: a crosswind split on Stage 12 could produce GC time gaps without a single climb. Sprinters&#8217; teams need to control both stages.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 13 Route \u2014 Dole to Belfort (July 17, 205 km, Hilly \u2014 Longest Stage)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Stage 13 is the longest stage of the 2026 Tour at 205 km, the only stage over 200 km in an edition deliberately skewed toward shorter, more explosive racing. The Jura hills between Dole and Belfort provide multiple attack points on rolling limestone terrain without the commitment of a full mountain stage. The Lion de Belfort statue \u2014 Fr\u00e9d\u00e9ric Auguste Bartholdi&#8217;s 11-metre sandstone lion, the monumental precursor to his Statue of Liberty design \u2014 marks the finish. GC teams should be content to ride tempo here. Breakaway specialists who build careers on 200+ km days have the perfect canvas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 14 Route &amp; Profile \u2014 Mulhouse to Le Markstein (July 18, 155 km, Vosges)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Stage 14 is the dark horse stage of the entire 2026 Tour. The Vosges Mountains are unlike the Pyrenees or Alps in almost every measurable way: no col above 1,424m, rounded granitic summits, narrow forested roads, and climbing profiles that produce repeated 4\u20136 minute threshold efforts rather than 20-minute sustained grinds. Two brand-new Tour climbs, Col du Page and Col du Haag, precede the Grand Ballon (1,424m) and Le Markstein Fellering summit finish. Total climbing for the stage: 3,800m across seven ascents. Stage 14 in 2023 was where Vingegaard cracked the field and confirmed his second yellow jersey on similar Markstein terrain. The 2026 version is harder with the two new climbs added earlier in the day.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 15 Route &amp; Elevation Profile \u2014 Champagnole to Plateau de Solaison (July 19, 184 km) \u2b50 NEW Summit Finish<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Plateau de Solaison has never hosted a Tour de France summit finish. At 11.3 km and 9.1% average gradient, with sections pushing above 12%, it is the steepest summit finish average in the 2026 race. The climb faces north, sitting in shadow for most of the afternoon. At altitude above 1,471 metres, temperatures at the summit can fall to 10\u00b0C even in late July. Multiple Jura hills precede the final ascent, building accumulated fatigue before the decisive climb. No rider has prior Tour de France data on Solaison: no split times from previous editions, no tactical reference from team archives.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Why this stage matters beyond the climb itself:<\/strong> it is the last stage before Rest Day 2, positioned immediately before the only ITT. History shows that riders in difficulty always crack hardest in the final summit before a rest day. Adrenaline masking fatigue is a finite resource. Solaison will produce the clearest picture of every GC contender&#8217;s actual condition before the final week begins.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Rest Day 2 \u2014 Monday, July 20, Haute-Savoie<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The most tactically loaded rest day of the 2026 Tour. Stage 16 \u2014 the only individual time trial \u2014 follows directly on July 21. Teams spend the rest day reconnoitring the \u00c9vian-to-Thonon course (26 km, Lake Geneva), selecting equipment (disc wheels, aero helmets, superbikes), and finalising TT positioning. GC riders who want to ambush rivals on the ITT begin preparation here. The tactical decisions made on July 20 will determine who gains or loses minutes on July 21.<\/p>\n\n\n<style>.wp-block-kadence-spacer.kt-block-spacer-6973_dc15cf-13 .kt-block-spacer{height:45px;}.wp-block-kadence-spacer.kt-block-spacer-6973_dc15cf-13 .kt-divider{border-top-width:1px;height:1px;border-top-color:#eee;width:80%;border-top-style:solid;}<\/style>\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-6973_dc15cf-13\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><hr class=\"kt-divider\"\/><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-transform:uppercase\">TDF 2026 Week Three Route \u2014 July 21\u201326<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The Alpine Finale &amp; Paris \u2014 Stages 16\u201321<\/strong><br><em>~16,000m climbing \u00b7 Three consecutive summit finishes \u00b7 Back-to-back Alpe d&#8217;Huez \u00b7 Paris July 26<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Week 3 opens with the race&#8217;s only individual time trial, then delivers three consecutive Alpine summit finishes \u2014 Orci\u00e8res-Merlette, Alpe d&#8217;Huez (Day 1), and the Queen Stage to Alpe d&#8217;Huez (Day 2), before the Paris parade. The structure is deliberate: the ITT reshapes the GC before a single Alpine climb, then three summit finishes in three days compress the decisive moments into 72 hours. The 2026 Tour winner is determined in Week 3.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 16 Route &amp; Profile \u2014 \u00c9vian-les-Bains to Thonon-les-Bains (July 21, 26 km, Individual Time Trial)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The only individual time trial of the 2026 Tour. The 26 km course runs along the southern shore of Lake Geneva from the thermal spa resort of \u00c9vian to Thonon-les-Bains, generally flat with one rolling climb section early in the stage and a fast finale. Expected winning time: approximately 28:30 at an average speed above 54 km\/h. GC riders start in reverse order from 12:30 CET. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The ITT is critically short in the context of a GC race: Poga\u010dar&#8217;s 2025 form projects to a 40\u201350 second advantage over Vingegaard across 26 km. Evenepoel, the reigning Olympic ITT champion, could potentially produce the fastest GC-rider time of the day. If the GC is within 1:30 before Stage 16, the yellow jersey could change hands on the Lake Geneva shore road.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 17 Route \u2014 Chamb\u00e9ry to Voiron (July 22, 175 km, Flat)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Transition stage. The Is\u00e8re valley runs from Chamb\u00e9ry to Voiron, with Voiron becoming the Stage 18 start town. The sprinters&#8217; last realistic opportunity of the 2026 Tour before three consecutive summit finishes removes their window entirely. GCN teams manage watts. Sprint trains organise for the final mass sprint of the race. The stage is flat, fast, and unambiguous \u2014 exactly what GC leaders need 24 hours after the ITT.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 18 Route &amp; Profile \u2014 Voiron to Orci\u00e8res-Merlette (July 23, 185 km) \u2b50 Summit Finish<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Stage 18 opens the decisive Alpine trilogy. The route heads south from Voiron toward Grenoble, then climbs to Engins (11.4 km at 5.4%) and continues over a sustained false flat to Saint-Nizier-du-Moucherotte before dropping to the banks of the Drac river. After roughly 10 km in the valley at 900 metres altitude, the Col de Manse and Col du Festre precede the final steady climb to Orci\u00e8res-Merlette. The ski station at 1,850m sits at altitude where oxygen debt builds quickly, the final 7.1 km at 6.7% feels considerably harder than the gradient suggests.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Orci\u00e8res-Merlette&#8217;s Tour history runs deep. Luis Oca\u00f1a won here alone in 1971, having ridden solo for 60 km and finished 9 minutes ahead of Eddy Merckx. Roglic won a similar-format stage here in 2020. The 2026 edition expects one of those days: a long, attritional approach followed by a summit finish where only the strongest climbers reach the front. The race generates 3,950 metres of total climbing \u2014 the warm-up before Alpe d&#8217;Huez. Who wins Stage 18 is largely irrelevant. How the GC leaders arrive at Orci\u00e8res-Merlette predicts everything about Stage 19.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 19 Route &amp; Elevation Profile \u2014 Gap to Alpe d&#8217;Huez (July 24, 128 km) \u2b50 Alpe d&#8217;Huez Day 1<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Stage 19 is short, savage, and explosive. The 128 km from Gap to Alpe d&#8217;Huez produces 3,605 metres of climbing across four ascents: Col Bayard (5.1 km at 7.2%), Col du Noyer (7.2 km at 8.5% \u2014 the sharpest regular pass of the race), Col d&#8217;Ornon (5.6 km at 6.2%), then the final 13.8 km at 8.1% up Alpe d&#8217;Huez itself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Col du Noyer at 8.5% is the hardest numbered pass before the Alpe and represents the first serious point of selection on Stage 19. Strong climbers targeting a breakaway will attack here. GC teams arriving with weakened domestiques face immediate problems on a climb where the gradient leaves no shelter. Col d&#8217;Ornon serves as the final filter, a 5.6 km climb at 6.2% after the Noyer descent that arrives just 35 km from the Alpe d&#8217;Huez base. Only those with genuine resilience stay competitive to the foot of the final climb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Alpe d&#8217;Huez profile:<\/strong> 13.8 km at 8.1% average from Le Bourg-d&#8217;Oisans at approximately 720m to the summit resort at 1,860m. The 21 numbered hairpins define this year route, hairpin 21 at the bottom, hairpin 1 at the top. The first two kilometres average close to 10%. Hairpins 10 and 11 in the middle section push into double digits. Hairpin 7, Dutch Corner, is the most densely packed spectator point in cycling. Short (128 km) means the peloton arrives at the Alpe base largely together. When Tom Pidcock announced himself to the world in 2022 on this same climb, he attacked from a small group and rode solo to the summit. In 2026, with three weeks of fatigue in their legs and the Queen Stage the following morning, every GC rider will race defensively here \u2014 except the one with something to prove.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 20 Route &amp; Elevation Profile \u2014 Queen Stage to Alpe d&#8217;Huez (July 25, 171 km) \u2b50\u2b50<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Stage 20 is the definitive stage of the Tour de France 2026.<\/strong> Le Bourg-d&#8217;Oisans to Alpe d&#8217;Huez, 171 km, via four mountain passes: the 2026 Tour produces its final answer here.<\/p>\n\n\n\n<style>\n.climb-table-wrap {\n  max-width: 960px;\n  margin: 2rem auto;\n  font-family: 'DM Sans', sans-serif;\n}\n\n.climb-table-card {\n  background: #ffffff;\n  border-radius: 20px;\n  border: 1px solid rgba(99,153,34,0.25);\n  overflow: hidden;\n}\n\n.climb-table-header {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 1.2rem 1.5rem 0.9rem;\n  border-bottom: 1px solid rgba(99,153,34,0.15);\n  background: #EFEEEB;\n}\n\n.climb-table-title {\n  font-family: 'Galibier', sans-serif !important;\n  font-size: 1.2rem !important;\n  font-weight: 700 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 1.5px !important;\n  color: #111 !important;\n  margin: 0 !important;\n  line-height: 1.2 !important;\n  padding: 0 !important;\n  border: none !important;\n  flex: 1;\n}\n\n.climb-table-badge {\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  background: #EAF3DE;\n  color: #27500A;\n  padding: 4px 10px;\n  border-radius: 12px;\n  border: 1px solid rgba(99,153,34,0.3);\n  white-space: nowrap;\n}\n\n.climb-scroll {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n  background: #ffffff;\n}\n\n.climb-grid-header,\n.climb-row {\n  display: grid;\n  grid-template-columns: minmax(150px, 1fr) 70px 70px 80px minmax(200px, 2fr);\n  gap: 0;\n  align-items: center;\n  padding: 0 1.5rem;\n}\n\n.climb-grid-header {\n  padding: 0.7rem 1.5rem;\n  border-bottom: 1px solid rgba(99,153,34,0.15);\n  background: #EFEEEB;\n}\n\n.climb-grid-header > div {\n  font-family: 'Galibier', sans-serif;\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  color: #555;\n  text-align: left;\n}\n\n.climb-row {\n  padding: 0.8rem 1.5rem;\n  border-bottom: 1px solid rgba(99,153,34,0.08);\n  background: #ffffff;\n  transition: background 0.2s ease;\n  align-items: start;\n}\n\n.climb-row:hover {\n  background: #F8F8F6;\n}\n\n.climb-name {\n  font-weight: 600;\n  color: #111;\n  font-size: 0.9rem;\n  line-height: 1.3;\n}\n\n.climb-length,\n.climb-avg,\n.climb-summit {\n  font-size: 0.85rem;\n  color: #333;\n  text-align: left;\n  white-space: nowrap;\n}\n\n.climb-notes {\n  font-size: 0.85rem;\n  color: #444;\n  line-height: 1.5;\n}\n\n.climb-summit strong {\n  color: #B8920A;\n  font-weight: 600;\n}\n\n.climb-footnote {\n  padding: 1rem 1.5rem;\n  border-top: 1px solid rgba(99,153,34,0.15);\n  background: #EFEEEB;\n  font-size: 0.85rem;\n  color: #111;\n  font-weight: 600;\n  line-height: 1.5;\n}\n\n@media (max-width: 700px) {\n  .climb-grid-header,\n  .climb-row {\n    grid-template-columns: minmax(130px, 1fr) 60px 60px 70px minmax(180px, 2fr);\n    padding: 0.6rem 1rem;\n  }\n  .climb-name { font-size: 0.85rem; }\n  .climb-length, .climb-avg, .climb-summit { font-size: 0.8rem; }\n}\n<\/style>\n\n<div class=\"climb-table-wrap\">\n  <div class=\"climb-table-card\">\n    \n    <div class=\"climb-table-header\">\n      <h3 class=\"climb-table-title\">The Four Climbs of Stage 20 \u2014 Confirmed Gradient Data<\/h4>\n      <span class=\"climb-table-badge\">Stage 20<\/span>\n    <\/div>\n\n    <div class=\"climb-grid-header\">\n      <div>Climb<\/div>\n      <div>Length<\/div>\n      <div>Avg %<\/div>\n      <div>Summit<\/div>\n      <div>Notes<\/div>\n    <\/div>\n\n    <div class=\"climb-scroll\">\n      \n      <div class=\"climb-row\">\n        <div class=\"climb-name\">Col de la Croix de Fer<\/div>\n        <div class=\"climb-length\">24 km<\/div>\n        <div class=\"climb-avg\">5.2%<\/div>\n        <div class=\"climb-summit\">2,067 m<\/div>\n        <div class=\"climb-notes\">Long grinding opener \u2014 alternates steep ramps with recoveries. Harder than the average suggests.<\/div>\n      <\/div>\n\n      <div class=\"climb-row\">\n        <div class=\"climb-name\">Col du T\u00e9l\u00e9graphe<\/div>\n        <div class=\"climb-length\">11.9 km<\/div>\n        <div class=\"climb-avg\">7.1%<\/div>\n        <div class=\"climb-summit\">1,566 m<\/div>\n        <div class=\"climb-notes\">Barely descends after Croix de Fer before climbing directly onto Galibier. No real recovery.<\/div>\n      <\/div>\n\n      <div class=\"climb-row\">\n        <div class=\"climb-name\">Col du Galibier \u2014 Roof of 2026<\/div>\n        <div class=\"climb-length\">17.7 km<\/div>\n        <div class=\"climb-avg\">6.9%<\/div>\n        <div class=\"climb-summit\"><strong>2,642 m \u2b50<\/strong><\/div>\n        <div class=\"climb-notes\">Highest point of the 2026 Tour. Final km exceed 9%. Above the snowline. Summit at 74% of sea-level air pressure.<\/div>\n      <\/div>\n\n      <div class=\"climb-row\">\n        <div class=\"climb-name\">Col de Sarenne (NEW \u2014 SE flank)<\/div>\n        <div class=\"climb-length\">12.9 km<\/div>\n        <div class=\"climb-avg\">7.3%<\/div>\n        <div class=\"climb-summit\">\u2014<\/div>\n        <div class=\"climb-notes\">New direction. ASO specifically repaved this road for 2026. In 2013, the same descent was called &#8216;the most stupid in modern Tour history&#8217; \u2014 now paved and widened.<\/div>\n      <\/div>\n\n      <div class=\"climb-row\">\n        <div class=\"climb-name\">Alpe d&#8217;Huez \u2014 Final Section<\/div>\n        <div class=\"climb-length\">3.8 km<\/div>\n        <div class=\"climb-avg\">6.1%<\/div>\n        <div class=\"climb-summit\">1,850 m<\/div>\n        <div class=\"climb-notes\">After Sarenne descent, the final loop onto the classic Alpe d&#8217;Huez route. 2nd consecutive summit here.<\/div>\n      <\/div>\n\n    <\/div>\n\n    <div class=\"climb-footnote\">\n      Total Stage 20 climbing: 5,601 m.\n    <\/div>\n\n  <\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The Col de Sarenne&#8217;s backstory: ASO first routed the Tour de France over the Sarenne descent in 2013, using it as an innovative loop to create a double Alpe d&#8217;Huez stage. A French newspaper labelled the descent &#8216;la descente la plus stupide du Tour moderne&#8217;, the most stupid descent in the modern Tour, due to its narrow, partially unpaved surface. ASO listened. For 2026, the south-eastern flank of the Sarenne has been resurfaced and widened specifically to enable this stage design. The result is a climb that has genuinely never been raced at this level before.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Galibier at 2,642 metres is the highest point of the 2026 Tour. At that altitude, air pressure is approximately 74% of sea level, meaning riders generate roughly 14% less aerobic power at the same perceived effort compared to sea level, even with altitude adaptation. Summit temperature on the Galibier in late July can reach 5\u20138\u00b0C with wind, requiring a lightweight rain cape that riders discard before the Sarenne descent. The tactical decision of when to attack on the Galibier and whether to risk a cold descent to Sarenne with an aggressive lead will define the stage.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Stage 21 Route \u2014 Thoiry to Paris Champs-\u00c9lys\u00e9es (July 26, 130 km, Sprint Finale)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The final stage covers 130 km from Thoiry to Paris. The Montmartre section, three ascents of the cobbled Rue Lepic introduced in 2025 and confirmed for permanent inclusion by Prudhomme after its &#8216;wildly successful&#8217; debut, arrives 15 km from the Champs-\u00c9lys\u00e9es finish. In 2025, Wout van Aert dropped Poga\u010dar on Montmartre in one of the most dramatic final-stage attacks in recent Tour history. The Rue Lepic is 1.8 km and averages 5.5%, but the cobblestones and the 15 km of flat road between Montmartre and the finish line mean the race typically returns to a bunch sprint on the Champs-\u00c9lys\u00e9es, with the GC leader managing any breakaway. The yellow jersey is not threatened on Stage 21. The sprint is. Montmartre is the moment \u2014 Paris is the confirmation.<\/p>\n\n\n<style>.wp-block-kadence-spacer.kt-block-spacer-6973_940d37-39 .kt-block-spacer{height:40px;}.wp-block-kadence-spacer.kt-block-spacer-6973_940d37-39 .kt-divider{border-top-width:1px;height:1px;border-top-color:#eee;width:80%;border-top-style:solid;}<\/style>\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-6973_940d37-39\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><hr class=\"kt-divider\"\/><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\" style=\"text-transform:uppercase\">All 5 Summit Finish Elevation Profiles \u2014 Tour de France 2026<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Five summit finishes define the 2026 GC battle. Three are new to the Tour de France. Here is every summit profile with confirmed gradient data.<\/p>\n\n\n\n<style>\n.summit-card-wrap {\n  max-width: 960px;\n  margin: 2rem auto;\n  font-family: 'DM Sans', sans-serif;\n}\n\n.summit-card {\n  background: #ffffff;\n  border-radius: 20px;\n  border: 1px solid rgba(99,153,34,0.25);\n  overflow: hidden;\n}\n\n.summit-card-header {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 1.2rem 1.5rem 0.9rem;\n  border-bottom: 1px solid rgba(99,153,34,0.15);\n  background: #EFEEEB;\n}\n\n.summit-card-title {\n  font-family: 'Galibier', sans-serif !important;\n  font-size: 1.2rem !important;\n  font-weight: 700 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 1.5px !important;\n  color: #111 !important;\n  margin: 0 !important;\n  line-height: 1.2 !important;\n  padding: 0 !important;\n  border: none !important;\n  flex: 1;\n}\n\n.summit-card-badge {\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  background: #FFC72C;\n  color: #000;\n  padding: 4px 10px;\n  border-radius: 12px;\n  border: 1px solid rgba(0,0,0,0.1);\n  white-space: nowrap;\n}\n\n.summit-card-body {\n  padding: 1.2rem 1.5rem 1.5rem;\n}\n\n\/* Mini stat grid *\/\n.summit-stats {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 0.8rem 1.5rem;\n  margin-bottom: 1rem;\n}\n\n.summit-stat {\n  display: flex;\n  align-items: flex-start;\n  gap: 8px;\n}\n\n.summit-stat-icon {\n  width: 20px;\n  height: 20px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  color: #27500A;\n  margin-top: 2px;\n}\n\n.summit-stat-icon svg {\n  width: 16px;\n  height: 16px;\n  stroke: #27500A;\n}\n\n.summit-stat-text {\n  flex: 1;\n}\n\n.summit-stat-label {\n  font-family: 'Galibier', sans-serif;\n  font-size: 0.68rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.6px;\n  color: #27500A;\n  margin: 0 0 2px 0;\n}\n\n.summit-stat-value {\n  font-size: 0.85rem;\n  color: #1a1a1a;\n  font-weight: 500;\n  margin: 0;\n  line-height: 1.4;\n}\n\n.summit-stat-value strong {\n  font-weight: 600;\n  color: #000;\n}\n\n\/* Context note *\/\n.summit-context {\n  border-top: 1px solid rgba(99,153,34,0.15);\n  padding-top: 0.8rem;\n  font-size: 0.85rem;\n  color: #1a1a1a;\n  line-height: 1.6;\n}\n\n.summit-context strong {\n  font-weight: 600;\n  color: #000;\n}\n\n@media (max-width: 500px) {\n  .summit-stats {\n    grid-template-columns: 1fr;\n  }\n}\n<\/style>\n\n<div class=\"summit-card-wrap\">\n  <div class=\"summit-card\">\n    \n    <div class=\"summit-card-header\">\n      <h3 class=\"summit-card-title\">Summit 1: Gavarnie-G\u00e8dre \u2014 Stage 6<\/h3>\n      <span class=\"summit-card-badge\">NEW<\/span>\n    <\/div>\n\n    <div class=\"summit-card-body\">\n      \n      <div class=\"summit-stats\">\n        <div class=\"summit-stat\">\n          <div class=\"summit-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"\/><polyline points=\"7 8 3 12 7 16\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit-stat-text\">\n            <p class=\"summit-stat-label\">Length<\/p>\n            <p class=\"summit-stat-value\">18.7 km<\/p>\n          <\/div>\n        <\/div>\n\n        <div class=\"summit-stat\">\n          <div class=\"summit-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <polyline points=\"3 17 9 11 13 15 21 5\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit-stat-text\">\n            <p class=\"summit-stat-label\">Avg Gradient<\/p>\n            <p class=\"summit-stat-value\">4% avg<\/p>\n          <\/div>\n        <\/div>\n\n        <div class=\"summit-stat\">\n          <div class=\"summit-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit-stat-text\">\n            <p class=\"summit-stat-label\">Altitude<\/p>\n            <p class=\"summit-stat-value\">~1,350 m<\/p>\n          <\/div>\n        <\/div>\n\n        <div class=\"summit-stat\">\n          <div class=\"summit-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"\/><line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"\/><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"\/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit-stat-text\">\n            <p class=\"summit-stat-label\">Stage<\/p>\n            <p class=\"summit-stat-value\">Stage 6, Jul 9<\/p>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"summit-context\">\n        <strong>First-ever Tour de France summit finish.<\/strong> UNESCO Cirque de Gavarnie backdrop. After the Tourmalet \u2014 deceptively hard despite the modest average gradient.\n      <\/div>\n\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The low average gradient is the trap. Gavarnie-G\u00e8dre climbs a long Pyrenean valley after the Tourmalet&#8217;s full descent, the gradient never exceeds 7% for long, but it never relents, and legs that have already climbed Aspin and the Tourmalet will feel every kilometre of those 18.7 km. The Cirque de Gavarnie \u2014 a 1,400m vertical rock amphitheatre, a UNESCO site, one of the most dramatic landscapes in Europe \u2014 forms the backdrop to a finish that is both a GC test and a sensory spectacle.<\/p>\n\n\n\n<style>\n.summit2-card-wrap {\n  max-width: 960px;\n  margin: 2rem auto;\n  font-family: 'DM Sans', sans-serif;\n}\n\n.summit2-card {\n  background: #ffffff;\n  border-radius: 20px;\n  border: 1px solid rgba(99,153,34,0.25);\n  overflow: hidden;\n}\n\n.summit2-card-header {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 1.2rem 1.5rem 0.9rem;\n  border-bottom: 1px solid rgba(99,153,34,0.15);\n  background: #EFEEEB;\n}\n\n.summit2-card-title {\n  font-family: 'Galibier', sans-serif !important;\n  font-size: 1.2rem !important;\n  font-weight: 700 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 1.5px !important;\n  color: #111 !important;\n  margin: 0 !important;\n  line-height: 1.2 !important;\n  padding: 0 !important;\n  border: none !important;\n  flex: 1;\n}\n\n.summit2-card-badge {\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  background: #FFC72C;\n  color: #000;\n  padding: 4px 10px;\n  border-radius: 12px;\n  border: 1px solid rgba(0,0,0,0.1);\n  white-space: nowrap;\n}\n\n.summit2-card-body {\n  padding: 1.2rem 1.5rem 1.5rem;\n}\n\n\/* Stat grid *\/\n.summit2-stats {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 0.8rem 1.5rem;\n  margin-bottom: 1rem;\n}\n\n.summit2-stat {\n  display: flex;\n  align-items: flex-start;\n  gap: 8px;\n}\n\n.summit2-stat-icon {\n  width: 20px;\n  height: 20px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  color: #27500A;\n  margin-top: 2px;\n}\n\n.summit2-stat-icon svg {\n  width: 16px;\n  height: 16px;\n  stroke: #27500A;\n}\n\n.summit2-stat-text {\n  flex: 1;\n}\n\n.summit2-stat-label {\n  font-family: 'Galibier', sans-serif;\n  font-size: 0.68rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.6px;\n  color: #27500A;\n  margin: 0 0 2px 0;\n}\n\n.summit2-stat-value {\n  font-size: 0.85rem;\n  color: #1a1a1a;\n  font-weight: 500;\n  margin: 0;\n  line-height: 1.4;\n}\n\n.summit2-stat-value strong {\n  font-weight: 600;\n  color: #000;\n}\n\n\/* Context note *\/\n.summit2-context {\n  border-top: 1px solid rgba(99,153,34,0.15);\n  padding-top: 0.8rem;\n  font-size: 0.85rem;\n  color: #1a1a1a;\n  line-height: 1.6;\n}\n\n.summit2-context strong {\n  font-weight: 600;\n  color: #000;\n}\n\n@media (max-width: 500px) {\n  .summit2-stats {\n    grid-template-columns: 1fr;\n  }\n}\n<\/style>\n\n<div class=\"summit2-card-wrap\">\n  <div class=\"summit2-card\">\n    \n    <div class=\"summit2-card-header\">\n      <h3 class=\"summit2-card-title\">Summit 2: Le Lioran \/ Puy Mary \u2014 Stage 10 (Bastille Day)<\/h3>\n      <span class=\"summit2-card-badge\">BASTILLE DAY<\/span>\n    <\/div>\n\n    <div class=\"summit2-card-body\">\n      \n      <div class=\"summit2-stats\">\n        <!-- Summit Finish -->\n        <div class=\"summit2-stat\">\n          <div class=\"summit2-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit2-stat-text\">\n            <p class=\"summit2-stat-label\">Summit Finish<\/p>\n            <p class=\"summit2-stat-value\">Le Lioran<\/p>\n          <\/div>\n        <\/div>\n\n        <!-- Puy Mary -->\n        <div class=\"summit2-stat\">\n          <div class=\"summit2-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit2-stat-text\">\n            <p class=\"summit2-stat-label\">Puy Mary<\/p>\n            <p class=\"summit2-stat-value\">1,589 m peak<\/p>\n          <\/div>\n        <\/div>\n\n        <!-- Altitude (finish) -->\n        <div class=\"summit2-stat\">\n          <div class=\"summit2-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <polyline points=\"3 17 9 11 13 15 21 5\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit2-stat-text\">\n            <p class=\"summit2-stat-label\">Finish Altitude<\/p>\n            <p class=\"summit2-stat-value\">Le Lioran ski station<\/p>\n          <\/div>\n        <\/div>\n\n        <!-- Stage & Date -->\n        <div class=\"summit2-stat\">\n          <div class=\"summit2-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"\/><line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"\/><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"\/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit2-stat-text\">\n            <p class=\"summit2-stat-label\">Stage &#038; Date<\/p>\n            <p class=\"summit2-stat-value\">Stage 10, Jul 14<\/p>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"summit2-context\">\n        <strong>Via Puy Mary and Pas de Peyrol.<\/strong> Massif Central: repeated short punchy ramps. Bastille Day crowd intensity is unmatched.\n      <\/div>\n\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The Puy Mary and Pas de Peyrol are the emotional core of this stage. The Massif Central&#8217;s volcanic terrain produces a different climbing experience from the Alps or Pyrenees: no single ramp is long enough to allow sustained power advantages, but the relentless rolling demands threshold power held repeatedly. Riders who respond best to short sharp accelerations rather than 20-minute sustained efforts tend to dominate Bastille Day in the Massif Central. The French crowd on July 14 is among the loudest in cycling.<\/p>\n\n\n\n<style>\n.summit3-card-wrap {\n  max-width: 960px;\n  margin: 2rem auto;\n  font-family: 'DM Sans', sans-serif;\n}\n\n.summit3-card {\n  background: #ffffff;\n  border-radius: 20px;\n  border: 1px solid rgba(99,153,34,0.25);\n  overflow: hidden;\n}\n\n.summit3-card-header {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 1.2rem 1.5rem 0.9rem;\n  border-bottom: 1px solid rgba(99,153,34,0.15);\n  background: #EFEEEB;\n}\n\n.summit3-card-title {\n  font-family: 'Galibier', sans-serif !important;\n  font-size: 1.2rem !important;\n  font-weight: 700 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 1.5px !important;\n  color: #111 !important;\n  margin: 0 !important;\n  line-height: 1.2 !important;\n  padding: 0 !important;\n  border: none !important;\n  flex: 1;\n}\n\n.summit3-card-badge {\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  background: #FFC72C;\n  color: #000;\n  padding: 4px 10px;\n  border-radius: 12px;\n  border: 1px solid rgba(0,0,0,0.1);\n  white-space: nowrap;\n}\n\n.summit3-card-body {\n  padding: 1.2rem 1.5rem 1.5rem;\n}\n\n\/* Stat grid *\/\n.summit3-stats {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 0.8rem 1.5rem;\n  margin-bottom: 1rem;\n}\n\n.summit3-stat {\n  display: flex;\n  align-items: flex-start;\n  gap: 8px;\n}\n\n.summit3-stat-icon {\n  width: 20px;\n  height: 20px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  color: #27500A;\n  margin-top: 2px;\n}\n\n.summit3-stat-icon svg {\n  width: 16px;\n  height: 16px;\n  stroke: #27500A;\n}\n\n.summit3-stat-text {\n  flex: 1;\n}\n\n.summit3-stat-label {\n  font-family: 'Galibier', sans-serif;\n  font-size: 0.68rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.6px;\n  color: #27500A;\n  margin: 0 0 2px 0;\n}\n\n.summit3-stat-value {\n  font-size: 0.85rem;\n  color: #1a1a1a;\n  font-weight: 500;\n  margin: 0;\n  line-height: 1.4;\n}\n\n.summit3-stat-value strong {\n  font-weight: 600;\n  color: #000;\n}\n\n\/* Context note *\/\n.summit3-context {\n  border-top: 1px solid rgba(99,153,34,0.15);\n  padding-top: 0.8rem;\n  font-size: 0.85rem;\n  color: #1a1a1a;\n  line-height: 1.6;\n}\n\n.summit3-context strong {\n  font-weight: 600;\n  color: #000;\n}\n\n@media (max-width: 500px) {\n  .summit3-stats {\n    grid-template-columns: 1fr;\n  }\n}\n<\/style>\n\n<div class=\"summit3-card-wrap\">\n  <div class=\"summit3-card\">\n    \n    <div class=\"summit3-card-header\">\n      <h3 class=\"summit3-card-title\">Summit 3: Plateau de Solaison \u2014 Stage 15 (NEW \u2014 Steepest Summit Finish)<\/h3>\n      <span class=\"summit3-card-badge\">NEW<\/span>\n    <\/div>\n\n    <div class=\"summit3-card-body\">\n      \n      <div class=\"summit3-stats\">\n        <!-- Length -->\n        <div class=\"summit3-stat\">\n          <div class=\"summit3-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"\/><polyline points=\"7 8 3 12 7 16\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit3-stat-text\">\n            <p class=\"summit3-stat-label\">Length<\/p>\n            <p class=\"summit3-stat-value\">11.3 km<\/p>\n          <\/div>\n        <\/div>\n\n        <!-- Avg Gradient -->\n        <div class=\"summit3-stat\">\n          <div class=\"summit3-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <polyline points=\"3 17 9 11 13 15 21 5\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit3-stat-text\">\n            <p class=\"summit3-stat-label\">Avg Gradient<\/p>\n            <p class=\"summit3-stat-value\"><strong>9.1%<\/strong> \u2014 steepest of the race<\/p>\n          <\/div>\n        <\/div>\n\n        <!-- Altitude -->\n        <div class=\"summit3-stat\">\n          <div class=\"summit3-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit3-stat-text\">\n            <p class=\"summit3-stat-label\">Altitude<\/p>\n            <p class=\"summit3-stat-value\">1,471 m<\/p>\n          <\/div>\n        <\/div>\n\n        <!-- Stage & Date -->\n        <div class=\"summit3-stat\">\n          <div class=\"summit3-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"\/><line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"\/><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"\/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit3-stat-text\">\n            <p class=\"summit3-stat-label\">Stage &#038; Date<\/p>\n            <p class=\"summit3-stat-value\">Stage 15, Jul 19<\/p>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"summit3-context\">\n        <strong>NEW summit finish.<\/strong> Steepest average of the race. North-facing, cold, unknown terrain. No prior Tour reference.\n      <\/div>\n\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Plateau de Solaison is the 2026 Tour&#8217;s wildcard summit. At 9.1% average over 11.3 km, it carries the steepest average gradient of any summit finish in the race \u2014 steeper than Alpe d&#8217;Huez (8.1%), steeper than Gavarnie (4%), steeper than Orci\u00e8res-Merlette. No team has prior performance data on this climb from the Tour. Several sections exceed 12%. The north-facing aspect means the summit road sits in shadow for most of the afternoon. Temperatures at 1,471 metres drop rapidly after 16:00 even in July. Solaison is where ASO has hidden the biggest surprise of the Tour de France 2026 route.<\/p>\n\n\n\n<style>\n.summit4-card-wrap {\n  max-width: 960px;\n  margin: 2rem auto;\n  font-family: 'DM Sans', sans-serif;\n}\n\n.summit4-card {\n  background: #ffffff;\n  border-radius: 20px;\n  border: 1px solid rgba(99,153,34,0.25);\n  overflow: hidden;\n}\n\n.summit4-card-header {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 1.2rem 1.5rem 0.9rem;\n  border-bottom: 1px solid rgba(99,153,34,0.15);\n  background: #EFEEEB;\n}\n\n.summit4-card-title {\n  font-family: 'Galibier', sans-serif !important;\n  font-size: 1.2rem !important;\n  font-weight: 700 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 1.5px !important;\n  color: #111 !important;\n  margin: 0 !important;\n  line-height: 1.2 !important;\n  padding: 0 !important;\n  border: none !important;\n  flex: 1;\n}\n\n.summit4-card-badge {\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  background: #FFC72C;\n  color: #000;\n  padding: 4px 10px;\n  border-radius: 12px;\n  border: 1px solid rgba(0,0,0,0.1);\n  white-space: nowrap;\n}\n\n.summit4-card-body {\n  padding: 1.2rem 1.5rem 1.5rem;\n}\n\n\/* Stat grid *\/\n.summit4-stats {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 0.8rem 1.5rem;\n  margin-bottom: 1rem;\n}\n\n.summit4-stat {\n  display: flex;\n  align-items: flex-start;\n  gap: 8px;\n}\n\n.summit4-stat-icon {\n  width: 20px;\n  height: 20px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  color: #27500A;\n  margin-top: 2px;\n}\n\n.summit4-stat-icon svg {\n  width: 16px;\n  height: 16px;\n  stroke: #27500A;\n}\n\n.summit4-stat-text {\n  flex: 1;\n}\n\n.summit4-stat-label {\n  font-family: 'Galibier', sans-serif;\n  font-size: 0.68rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.6px;\n  color: #27500A;\n  margin: 0 0 2px 0;\n}\n\n.summit4-stat-value {\n  font-size: 0.85rem;\n  color: #1a1a1a;\n  font-weight: 500;\n  margin: 0;\n  line-height: 1.4;\n}\n\n.summit4-stat-value strong {\n  font-weight: 600;\n  color: #000;\n}\n\n\/* Context note *\/\n.summit4-context {\n  border-top: 1px solid rgba(99,153,34,0.15);\n  padding-top: 0.8rem;\n  font-size: 0.85rem;\n  color: #1a1a1a;\n  line-height: 1.6;\n}\n\n.summit4-context strong {\n  font-weight: 600;\n  color: #000;\n}\n\n@media (max-width: 500px) {\n  .summit4-stats {\n    grid-template-columns: 1fr;\n  }\n}\n<\/style>\n\n<div class=\"summit4-card-wrap\">\n  <div class=\"summit4-card\">\n    \n    <div class=\"summit4-card-header\">\n      <h3 class=\"summit4-card-title\">Summit 4: Orci\u00e8res-Merlette \u2014 Stage 18<\/h3>\n      <span class=\"summit4-card-badge\">STAGE 18<\/span>\n    <\/div>\n\n    <div class=\"summit4-card-body\">\n      \n      <div class=\"summit4-stats\">\n        <!-- Final Climb length -->\n        <div class=\"summit4-stat\">\n          <div class=\"summit4-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"\/><polyline points=\"7 8 3 12 7 16\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit4-stat-text\">\n            <p class=\"summit4-stat-label\">Final Climb<\/p>\n            <p class=\"summit4-stat-value\">7.1 km<\/p>\n          <\/div>\n        <\/div>\n\n        <!-- Avg Gradient -->\n        <div class=\"summit4-stat\">\n          <div class=\"summit4-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <polyline points=\"3 17 9 11 13 15 21 5\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit4-stat-text\">\n            <p class=\"summit4-stat-label\">Avg Gradient<\/p>\n            <p class=\"summit4-stat-value\">6.7% final<\/p>\n          <\/div>\n        <\/div>\n\n        <!-- Altitude -->\n        <div class=\"summit4-stat\">\n          <div class=\"summit4-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit4-stat-text\">\n            <p class=\"summit4-stat-label\">Altitude<\/p>\n            <p class=\"summit4-stat-value\">1,850 m<\/p>\n          <\/div>\n        <\/div>\n\n        <!-- Stage & Date -->\n        <div class=\"summit4-stat\">\n          <div class=\"summit4-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"\/><line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"\/><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"\/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit4-stat-text\">\n            <p class=\"summit4-stat-label\">Stage &#038; Date<\/p>\n            <p class=\"summit4-stat-value\">Stage 18, Jul 23<\/p>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"summit4-context\">\n        <strong>Via Col de Manse + Col du Festre.<\/strong> Last visited 2020 (Roglic). Oca\u00f1a\u2019s legendary 1971 exploit. First of three consecutive Alp summits.\n      <\/div>\n\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Orci\u00e8res-Merlette is steeped in Tour history. In 1971, Luis Oca\u00f1a attacked on this finish after riding solo for 60 kilometres, finishing 9 minutes ahead of Eddy Merckx. In 2020, Primoz Roglic won on Stage 4 as the race began. In 2026, the stage structure stair-steps through the Is\u00e8re valley via Col de Manse and Col du Festre before the steady 7.1 km final ramp. At 1,850 metres altitude, the oxygen deficit builds quickly on the final climb regardless of gradient. Stage 18 opens the Alpine trilogy. How GC leaders arrive here determines the tactics of Stages 19 and 20.<\/p>\n\n\n\n<style>\n.summit5-card-wrap {\n  max-width: 960px;\n  margin: 2rem auto;\n  font-family: 'DM Sans', sans-serif;\n}\n\n.summit5-card {\n  background: #ffffff;\n  border-radius: 20px;\n  border: 1px solid rgba(99,153,34,0.25);\n  overflow: hidden;\n}\n\n.summit5-card-header {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 1.2rem 1.5rem 0.9rem;\n  border-bottom: 1px solid rgba(99,153,34,0.15);\n  background: #EFEEEB;\n}\n\n.summit5-card-title {\n  font-family: 'Galibier', sans-serif !important;\n  font-size: 1.2rem !important;\n  font-weight: 700 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 1.5px !important;\n  color: #111 !important;\n  margin: 0 !important;\n  line-height: 1.2 !important;\n  padding: 0 !important;\n  border: none !important;\n  flex: 1;\n}\n\n.summit5-card-badge {\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  background: #FFC72C;\n  color: #000;\n  padding: 4px 10px;\n  border-radius: 12px;\n  border: 1px solid rgba(0,0,0,0.1);\n  white-space: nowrap;\n}\n\n.summit5-card-body {\n  padding: 1.2rem 1.5rem 1.5rem;\n}\n\n\/* Stat grid *\/\n.summit5-stats {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 0.8rem 1.5rem;\n  margin-bottom: 1rem;\n}\n\n.summit5-stat {\n  display: flex;\n  align-items: flex-start;\n  gap: 8px;\n}\n\n.summit5-stat-icon {\n  width: 20px;\n  height: 20px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n  color: #27500A;\n  margin-top: 2px;\n}\n\n.summit5-stat-icon svg {\n  width: 16px;\n  height: 16px;\n  stroke: #27500A;\n}\n\n.summit5-stat-text {\n  flex: 1;\n}\n\n.summit5-stat-label {\n  font-family: 'Galibier', sans-serif;\n  font-size: 0.68rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.6px;\n  color: #27500A;\n  margin: 0 0 2px 0;\n}\n\n.summit5-stat-value {\n  font-size: 0.85rem;\n  color: #1a1a1a;\n  font-weight: 500;\n  margin: 0;\n  line-height: 1.4;\n}\n\n.summit5-stat-value strong {\n  font-weight: 600;\n  color: #000;\n}\n\n\/* Context note *\/\n.summit5-context {\n  border-top: 1px solid rgba(99,153,34,0.15);\n  padding-top: 0.8rem;\n  font-size: 0.85rem;\n  color: #1a1a1a;\n  line-height: 1.6;\n}\n\n.summit5-context strong {\n  font-weight: 600;\n  color: #000;\n}\n\n@media (max-width: 500px) {\n  .summit5-stats {\n    grid-template-columns: 1fr;\n  }\n}\n<\/style>\n\n<div class=\"summit5-card-wrap\">\n  <div class=\"summit5-card\">\n    \n    <div class=\"summit5-card-header\">\n      <h3 class=\"summit5-card-title\">Summit 5: Alpe d\u2019Huez \u2014 Stages 19 &amp; 20 (First Back-to-Back in Tour History)<\/h3>\n      <span class=\"summit5-card-badge\">BACK-TO-BACK<\/span>\n    <\/div>\n\n    <div class=\"summit5-card-body\">\n      \n      <div class=\"summit5-stats\">\n        <!-- Climb length -->\n        <div class=\"summit5-stat\">\n          <div class=\"summit5-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"\/><polyline points=\"7 8 3 12 7 16\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit5-stat-text\">\n            <p class=\"summit5-stat-label\">Classic Ascent<\/p>\n            <p class=\"summit5-stat-value\">13.8 km<\/p>\n          <\/div>\n        <\/div>\n\n        <!-- Avg Gradient -->\n        <div class=\"summit5-stat\">\n          <div class=\"summit5-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <polyline points=\"3 17 9 11 13 15 21 5\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit5-stat-text\">\n            <p class=\"summit5-stat-label\">Avg Gradient<\/p>\n            <p class=\"summit5-stat-value\">8.1%<\/p>\n          <\/div>\n        <\/div>\n\n        <!-- Altitude -->\n        <div class=\"summit5-stat\">\n          <div class=\"summit5-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87L18.18 21 12 17.77 5.82 21 7 14.14 2 9.27l6.91-1.01L12 2z\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit5-stat-text\">\n            <p class=\"summit5-stat-label\">Summit<\/p>\n            <p class=\"summit5-stat-value\">1,860 m<\/p>\n          <\/div>\n        <\/div>\n\n        <!-- Stages & Dates -->\n        <div class=\"summit5-stat\">\n          <div class=\"summit5-stat-icon\">\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"\/><line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"\/><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"\/><line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"\/>\n            <\/svg>\n          <\/div>\n          <div class=\"summit5-stat-text\">\n            <p class=\"summit5-stat-label\">Stages &#038; Dates<\/p>\n            <p class=\"summit5-stat-value\">S19 (Jul 24) + S20 (Jul 25)<\/p>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"summit5-context\">\n        <strong>21 hairpins.<\/strong> Hairpin 21 at base, hairpin 1 at summit. First two km avg ~10%. Dutch Corner at hairpin 7.\n      <\/div>\n\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Alpe d&#8217;Huez is 13.8 km at 8.1% from Le Bourg-d&#8217;Oisans to the summit resort. The 21 numbered hairpins are each named after a Tour de France winner, from Fausto Coppi at hairpin 21 to a blank awaiting the 2026 champion at hairpin 1. The first two kilometres average close to 10%. Hairpins 10 and 11 push into double digits. The Dutch Corner at hairpin 7 is typically the densest crowd point in professional cycling \u2014 tens of thousands of fans camped on the mountainside for days, the road barely wide enough for the riders to pass.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Stage 19 uses the classic approach: Col Bayard, Col du Noyer, Col d&#8217;Ornon, then the full 13.8 km Alpe ascent. Stage 20 attacks from a completely different direction \u2014 Col de la Croix de Fer, Col du T\u00e9l\u00e9graphe, Col du Galibier, Col de Sarenne, then the final 3.8 km section at 6.1% onto the Alpe d&#8217;Huez resort road. Two consecutive days finishing on the same mountain for the first time in Tour de France history.<\/p>\n\n\n<style>.wp-block-kadence-spacer.kt-block-spacer-6973_ae8c74-2c .kt-block-spacer{height:44px;}.wp-block-kadence-spacer.kt-block-spacer-6973_ae8c74-2c .kt-divider{border-top-width:1px;height:1px;border-top-color:#eee;width:80%;border-top-style:solid;}<\/style>\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-6973_ae8c74-2c\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><hr class=\"kt-divider\"\/><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\" style=\"text-transform:uppercase\">All Major Climbs \u2014 Confirmed Elevation Data<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Every significant categorised climb confirmed from ASO official 2026 route descriptions, profile data, and stage files. New climbs highlighted.<\/p>\n\n\n\n<style>\n.climbs-table-wrap {\n  max-width: 960px;\n  margin: 2rem auto;\n  font-family: 'DM Sans', sans-serif;\n}\n\n.climbs-table-card {\n  background: #ffffff;\n  border-radius: 20px;\n  border: 1px solid rgba(99,153,34,0.25);\n  overflow: hidden;\n}\n\n.climbs-table-header {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 1.2rem 1.5rem 0.9rem;\n  border-bottom: 1px solid rgba(99,153,34,0.15);\n  background: #EFEEEB;\n}\n\n.climbs-table-title {\n  font-family: 'Galibier', sans-serif !important;\n  font-size: 1.2rem !important;\n  font-weight: 700 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 1.5px !important;\n  color: #111 !important;\n  margin: 0 !important;\n  line-height: 1.2 !important;\n  padding: 0 !important;\n  border: none !important;\n  flex: 1;\n}\n\n.climbs-table-badge {\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  background: #EAF3DE;\n  color: #27500A;\n  padding: 4px 10px;\n  border-radius: 12px;\n  border: 1px solid rgba(99,153,34,0.3);\n  white-space: nowrap;\n}\n\n.climbs-scroll {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n  background: #ffffff;\n}\n\n.climbs-table {\n  width: 100%;\n  border-collapse: collapse;\n  min-width: 700px;\n  font-size: 0.85rem;\n  color: #1a1a1a;\n}\n\n.climbs-table thead th {\n  font-family: 'Galibier', sans-serif;\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.6px;\n  color: #555;\n  text-align: left;\n  padding: 0.7rem 0.9rem;\n  background: #EFEEEB;\n  border-bottom: 1px solid rgba(99,153,34,0.2);\n  white-space: nowrap;\n}\n\n.climbs-table tbody td {\n  padding: 0.7rem 0.9rem;\n  border-bottom: 1px solid rgba(99,153,34,0.08);\n  vertical-align: top;\n  line-height: 1.4;\n}\n\n.climbs-table tbody tr:hover {\n  background: #F8F8F6;\n}\n\n.climbs-table tbody tr:last-child td {\n  border-bottom: none;\n}\n\n.climb-name {\n  font-weight: 600;\n  color: #111;\n}\n\n.climb-new {\n  display: inline-block;\n  background: #FFC72C;\n  color: #000;\n  font-size: 0.65rem;\n  font-weight: 700;\n  padding: 2px 6px;\n  border-radius: 4px;\n  vertical-align: middle;\n  margin-left: 4px;\n}\n\n.climb-context {\n  font-size: 0.85rem;\n  color: #444;\n}\n\n\/* Responsive *\/\n@media (max-width: 600px) {\n  .climbs-table thead th,\n  .climbs-table tbody td {\n    padding: 0.5rem 0.6rem;\n    font-size: 0.8rem;\n  }\n}\n<\/style>\n\n<div class=\"climbs-table-wrap\">\n  <div class=\"climbs-table-card\">\n    \n    <div class=\"climbs-table-header\">\n      <h3 class=\"climbs-table-title\">Confirmed Key Climbs &amp; Elevation Data<\/h3>\n      <span class=\"climbs-table-badge\">All Stages<\/span>\n    <\/div>\n\n    <div class=\"climbs-scroll\">\n      <table class=\"climbs-table\">\n        <thead>\n          <tr>\n            <th>Climb<\/th>\n            <th>Stage<\/th>\n            <th>Length<\/th>\n            <th>Avg %<\/th>\n            <th>Summit<\/th>\n            <th>Status \/ Context<\/th>\n          <\/tr>\n        <\/thead>\n        <tbody>\n          <tr>\n            <td class=\"climb-name\">C\u00f4te de Begues <span class=\"climb-new\">NEW<\/span><\/td>\n            <td>2<\/td>\n            <td>\u2014<\/td>\n            <td>\u2014<\/td>\n            <td>\u2014<\/td>\n            <td class=\"climb-context\">Mid-stage Tarragona\u2192Barcelona.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Collada de Toses<\/td>\n            <td>3<\/td>\n            <td>9.3 km<\/td>\n            <td>6.5%<\/td>\n            <td>\u2014<\/td>\n            <td class=\"climb-context\">Cross-border climb from Spain into France.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col du Calvaire<\/td>\n            <td>3<\/td>\n            <td>14.9 km<\/td>\n            <td>4.1%<\/td>\n            <td>1,836 m<\/td>\n            <td class=\"climb-context\">Cross-border pass to Les Angles. Longest climb of Stage 3.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col de Coudins<\/td>\n            <td>4<\/td>\n            <td>10.5 km<\/td>\n            <td>5.5%<\/td>\n            <td>\u2014<\/td>\n            <td class=\"climb-context\">Penultimate climb, Stage 4. Cathar country.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col de Monts\u00e9gur<\/td>\n            <td>4<\/td>\n            <td>6.9 km<\/td>\n            <td>6.6%<\/td>\n            <td>\u2014<\/td>\n            <td class=\"climb-context\">Final climb, Stage 4, 35km from Foix finish.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col d&#8217;Aspin<\/td>\n            <td>6<\/td>\n            <td>12 km<\/td>\n            <td>6.5%<\/td>\n            <td>1,490 m<\/td>\n            <td class=\"climb-context\">74th Tour appearance. Pyrenean classic. Stage 6 opener.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col du Tourmalet (via Campan)<\/td>\n            <td>6<\/td>\n            <td>17 km<\/td>\n            <td>7.3%<\/td>\n            <td>2,115 m<\/td>\n            <td class=\"climb-context\">91st Tour appearance \u2014 most in Tour history. Via Sainte-Marie-de-Campan.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Mont\u00e9e de Gavarnie-G\u00e8dre <span class=\"climb-new\">NEW<\/span><\/td>\n            <td>6<\/td>\n            <td>18.7 km<\/td>\n            <td>4%<\/td>\n            <td>~1,350 m<\/td>\n            <td class=\"climb-context\">NEW summit finish. UNESCO Cirque de Gavarnie backdrop.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col de la Griffoul <span class=\"climb-new\">NEW<\/span><\/td>\n            <td>10<\/td>\n            <td>\u2014<\/td>\n            <td>\u2014<\/td>\n            <td>\u2014<\/td>\n            <td class=\"climb-context\">Stage 10 approach to Puy Mary.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Puy Mary \/ Pas de Peyrol<\/td>\n            <td>10<\/td>\n            <td>\u2014<\/td>\n            <td>\u2014<\/td>\n            <td>1,589 m<\/td>\n            <td class=\"climb-context\">Massif Central summit. Bastille Day stage centrepiece.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col du Page <span class=\"climb-new\">NEW<\/span><\/td>\n            <td>14<\/td>\n            <td>\u2014<\/td>\n            <td>\u2014<\/td>\n            <td>\u2014<\/td>\n            <td class=\"climb-context\">Vosges Stage 14.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col du Haag <span class=\"climb-new\">NEW<\/span><\/td>\n            <td>14<\/td>\n            <td>\u2014<\/td>\n            <td>\u2014<\/td>\n            <td>\u2014<\/td>\n            <td class=\"climb-context\">Vosges Stage 14.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Grand Ballon<\/td>\n            <td>14<\/td>\n            <td>\u2014<\/td>\n            <td>\u2014<\/td>\n            <td>1,424 m<\/td>\n            <td class=\"climb-context\">Highest Vosges summit. Familiar Tour climb.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Plateau de Solaison <span class=\"climb-new\">NEW<\/span><\/td>\n            <td>15<\/td>\n            <td>11.3 km<\/td>\n            <td>9.1%<\/td>\n            <td>1,471 m<\/td>\n            <td class=\"climb-context\">NEW summit finish. Steepest avg of race. North-facing, cold.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col du Manse<\/td>\n            <td>18<\/td>\n            <td>\u2014<\/td>\n            <td>\u2014<\/td>\n            <td>\u2014<\/td>\n            <td class=\"climb-context\">Stage 18 approach to Orci\u00e8res. Cat 1.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col du Festre<\/td>\n            <td>18<\/td>\n            <td>\u2014<\/td>\n            <td>\u2014<\/td>\n            <td>\u2014<\/td>\n            <td class=\"climb-context\">Stage 18 penultimate climb before Orci\u00e8res.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Orci\u00e8res-Merlette (final climb)<\/td>\n            <td>18<\/td>\n            <td>7.1 km<\/td>\n            <td>6.7%<\/td>\n            <td>1,850 m<\/td>\n            <td class=\"climb-context\">Altitude finish. Oca\u00f1a legend (1971). Roglic won here 2020.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col Bayard<\/td>\n            <td>19<\/td>\n            <td>5.1 km<\/td>\n            <td>7.2%<\/td>\n            <td>\u2014<\/td>\n            <td class=\"climb-context\">Stage 19 opener. Breakaway platform.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col du Noyer<\/td>\n            <td>19<\/td>\n            <td>7.2 km<\/td>\n            <td>8.5%<\/td>\n            <td>\u2014<\/td>\n            <td class=\"climb-context\">Sharpest regular pass of Stage 19. First major GC selection point.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col d&#8217;Ornon<\/td>\n            <td>19<\/td>\n            <td>5.6 km<\/td>\n            <td>6.2%<\/td>\n            <td>\u2014<\/td>\n            <td class=\"climb-context\">Penultimate climb, Stage 19. 35km from Alpe d&#8217;Huez base.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Alpe d&#8217;Huez \u2014 Classic Ascent<\/td>\n            <td>19+20<\/td>\n            <td>13.8 km<\/td>\n            <td>8.1%<\/td>\n            <td>1,860 m<\/td>\n            <td class=\"climb-context\">21 hairpins. First \u00d72 consecutive in Grand Tour history. Dutch Corner at hairpin 7.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col de la Croix de Fer<\/td>\n            <td>20<\/td>\n            <td>24 km<\/td>\n            <td>5.2%<\/td>\n            <td>2,067 m<\/td>\n            <td class=\"climb-context\">Queen Stage opener. Long grinding approach.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col du T\u00e9l\u00e9graphe<\/td>\n            <td>20<\/td>\n            <td>11.9 km<\/td>\n            <td>7.1%<\/td>\n            <td>1,566 m<\/td>\n            <td class=\"climb-context\">Flows directly onto Galibier with minimal descent.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col du Galibier \u2014 Roof of 2026<\/td>\n            <td>20<\/td>\n            <td>17.7 km<\/td>\n            <td>6.9%<\/td>\n            <td><strong>2,642 m \u2b50<\/strong><\/td>\n            <td class=\"climb-context\">Highest point of 2026 Tour. 74% air pressure. Final km above 9%.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Col de Sarenne \u2014 SE flank (NEW direction) <span class=\"climb-new\">NEW<\/span><\/td>\n            <td>20<\/td>\n            <td>12.9 km<\/td>\n            <td>7.3%<\/td>\n            <td>\u2014<\/td>\n            <td class=\"climb-context\">Specifically repaved by ASO for 2026. Summit 15km from Alpe d&#8217;Huez finish.<\/td>\n          <\/tr>\n          <tr>\n            <td class=\"climb-name\">Alpe d&#8217;Huez \u2014 Sarenne finale<\/td>\n            <td>20<\/td>\n            <td>3.8 km<\/td>\n            <td>6.1%<\/td>\n            <td>1,860 m<\/td>\n            <td class=\"climb-context\">Post-Sarenne final section. Total Stage 20: 5,601m climbing.<\/td>\n          <\/tr>\n        <\/tbody>\n      <\/table>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n<style>.wp-block-kadence-spacer.kt-block-spacer-6973_aeac39-b1 .kt-block-spacer{height:36px;}.wp-block-kadence-spacer.kt-block-spacer-6973_aeac39-b1 .kt-divider{border-top-width:1px;height:1px;border-top-color:#eee;width:80%;border-top-style:solid;}<\/style>\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-6973_aeac39-b1\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><hr class=\"kt-divider\"\/><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-transform:uppercase\">Five Mountain Ranges \u2014 TOUR DE FRANCE 2026 Route Guide by Range<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tour de France 2026 is the first edition in recent years to cross all five major French mountain ranges. Each range has a distinct character that demands different physical and tactical responses from riders.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Pyrenees \u2014 Week 1 Route (Stages 3 &amp; 6)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The Pyrenees appear twice. Stage 3 crosses the eastern range via the Collada de Toses and Col du Calvaire \u2014 relatively accessible, high-altitude passes that introduce Pyrenean climbing on day three. Stage 6 is the full Central Pyrenees experience: Aspin, Tourmalet, and the new Gavarnie summit over 186 km. Pyrenean climbing character: sustained high-altitude ascents above 1,800m, exposed ridgeline passes with strong winds, and long climbs from relatively low bases. The Tourmalet&#8217;s eastern Sainte-Marie-de-Campan approach (17 km at 7.3%) is considered harder than the western Bar\u00e8ges approach by most climbers; the gradient is sustained rather than variable.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Massif Central \u2014 Week 1\/2 Route (Stages 9 &amp; 10)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The ancient volcanic plateau of the Massif Central dominates Stages 9 and 10. No col reaches alpine altitude; the Puy Mary tops at 1,589m, but the terrain never allows recovery. Stage 9&#8217;s 3,400m of climbing without a flat kilometre is a textbook Massif Central day. Stage 10&#8217;s Bastille Day summit at Le Lioran arrives via the Puy Mary volcanic landscape. Massif Central character: repeated short, sharp efforts at 4\u20138 minute power rather than sustained 20-minute alpine grinds. The volcanic rock creates a distinctive riding surface and the landscape is dramatically different from the more familiar Tour mountain settings.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Jura \u2014 Week 2 Route (Stage 13)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Stage 13&#8217;s 205 km from Dole to Belfort crosses the Jura limestone plateau, the longest stage of the race and the best breakaway terrain. The Jura character is rolling rather than mountainous: no single col stands out as a GC threat, but the accumulated fatigue of 205 km on undulating terrain is genuine. The Lion de Belfort statue at the finish, Bartholdi&#8217;s sandstone lion, predecessor to the Statue of Liberty, is one of the most striking stage finishes in the Tour de France 2026 route.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Vosges \u2014 Week 2 Route (Stage 14)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The Vosges Mountains are the Tour&#8217;s dark horse terrain. Rounded granitic summits, narrow forested roads, and climbing profiles that top out below 1,424m define Stage 14. Col du Page and Col du Haag are new to the Tour route. Grand Ballon and Le Markstein are familiar returns. Vosges character: repeated sub-5-minute explosive efforts rather than sustained gradient. Puncheurs and riders with explosive 4\u20136 minute power output perform disproportionately well here compared to their general Alpine performances. Stage 14 is the 2026 Tour&#8217;s hidden selection stage; its difficulty is underrated by the average gradient and summit altitude.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Alps \u2014 Week 2\/3 Route (Stages 15, 18, 19, 20)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The Alps deliver the 2026 Tour&#8217;s most decisive four stages. Stage 15&#8217;s Plateau de Solaison opens the Alpine block, a new summit finish at 9.1% average, the steepest in the race. Stage 18 approaches from the Is\u00e8re valley via Col de Manse and Col du Festre to Orci\u00e8res-Merlette. Stage 19 delivers Alpe d&#8217;Huez for the first time via Col Bayard, Col du Noyer, and Col d&#8217;Ornon. Stage 20, the Queen Stage, crosses the Croix de Fer, T\u00e9l\u00e9graphe, Galibier, and Sarenne before a second consecutive Alpe d&#8217;Huez summit. Alpine character: extreme altitude (Galibier at 2,642m), sustained 15\u201325 minute efforts, technical high-speed descents, and weather conditions that can change from 30\u00b0C at valley level to 5\u00b0C at the Galibier summit within a single stage.<\/p>\n\n\n<style>.wp-block-kadence-spacer.kt-block-spacer-6973_a1d241-c4 .kt-block-spacer{height:47px;}.wp-block-kadence-spacer.kt-block-spacer-6973_a1d241-c4 .kt-divider{border-top-width:1px;height:1px;border-top-color:#eee;width:80%;border-top-style:solid;}<\/style>\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-6973_a1d241-c4\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><hr class=\"kt-divider\"\/><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-transform:uppercase\">Spectators&#8217; Route Guide \u2014 Road Closures &amp; Access<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Watching the Tour de France costs nothing. There are no tickets for roadside viewing, no barriers between spectators and riders. It is one of the last great free sporting spectacles on earth, and the 2026 edition provides exceptional in-person opportunities at both the Barcelona Grand D\u00e9part and the historic Alpe d&#8217;Huez double finish.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">When Will the Riders Pass Through Your Area?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The peloton&#8217;s passing time can be calculated with reasonable accuracy from the stage rollout time and the average speed for the terrain. Use this guide:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Flat road at full race speed: approximately 42\u201346 km\/h average. A stage starting at 12:30 CET covers 42 km in roughly 60 minutes.<\/li>\n\n\n\n<li>Mountain ascent: approximately 20\u201322 km\/h on a Cat 1 or HC climb. The Tourmalet at 17 km takes roughly 50 minutes from the foot of the climb.<\/li>\n\n\n\n<li>Mountain descent: 65\u201380+ km\/h on open descents. The Galibier to Sarenne descent covers 30 km in approximately 25 minutes.<\/li>\n\n\n\n<li>To find the official passing time for your specific town: search &#8216;Tour de France 2026 horaire passage [your town name]&#8217; on Google. Local mairies and tourist offices publish confirmed passing times 4\u20136 weeks before the race.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Road Closure Rules \u2014 What You Need to Know<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tour de France roads are closed to all motorised traffic (cars, motorcycles, campervans) but remain open to cyclists and pedestrians throughout. Key rules:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mountain passes (Tourmalet, Alpe d&#8217;Huez, Galibier): typically close 24\u201348 hours before the stage for the most popular ascents. Early arrival is essential. The Alpe d&#8217;Huez road closes the afternoon before for both Stages 19 and 20, no vehicles above Le Bourg-d&#8217;Oisans after approximately 17:00 on July 23 and July 24.<\/li>\n\n\n\n<li style=\"margin-top:var(--wp--preset--spacing--30);margin-bottom:var(--wp--preset--spacing--30)\">Flat stage routes: roads close the morning of the stage, typically 4\u20136 hours before the peloton passes. Local police manage junctions and crossings.<\/li>\n\n\n\n<li>You can cycle the TDF route on the day of the race, right up until the Tour caravan (approximately 2 hours before riders) approaches your position \u2014 the gendarmerie will direct you off the road at that point.<\/li>\n\n\n\n<li style=\"margin-top:var(--wp--preset--spacing--30)\">Parking: approach roads close first. Arrive early and park outside the closure zone, then cycle or walk the final distance.<\/li>\n<\/ul>\n\n\n\n<style>\n.viewing-spots-wrap {\n  max-width: 960px;\n  margin: 2rem auto;\n  font-family: 'DM Sans', sans-serif;\n}\n\n.viewing-spots-card {\n  background: #ffffff;\n  border-radius: 20px;\n  border: 1px solid rgba(99,153,34,0.25);\n  overflow: hidden;\n}\n\n.viewing-spots-header {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 1.2rem 1.5rem 0.9rem;\n  border-bottom: 1px solid rgba(99,153,34,0.15);\n  background: #EFEEEB;\n}\n\n.viewing-spots-title {\n  font-family: 'Galibier', sans-serif !important;\n  font-size: 1.2rem !important;\n  font-weight: 700 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 1.5px !important;\n  color: #111 !important;\n  margin: 0 !important;\n  line-height: 1.2 !important;\n  padding: 0 !important;\n  border: none !important;\n  flex: 1;\n}\n\n.viewing-spots-badge {\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  background: #EAF3DE;\n  color: #27500A;\n  padding: 4px 10px;\n  border-radius: 12px;\n  border: 1px solid rgba(99,153,34,0.3);\n  white-space: nowrap;\n}\n\n\/* Spots list *\/\n.viewing-spots-list {\n  padding: 1rem 1.5rem 1.5rem;\n  display: flex;\n  flex-direction: column;\n  gap: 1rem;\n}\n\n.spot-item {\n  display: flex;\n  gap: 1rem;\n  padding: 1rem 1.2rem;\n  background: #ffffff;\n  border: 1px solid rgba(99,153,34,0.12);\n  border-radius: 14px;\n  transition: background 0.2s ease, border-color 0.2s ease;\n  align-items: flex-start;\n}\n\n.spot-item:hover {\n  background: #F8F8F6;\n  border-color: rgba(99,153,34,0.25);\n}\n\n.spot-num {\n  flex-shrink: 0;\n  width: 38px;\n  height: 38px;\n  border-radius: 50%;\n  background: #EAF3DE;\n  color: #27500A;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-family: 'Galibier', sans-serif;\n  font-size: 1.1rem;\n  font-weight: 700;\n  border: 2px solid rgba(99,153,34,0.3);\n}\n\n.spot-content {\n  flex: 1;\n  min-width: 0;\n}\n\n.spot-head {\n  display: flex;\n  align-items: baseline;\n  gap: 12px;\n  flex-wrap: wrap;\n  margin-bottom: 0.4rem;\n}\n\n.spot-location {\n  font-family: 'Galibier', sans-serif;\n  font-size: 1rem;\n  font-weight: 700;\n  color: #111;\n  letter-spacing: 0.3px;\n  line-height: 1.3;\n}\n\n.spot-stage {\n  font-size: 0.72rem;\n  font-weight: 600;\n  background: #FFC72C;\n  color: #000;\n  padding: 2px 10px;\n  border-radius: 20px;\n  white-space: nowrap;\n  letter-spacing: 0.5px;\n}\n\n.spot-desc {\n  font-size: 0.85rem;\n  color: #333;\n  line-height: 1.6;\n  margin: 0;\n}\n\n\/* Responsive *\/\n@media (max-width: 600px) {\n  .spot-item {\n    flex-direction: column;\n    gap: 0.8rem;\n    padding: 1rem;\n  }\n  .spot-head {\n    flex-direction: column;\n    gap: 4px;\n  }\n  .spot-stage {\n    align-self: flex-start;\n  }\n}\n<\/style>\n\n<div class=\"viewing-spots-wrap\">\n  <div class=\"viewing-spots-card\">\n    \n    <div class=\"viewing-spots-header\">\n      <h3 class=\"viewing-spots-title\">Best Viewing Spots on the 2026 Route<\/h3>\n      <span class=\"viewing-spots-badge\">Spectator Guide<\/span>\n    <\/div>\n\n    <div class=\"viewing-spots-list\">\n\n      <!-- Spot 1 -->\n      <div class=\"spot-item\">\n        <div class=\"spot-num\">1<\/div>\n        <div class=\"spot-content\">\n          <div class=\"spot-head\">\n            <span class=\"spot-location\">Alpe d\u2019Huez \u2014 Hairpin 7 (Dutch Corner)<\/span>\n            <span class=\"spot-stage\">S19 + S20<\/span>\n          <\/div>\n          <p class=\"spot-desc\">The most famous spectator point in cycling. Tens of thousands of Dutch fans camp here for days. The road disappears under people. Riders pass within arm\u2019s reach at the point where the stage is typically decided.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Spot 2 -->\n      <div class=\"spot-item\">\n        <div class=\"spot-num\">2<\/div>\n        <div class=\"spot-content\">\n          <div class=\"spot-head\">\n            <span class=\"spot-location\">Col du Tourmalet \u2014 Sainte-Marie-de-Campan approach<\/span>\n            <span class=\"spot-stage\">S6<\/span>\n          <\/div>\n          <p class=\"spot-desc\">91st Tour appearance \u2014 the most celebrated climb in cycling history. The Campan approach gives early access before the road closes. Riders are visible for the full final hour of climbing.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Spot 3 -->\n      <div class=\"spot-item\">\n        <div class=\"spot-num\">3<\/div>\n        <div class=\"spot-content\">\n          <div class=\"spot-head\">\n            <span class=\"spot-location\">Barcelona Montju\u00efc Olympic Circuit<\/span>\n            <span class=\"spot-stage\">S1 + S2<\/span>\n          <\/div>\n          <p class=\"spot-desc\">The TTT launch is the most accessible Grand D\u00e9part format \u2014 teams launch every 2\u20134 minutes and you can see every squad. Stage 2 circuit provides multiple viewing opportunities on the same lap.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Spot 4 -->\n      <div class=\"spot-item\">\n        <div class=\"spot-num\">4<\/div>\n        <div class=\"spot-content\">\n          <div class=\"spot-head\">\n            <span class=\"spot-location\">Puy Mary Summit \u2014 Bastille Day (Stage 10)<\/span>\n            <span class=\"spot-stage\">S10<\/span>\n          <\/div>\n          <p class=\"spot-desc\">The most emotionally charged stage of the race. French national holiday + Massif Central volcanic landscape + summit finish. Arrive July 13 (rest day) to secure a good position.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Spot 5 -->\n      <div class=\"spot-item\">\n        <div class=\"spot-num\">5<\/div>\n        <div class=\"spot-content\">\n          <div class=\"spot-head\">\n            <span class=\"spot-location\">Paris Montmartre \u2014 Rue Lepic<\/span>\n            <span class=\"spot-stage\">S21<\/span>\n          <\/div>\n          <p class=\"spot-desc\">The cobbled Rue Lepic in a holiday atmosphere \u2014 Paris bistros open, crowds lining the street. Three ascents in the final 15 km before the Champs-\u00c9lys\u00e9es. Free access from anywhere in Montmartre.<\/p>\n        <\/div>\n      <\/div>\n\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Can You Ride the 2026 Tour de France Route Yourself?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;\u00c9tape du Tour de France 2026 gives amateur cyclists the chance to ride Stage 20, Bourg-d&#8217;Oisans to Alpe d&#8217;Huez via the Croix de Fer, T\u00e9l\u00e9graphe, Galibier, and Sarenne, covering 170 km and 5,400 metres of climbing. The event is limited to approximately 16,000 riders and takes place on closed roads several weeks before the Tour. Registration at letapedutourdefrance.com. For those who want to ride the route informally. The Alpe d&#8217;Huez, Tourmalet, and Galibier are all publicly accessible climbs year-round when weather permits.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Is Your City on the Tour de France 2026 Route?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The full city list above covers every stage start and finish town. For towns between stages, search your commune name + &#8216;Tour de France 2026 horaire passage&#8217; on your local mairie (town hall) website, local authorities publish confirmed peloton passing times 4\u20136 weeks before the race.<\/p>\n\n\n<style>.wp-block-kadence-spacer.kt-block-spacer-6973_d3657f-ce .kt-block-spacer{height:38px;}.wp-block-kadence-spacer.kt-block-spacer-6973_d3657f-ce .kt-divider{border-top-width:1px;height:1px;border-top-color:#eee;width:80%;border-top-style:solid;}<\/style>\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-6973_d3657f-ce\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><hr class=\"kt-divider\"\/><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-transform:uppercase\">What the 2026 Route Means for the General Classification<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The architecture of the Tour de France 2026 route was designed to favour a complete rider, one who can team time trial, resist on short ITTs, and excel on explosive summit finishes. Pure rouleurs cannot win this Tour: 26 km of time trial is too short to recover minutes lost in the mountains. Pure climbers face the same problem: five summit finishes over three weeks is not enough to overcome a 30-second TTT deficit from a strong squad, and the Vosges stage will punish those without explosive short-power capacity.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why the Route Favours Poga\u010dar \u2014 and Where Vingegaard Can Win<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Tadej Poga\u010dar&#8217;s profile<\/strong> aligns with this route in every significant dimension. The TTT opener plays to UAE Team Emirates-XRG&#8217;s collective strength; they have not lost a WorldTour team time trial in over 18 months heading into this race. The short ITT removes the scenario where Vingegaard opens a 3-minute gap on flat ground. Five summit finishes give Poga\u010dar repeated opportunities to take bonus seconds at stages others concede. The Vosges stage suits his explosive short-power capacity. Nothing about the 2026 route is designed to disadvantage him.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Vingegaard&#8217;s path<\/strong> to yellow: win Stage 6 (Tourmalet-Gavarnie), limit ITT losses to under 45 seconds, and deliver a Stage 20 Galibier-Sarenne-Alpe performance that decisively exceeds Poga\u010dar. That is possible. The Giro-Tour double is the primary risk variable; five weeks between the Rome finale and the Barcelona start is short for recovery and peak re-preparation, but Vingegaard&#8217;s training team have been building his fitness specifically for this timeline since December.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Evenepoel Equation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Remco Evenepoel&#8217;s route<\/strong> to Tour victory requires four simultaneous conditions: limit TTT deficit to under 35 seconds, limit Stage 6 Tourmalet losses to under 1 minute, win Stage 16&#8217;s ITT outright, and then produce Stage 20 climbing that matches either Poga\u010dar or Vingegaard. The ITT advantage is the clearest pathway. If Evenepoel wins Stage 16 and the GC is within 90 seconds going into the Alpine finale, the 2026 Tour is genuinely three-way unpredictable. He would be the first Belgian to wear yellow since Lucien Van Impe in 1976.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Route Records Set in 2026<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Highest opening week climbing total in modern Tour history: ~16,200m by the end of Stage 6 (previous record: ~12,800m in 2023 Basque Grand D\u00e9part edition)<\/li>\n\n\n\n<li>First back-to-back summit finishes on the same mountain in Tour de France or Grand Tour history: Alpe d&#8217;Huez, Stages 19 + 20<\/li>\n\n\n\n<li>First stage-1 team time trial since 1971: Stage 1 Barcelona<\/li>\n\n\n\n<li>Col de Sarenne was used in new (south-eastern) direction for the first time in a professional race<\/li>\n\n\n\n<li>Six new climbs in a single edition \u2014 the highest count since 2019, according to ASO route analysis<\/li>\n<\/ul>\n\n\n<style>.wp-block-kadence-spacer.kt-block-spacer-6973_bae872-24 .kt-block-spacer{height:44px;}.wp-block-kadence-spacer.kt-block-spacer-6973_bae872-24 .kt-divider{border-top-width:1px;height:1px;border-top-color:#eee;width:80%;border-top-style:solid;}<\/style>\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-6973_bae872-24\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><hr class=\"kt-divider\"\/><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-transform:uppercase\">Tour de France Femmes 2026 Route<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Tour de France Femmes avec Zwift 2026 runs August 1\u20139, starting in Switzerland and finishing in Nice after 9 stages. The decisive stage is Stage 7 on August 7, a summit finish on Mont Ventoux via the Bedoin approach.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Route Overview \u2014 Tour de France Femmes 2026<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dates: August 1\u20139, 2026. Start: Switzerland. Finish: Nice (August 9). Stage 4: individual time trial into Dijon (21 km). Stage 7 (August 7): Mont Ventoux summit finish via Bedoin \u2014 16 km at 8.8% average, climbing to 1,912 metres. This is the first time Ventoux has appeared in the Tour de France Femmes. The Bedoin approach is the hardest of the three possible Ventoux routes, gaining 1,650 metres from bottom to summit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Broadcasters: Peacock (USA), SBS On Demand (Australia), TNT Sports\/Discovery+ (UK), France TV (France) \u2014 same rights holders as the men&#8217;s race in most markets. The same Peacock subscription covering the men&#8217;s Tour runs through the women&#8217;s finale on August 9.<\/p>\n\n\n<style>.wp-block-kadence-spacer.kt-block-spacer-6973_69be0b-67 .kt-block-spacer{height:41px;}.wp-block-kadence-spacer.kt-block-spacer-6973_69be0b-67 .kt-divider{border-top-width:1px;height:1px;border-top-color:#eee;width:80%;border-top-style:solid;}<\/style>\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-6973_69be0b-67\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><hr class=\"kt-divider\"\/><\/div><\/div>\n\n\n\n<style>\n.route-faq-wrap {\n  max-width: 960px;\n  margin: 2rem auto;\n  font-family: 'DM Sans', sans-serif;\n}\n\n.route-faq-card {\n  background: #ffffff;\n  border-radius: 20px;\n  border: 1px solid rgba(99,153,34,0.25);\n  overflow: hidden;\n}\n\n.route-faq-header {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 1.2rem 1.5rem 0.9rem;\n  border-bottom: 1px solid rgba(99,153,34,0.15);\n  background: #EFEEEB;\n}\n\n.route-faq-title {\n  font-family: 'Galibier', sans-serif !important;\n  font-size: 1.2rem !important;\n  font-weight: 700 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 1.5px !important;\n  color: #111 !important;\n  margin: 0 !important;\n  line-height: 1.2 !important;\n  padding: 0 !important;\n  border: none !important;\n  flex: 1;\n}\n\n.route-faq-badge {\n  font-size: 0.65rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.8px;\n  background: #EAF3DE;\n  color: #27500A;\n  padding: 4px 10px;\n  border-radius: 12px;\n  border: 1px solid rgba(99,153,34,0.3);\n  white-space: nowrap;\n}\n\n.route-faq-list {\n  padding: 0.8rem 1.5rem 1.5rem;\n  display: flex;\n  flex-direction: column;\n  gap: 0.5rem;\n}\n\n.route-faq-item {\n  background: rgba(255,255,255,0.45);\n  border: 1px solid rgba(99,153,34,0.12);\n  border-radius: 12px;\n  overflow: hidden;\n  transition: background 0.2s ease, border-color 0.2s ease;\n}\n\n.route-faq-item:hover {\n  background: #F8F8F6;\n  border-color: rgba(99,153,34,0.25);\n}\n\n.route-faq-item.open {\n  background: #ffffff;\n  border-color: rgba(99,153,34,0.3);\n}\n\n.route-faq-question {\n  width: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 1rem;\n  background: none;\n  border: none;\n  padding: 1rem 1.2rem;\n  cursor: pointer;\n  font-family: 'DM Sans', sans-serif;\n  font-size: 0.9rem;\n  font-weight: 600;\n  color: #111;\n  text-align: left;\n  line-height: 1.4;\n  transition: background 0.15s ease;\n}\n\n.route-faq-question:hover {\n  background: rgba(234,243,222,0.35);\n}\n\n.route-faq-question-text {\n  flex: 1;\n  min-width: 0;\n}\n\n.route-faq-icon {\n  width: 22px;\n  height: 22px;\n  flex-shrink: 0;\n  transition: transform 0.25s ease;\n  stroke: #27500A;\n}\n\n.route-faq-item.open .route-faq-icon {\n  transform: rotate(45deg);\n}\n\n.route-faq-answer {\n  max-height: 0;\n  overflow: hidden;\n  transition: max-height 0.4s ease, padding 0.4s ease;\n  padding: 0 1.2rem;\n  font-size: 0.85rem;\n  color: #1a1a1a;\n  line-height: 1.65;\n  background: rgba(255,255,255,0.2);\n  border-top: 1px solid transparent;\n}\n\n.route-faq-item.open .route-faq-answer {\n  max-height: 600px;\n  padding: 0.9rem 1.2rem 1.1rem;\n  border-top-color: rgba(99,153,34,0.1);\n}\n\n.route-faq-answer p {\n  margin: 0;\n}\n\n.route-faq-answer strong {\n  color: #000;\n  font-weight: 600;\n}\n\n\/* Responsive *\/\n@media (max-width: 600px) {\n  .route-faq-list {\n    padding: 0.6rem 1rem 1.2rem;\n  }\n  .route-faq-question {\n    padding: 0.9rem 1rem;\n    font-size: 0.85rem;\n  }\n  .route-faq-answer {\n    padding: 0 1rem;\n    font-size: 0.8rem;\n  }\n  .route-faq-item.open .route-faq-answer {\n    padding: 0.75rem 1rem 0.95rem;\n  }\n}\n<\/style>\n\n<div class=\"route-faq-wrap\">\n  <div class=\"route-faq-card\">\n    \n    <div class=\"route-faq-header\">\n      <h2 class=\"route-faq-title\">Tour de France 2026 Route \u2014 FAQs<\/h2>\n      <span class=\"route-faq-badge\">Route FAQ<\/span>\n    <\/div>\n\n    <div class=\"route-faq-list\" id=\"routeFaqAccordion\">\n\n      <!-- Q1 open by default -->\n      <div class=\"route-faq-item open\">\n        <button class=\"route-faq-question\" aria-expanded=\"true\">\n          <span class=\"route-faq-question-text\">Q: What is the route of Tour de France 2026?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p>Tour de France 2026 starts in Barcelona on July 4 with a 19.7km team time trial and finishes on the Champs-\u00c9lys\u00e9es in Paris on July 26. The route covers 3,333 km across 21 stages, passing through five mountain ranges \u2014 the Pyrenees, Massif Central, Jura, Vosges, and Alps \u2014 across seven French regions and three Catalan provinces. Key finishes include Gavarnie-G\u00e8dre (Stage 6), Le Lioran\/Puy Mary (Stage 10), Plateau de Solaison (Stage 15), Orci\u00e8res-Merlette (Stage 18), and Alpe d\u2019Huez on consecutive days (Stages 19 and 20).<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q2 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: How many mountain ranges does Tour de France 2026 cross?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p>Tour de France 2026 crosses <strong>five mountain ranges<\/strong> in route order: the Pyrenees (Stages 3 and 6), the Massif Central (Stages 9 and 10), the Jura (Stage 13), the Vosges (Stage 14), and the Alps (Stages 15, 18, 19, and 20). It is the first edition to include all five major French mountain ranges since 2023.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q3 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: What is the highest point of the Tour de France 2026 route?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p>The <strong>Col du Galibier<\/strong> at 2,642 metres is the highest point of the Tour de France 2026 route, reached in Stage 20 (the Queen Stage) on July 25. The Galibier is climbed via the Col du T\u00e9l\u00e9graphe approach at 17.7km and an average gradient of 6.9%. The final kilometres exceed 9% as the road rises above the snowline.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q4 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: What are the new climbs in Tour de France 2026?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p>Six climbs appear for the first time: C\u00f4te de Begues (Stage 2), Mont\u00e9e de Gavarnie-G\u00e8dre as a summit finish (Stage 6), Col de la Griffoul (Stage 10), Col du Page and Col du Haag (Stage 14), Plateau de Solaison as a summit finish (Stage 15), and the Col de Sarenne via its south-eastern flank (Stage 20), which ASO specifically repaved for this edition.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q5 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: What is the Alpe d\u2019Huez route profile?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p>The classic Alpe d\u2019Huez ascent is <strong>13.8km at 8.1%<\/strong>, climbing from ~720m to 1,860m. 21 hairpins (21 at bottom, 1 at top). First two km ~10%. Hairpins 10\u201311 enter double digits.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q6 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: Why does Tour de France 2026 include Alpe d\u2019Huez twice?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p>Stage 19 (July 24) reaches Alpe d\u2019Huez via Bayard, Noyer, and Ornon, then the classic 21-hairpin ascent. Stage 20 (July 25) takes a different route: Croix de Fer, T\u00e9l\u00e9graphe, Galibier, and Sarenne before the final 3.8km Alpe section. It\u2019s the first time in Tour history the same mountain hosts consecutive summit finishes.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q7 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: When was the 2026 Tour de France route announced?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p>The route was officially revealed on <strong>October 23, 2025<\/strong> at the Palais des Congr\u00e8s de Paris by race director Christian Prudhomme, about 8 months before the start.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q8 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: How many departments does Tour de France 2026 pass through?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p><strong>29 French departments<\/strong> plus 3 Catalan provinces in Spain, across 7 French administrative regions.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q9 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: What is the steepest climb on the Tour de France 2026 route?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p><strong>Plateau de Solaison<\/strong> (11.3km at 9.1%) is the steepest summit finish. Col du Noyer (7.2km at 8.5%) is the sharpest regular pass. Alpe d\u2019Huez averages 8.1% with ramps exceeding 10%.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q10 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: Where can I download the Tour de France 2026 route map PDF?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p>Official maps and stage profiles are free at <strong>letour.fr<\/strong> in the 2026 race section.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q11 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: What is the Tour de France 2026 route in Paris?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p>Stage 21 (130km) from Thoiry includes three ascents of the cobbled Rue Lepic on Montmartre, with the final ascent 15km before the Champs-\u00c9lys\u00e9es sprint.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q12 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: How many total climbs are in Tour de France 2026?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p><strong>30 major categorised climbs<\/strong>, including 5 summit finishes and 6 new climbs.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q13 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: What is the Col du Galibier route profile?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p>Climbed via T\u00e9l\u00e9graphe (11.9km\/7.1%), then almost without descent onto Galibier: 17.7km at 6.9% to 2,642m, final km above 9%.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q14 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: What is the Tour de France Femmes 2026 route?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p>Tour de France Femmes 2026: August 1\u20139, Switzerland to Nice. Summit finish on Mont Ventoux (Stage 7), ITT to Dijon (Stage 4).<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q15 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: Can I ride the Tour de France 2026 route myself?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p><strong>L&#8217;\u00c9tape du Tour 2026<\/strong> lets amateurs ride Stage 20 (170km, 5,400m climbing). Registration at letapedutourdefrance.com.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q16 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: What time do Tour de France 2026 road closures start?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p>Mountain passes close 24\u201348h before. Flat stages close morning of the race (~4\u20136h before). Roads remain open to cyclists until the caravan approaches.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q17 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: Which cities does Tour de France 2026 pass through?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p>The route includes Barcelona, Tarragona, Granollers (Spain), then Carcassonne, Foix, Pau, Gavarnie, Bordeaux, P\u00e9rigueux, Bergerac, Ussel, Aurillac, Vichy, Nevers, Dole, Belfort, Mulhouse, Champagnole, \u00c9vian-les-Bains, Chamb\u00e9ry, Voiron, Gap, Le Bourg-d\u2019Oisans, and Paris. 29 French departments, 3 Catalan provinces.<\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q18 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: What is the Queen Stage of Tour de France 2026?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p>Stage 20 (July 25): 171km, Bourg-d\u2019Oisans \u2192 Alpe d\u2019Huez via Croix de Fer, T\u00e9l\u00e9graphe, Galibier, Sarenne. <strong>5,600m+ climbing.<\/strong><\/p>\n        <\/div>\n      <\/div>\n\n      <!-- Q19 -->\n      <div class=\"route-faq-item\">\n        <button class=\"route-faq-question\" aria-expanded=\"false\">\n          <span class=\"route-faq-question-text\">Q: What is the most scenic stage route in Tour de France 2026?<\/span>\n          <svg class=\"route-faq-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\">\n            <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line>\n          <\/svg>\n        <\/button>\n        <div class=\"route-faq-answer\">\n          <p>Stage 20 (Galibier, Alpe d\u2019Huez) is the most dramatic. Stage 6 (Gavarnie-G\u00e8dre) offers the UNESCO Cirque de Gavarnie. Stage 16 (Lake Geneva ITT) and Stage 21 (Paris, Montmartre) provide iconic backdrops. Stage 1 TTT past Sagrada Fam\u00edlia and Montju\u00efc opens with a stunning urban spectacle.<\/p>\n        <\/div>\n      <\/div>\n\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function() {\n  const accordion = document.getElementById('routeFaqAccordion');\n  if (!accordion) return;\n\n  accordion.addEventListener('click', function(e) {\n    const button = e.target.closest('.route-faq-question');\n    if (!button) return;\n\n    const currentItem = button.closest('.route-faq-item');\n    const isOpen = currentItem.classList.contains('open');\n\n    \/\/ Close all items\n    accordion.querySelectorAll('.route-faq-item').forEach(item => {\n      item.classList.remove('open');\n      item.querySelector('.route-faq-question').setAttribute('aria-expanded', 'false');\n    });\n\n    \/\/ Open clicked item if it wasn't already open\n    if (!isOpen) {\n      currentItem.classList.add('open');\n      button.setAttribute('aria-expanded', 'true');\n    }\n  });\n})();\n<\/script>\n\n\n<style>.wp-block-kadence-spacer.kt-block-spacer-6973_2939f8-d8 .kt-block-spacer{height:40px;}.wp-block-kadence-spacer.kt-block-spacer-6973_2939f8-d8 .kt-divider{border-top-width:1px;height:1px;border-top-color:#eee;width:80%;border-top-style:solid;}<\/style>\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-6973_2939f8-d8\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><hr class=\"kt-divider\"\/><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"text-transform:uppercase\">The 2026 Tour de France Route Is Set. July 4, Barcelona.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">3,333 km. 54,450 metres of climbing. Five mountain ranges. Thirty categorised climbs. Six first appearances. Alpe d&#8217;Huez twice. The TDF 2026 route was built to produce one answer: who is the best rider in the world. Barcelona gives us the first clue on July 4. Alpe d&#8217;Huez gives us the last one on July 25.<\/p>\n\n\n<style>.wp-block-kadence-spacer.kt-block-spacer-6973_ca3a22-a0 .kt-block-spacer{height:44px;}.wp-block-kadence-spacer.kt-block-spacer-6973_ca3a22-a0 .kt-divider{border-top-width:1px;height:1px;border-top-color:#eee;width:80%;border-top-style:solid;}<\/style>\n<div class=\"wp-block-kadence-spacer aligncenter kt-block-spacer-6973_ca3a22-a0\"><div class=\"kt-block-spacer kt-block-spacer-halign-center\"><hr class=\"kt-divider\"\/><\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Related Coverage on This Site<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/franceletour.com\/tour-de-france-2026-schedule\/\">Stage Schedule &amp; Start Times \u2192 \/tour-de-france-2026-schedule<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/franceletour.com\/tour-de-france-2026-live\/\">Live Coverage Guide \u2014 All Broadcasters \u2192 \/tour-de-france-2026-live<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Tour de France 2026 Route: Complete Stage-by-Stage Guide, Elevation Profiles &amp; Maps Updated: July 10, 2026 \u00b7 21 Stages \u00b7 5 Mountain Ranges \u00b7 30 Major Climbs \u00b7 Barcelona \u2192 Paris This is the complete Tour de France 2026 route guide, all 21 stages with confirmed elevation profiles, climb gradients, week-by-week breakdown, new climbs, summit&#8230;<\/p>","protected":false},"author":1,"featured_media":6985,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"show","_kad_post_feature_position":"above","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-6973","page","type-page","status-publish","has-post-thumbnail","hentry"],"taxonomy_info":[],"featured_image_src_large":["https:\/\/franceletour.com\/wp-content\/uploads\/2026\/06\/tour-de-france-2026-route-map-1024x576.png",1024,576,true],"author_info":{"display_name":"Gautier Durfort","author_link":"https:\/\/franceletour.com\/fr\/author\/gautier-durfort\/"},"comment_info":0,"_links":{"self":[{"href":"https:\/\/franceletour.com\/fr\/wp-json\/wp\/v2\/pages\/6973","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/franceletour.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/franceletour.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/franceletour.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/franceletour.com\/fr\/wp-json\/wp\/v2\/comments?post=6973"}],"version-history":[{"count":17,"href":"https:\/\/franceletour.com\/fr\/wp-json\/wp\/v2\/pages\/6973\/revisions"}],"predecessor-version":[{"id":7083,"href":"https:\/\/franceletour.com\/fr\/wp-json\/wp\/v2\/pages\/6973\/revisions\/7083"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/franceletour.com\/fr\/wp-json\/wp\/v2\/media\/6985"}],"wp:attachment":[{"href":"https:\/\/franceletour.com\/fr\/wp-json\/wp\/v2\/media?parent=6973"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}