Demi Vollering has won a maiden Tour de France Femmes title after coming second in the individual time trial on stage eight.
Marlen Reusser won the final stage with a time of 29 minutes 15 seconds.
Dutch rider Vollering took possession of the yellow jersey on Saturday after a sensational stage seven win.
Her time of 29:25 in the time trial meant she finished three minutes three seconds ahead of Belgian team-mate Lotte Kopecky in the overall standings.
“I still cannot believe it,” Vollering, 26, said.
“Of course I worked hard, but it’s not only working hard, it’s believing in it. It’s so many things together in the end.
“You have your dream and you work really hard but you also need to keep calm and have balance in your life and find a relaxed way to do all this. This year, I feel really comfortable in what I’m doing.”
The SD Worx duo were joined on the podium by Poland’s Katarzyna Niewiadoma of Canyon-SRAM, who matched her finish in last year’s race, while defending champion Annemiek van Vleuten came fourth.
Reigning world champion Van Vleuten, 40, who is planning to retire at the end of the season, said: “Of course I am disappointed that I was not good in the last two days.
“I was in a battle and I gave it my all, I didn’t make any mistakes or do something wrong. I was obviously not myself as I can be, which is a bit sad in my last Tour de France.”
Kopecky finished the tour with the points jersey, while Niewiadoma took the polka-dot queen of the mountains jersey.
Stage eight results
1. Marlen Reusser (Swi/SD Worx) 29 mins 15 secs
2. Demi Vollering (Ned/SD Worx) +10secs
3. Lotte Kopecky (Bel/SD Worx) +38 secs
4. Grace Brown (Aus/FDJ-Suez) +40secs
5. Riejanne Markus (Ned/Jumbo-Visma) +50secs
1. Demi Vollering (Ned/SD Worx) 25hrs 17mins 35secs
2. Lotte Kopecky (Bel/SD Worx) +3mins 3secs
3. Katarzyna Niewiadoma (Pol/Canyon SRAM Racing) +3min 59secs
4. Annemiek van Vleuten (Ned/Movistar) +3mins 59secs
5. Juliette Labous (Fra/DSM-Firmenich) +4mins 48secs
6. Ashleigh Moolman-Pasio (SA/AG Soudal-Quickstep) +5mins 21secs
7. Cecilie Ludwig (Den/FDJ-Suez) +9mins 9secs
8. Ane Santesteban (Spa/Jayco-AlUla) +9mins 36secs
9. Ricarda Bauernfeind (Ger/Canyon-SRAM) +9mins 56secs
10. Amanda Spratt (Aus/Lidl-Trek) +10mins 14secs