Avishka Fernando became the third youngest player to score a World Cup century as Sri Lanka disappointed the watching Rihanna by beating a valiant West Indies by 23 runs in a high-scoring dead-rubber game.
Fernando (104 off 103) hit his hundred at the age of 21 years and 87 days - only Ireland's Paul Stirling and former Australia captain Ricky Ponting have scored tons in the tournament at a more tender age - with the youngster's maiden ODI century lifting Sri Lanka to 338-6 in Durham.
Barbadian pop star Rihanna was in the crowd at the Emirates Riverside and would have felt West Indies were on course to pull off the record World Cup run chase - which remains the 329-7 Ireland scored against England in India in 2011 - after Nicholas Pooran (118 off 103) rallied his team from 199-6 with his first ODI ton.
But the left-hander, who put on 83 with the dynamic Fabian Allen (51 off 32) for the seventh wicket, slashed Angelo Mathews behind at the start of the 48th over with West Indies requiring 31 from 18 balls - Mathews delivering a fatal blow with his first ball in ODI cricket since December 2017.
Jason Holder's men were eventually limited to 315-9 and sit in ninth place in the table with just one win from eight games, but Sri Lanka - whose semi-final hopes were extinguished when England beat India on Sunday - are up to sixth after picking up their third victory and unearthing a real batting talent in the process.
Fernando played an innings described by Sri Lanka great Kumar Sangakkara as "masterful", with the right-hander striking nine fours and two sixes and sharing fifty stands with Kusal Mendis (39), Mathews (26) and Lahiru Thirimanne (45no).
Kusal Perera (64 off 51) bossed a 93-run opening stand with skipper Karunaratne (32) before the latter snicked Holder (2-59) behind and the former was run out by Sheldon Cottrell after a mix up with Fernando.
But Sri Lanka did not wilt after those dismissals, with Fernando - who showed his talent with cameos of 49 and 30 against England and South Africa respectively after being left out of his side's first five fixtures - lifting the Lions to their highest score of the competition.
Left-arm spinner Allen (1-44) was the most economical of the West Indies bowlers and dismissed Mendis off his own bowling with a superb catch diving to his right on what turned out to be a fine day for him personally, if not his team.
Sri Lanka's catching was not as sharp in the seventh over of the run chase, with Lasith Malinga having Shimron Hetmyer dropped at first slip by Mendis and Thirimanne unable to cling on to a sharp one-handed chance at square leg which would have removed Chris Gayle for 10.
West Indies were already two down by that point, though - Malinga dismissing Shai Hope and Sunil Ambris (5) - and when Gayle (35) became third man out with the score on 71, skying Chandrasekara Rajitha a ball after blazing him for six, Holder's men were in big trouble - even more so when Hetmyer (29) was run out.
Pooran kept West Indies in the game, sharing a fifty stand with Holder (26) and bossing one with Carlos Brathwaite (9), but when Brathwaite was dismissed after Isuru Udana tipped a shot from Pooran back onto the non-striker's stumps, the run chase appeared on the verge of fizzling out.
Pooran and Allen responded in fine style, though, and even when Allen was run out after a mix-up in the 45th over, one ball before his partner reached three figures, West Indies still had hope with Pooran at the crease - only for Mathews to then pick up the crucial wicket.
Speaking afterwards about Rihanna's appearance at Emirates Riverside, West Indies captain Holder said: "It was a pleasant surprise.
"It was great to see her here. I just want to personally thank her for coming out. I guess it's not easy for a celebrity to just come down to Durham to watch the West Indies play.
"I'm sure the boys felt her presence in the stands and she came down to the dressing room as well to meet quite a few of the players. That was also refreshing."
Watch every game of the Cricket World Cup live on Sky Sports, including India vs Bangladesh from 10am on Tuesday, England vs New Zealand from 10am on Wednesday and West Indies vs Afghanistan from 10am on Thursday.