AP Photo/David Zalubowski

Chalk it up to the human spirit.

For 50 minutes at Dick's Sporting Goods Park on Saturday, the Portland Timbers dominated the Colorado Rapids. The score was 1-0, but the game wasn't competitive. The Timbers were on cruise control.

Then, out of nothing, Colorado got a goal back to tie the game — and that all changed. As the second wore on, the Rapids did what the Rapids do at home: they dug deep. They Timbers did the opposite, and before they knew it, they'd been beaten by the Western Conference's worst team.

Three weeks ago, Colorado manager Pablo Mastroeni was the butt of every joke in MLS — one from Caleb Porter included — when he ended postgame tirade with the proclamation that "stats will lose to the human spirit every day." It doesn't sound all that funny right now.

Thing is, this was an absolutely needless defeat for a Timbers team that arrived in Denver with two straight shutout wins in tow and every reason to be confident.

Colorado, severely limited to begin with, was without two of its better attacking players in Shelzkan Gashi and Dillon Powers. They lined up a 26-year-old rookie USL veteran at right back left back. They'd played a number of starters midweek in the US Open Cup.

This could have been a mismatch. For fifty minutes, of course, it was.

The Timbers jumped all over the Rapids to start the game, and, within twenty minutes were in front when Sebastian Blanco charged into the box, cut back on former Seattle Sounder Michael Azira, and scored a beautiful goal that left Tim Howard convulsing with rage and his team with a hole to climb out of.

Blanco, especially dangerous in the first half, went close again with a long-range effort shortly before the break that Howard did well to beat out for a corner. Dairon Asprilla was bright, Diego Valeri was active, and half the Rapids players couldn't get anywhere near the ball. It was all going swimmingly.

Then, just two minutes after the restart, a pivotal sequence began when rookie Rapids center back Kortne Ford jumped onto Fanendo Adi's back trying to win a long ball — and, inexplicably, wasn't called for a foul. Adi picked himself up off the ground livid.

On the next play, he very nearly did something about it. Blanco cut inside on the end of an intricate Timbers move and got away a shot, which Howard blocked straight down, Adi did tremendously well to hold off Axel Sjöberg, and had a clean look at goal from six yards — but miscued his shot high and wide.

Not only would it have been a hugely satisfying goal for Adi, who takes a beating game in and game out and almost never gets calls, but it would have put the game away. Instead, three minutes later, it'd be 1-1 — Dominic Badji running onto Kevin Doyle's through ball and chipping Jake Gleeson to tie the game.

AP Photo/David Zalubowski

The goal lit a fire under the Rapids. Doyle, all of the sudden, couldn't miss a pass. Marlon Hariston started flying down the left wing. Gleeson was forced into a sensational save on a Doyle flicked header. The Timbers couldn't get out of their half, and the game hung in the balance.

It was a occasion made, in every way, for Alan Gordon. MLS' ultimate super-sub — scorer of thirteen career goals after the eightieth minute — sauntered onto the field in minute number 80 exactly. It wouldn't take him long to add to his legend.

With the clock ticking towards 90 minutes and the Rapids pushing for a winner, Mohammad Saeid lifted a cross in towards Gordon — who posted up Olum, and, turning, planted his header over Gleeson's outstretched left hand to bring the house down.

Gordon — who also victimized the Timbers in the 92nd minute of a game against the LA Galaxy at Providence Park in 2015 — ripped off his shirt and charged into the Rapids' supporters' section. For a club with a chip on its shoulder, this was just about the perfect evening.

It was also, frustratingly for Porter and his staff, a near-carbon copy of the Rapids' pre-international break comeback win over the Columbus Crew, which also finished 2-1 and featured a late game-winner from you know who.

Portland should have known that the Rapids, challenged as they might be, don't give up on games at home. But the Timbers weren't up for the second half, and their response to the first real adversity they've faced in weeks — Badji's goal against the run of play — was abysmal.

This was primarily a mental letdown, but there were tactical problems as well. Porter optimistically opted to start Darlington Nagbe in central midfield with David Guzman suspended, and paid the price.

Nagbe was absolutely invisible defensively, and offered zero as the Timbers began to get overrun in midfield. By the time Porter went to Amobi Okugo with ten minutes to go, his team was on the fritz. Nagbe ended the night without a single tackle, interception, or foul.

Olum, playing his 100th MLS game, was caught out on both goals — once for speed, and once for strength. He's a fine depth piece, but the Timbers are going to struggle more often than not with him starting at center back.

Time is ticking for Olum, regardless Liam Ridgewell's health, with the summer transfer window set to open at the beginning of July and Larrys Mabiala on his way in.

But this capitulation was about more than any one player. It was about the kind of softness — the notable lack of hunger — that derailed the Timbers' 2016. Dropping a point or three in June hardly makes a difference in the final telling of the season, but that kind of mentality often does.

Human spirit shouldn't have been enough to beat the Timbers on Saturday night. For a half and change, it wasn't enough to get Colorado even close. But when it was all said and done, between the altitude and the elbow grease, and the all-out effort, the Rapids scraped over the line.

What should trouble the Timbers is that their overmatched opponents deserved nothing less.