SANTA CLARA, Calif. — We’ve seen enough of these Broncos to judge them. Let’s pass out grades.

As an NFL starting quarterback, isn’t it fair to give Case Keenum a D?

As a coach, Vance Joseph gets an A for effort, but an F for execution.

And, on balance, the Broncos are a C- football team.

You OK with aspiring to mediocrity, Broncos Country? Or are you grumpier than the Bowlen family, which exchanges legal notices rather than holiday cards?

“Mad and (ticked) at what?” Broncos linebacker Von Miller said Sunday, after Denver lost 20-14 to San Francisco.

Well, here’s what is sad: I can almost guarantee the vast majority of fans were angrier clicking off the television back in Colorado than the players were in the losing locker room, where reality has set in and the Broncos have begun to make peace with their fate.

The playoffs ain’t happening for them this year, the same as in 2017 and the year before that.

Oh, Denver isn’t a terrible football team, but not good enough without banged up cornerback Chris Harris Jr. and broken receiver Emmanuel Sanders to beat San Francisco. With a chance to keep their slim playoff hopes alive, the Broncos lost to a team that’s a contender only for title of the league’s worst.

While Niners coach Kyle Shanahan was fired up to face his hometown team of his youth, the dog came out in the Broncos, who got George Kittled to bits.

“He was open every play, man. It was crazy,” said San Francisco quarterback Nick Mullens. In the opening half alone, Mullens connected for 210 yards and a touchdown with Kittle, a talented tight end and the lone Niners player that absolutely demanded a focused game plan on Denver’s part. Related Articles Broncos Briefs: After fine, Vic Fangio vows to be more aware of wearing mask

Broncos, injuries and all, facing must-win scenario in Week 3 against Tom Brady and Tampa Bay

Jackson: How much does it matter that Jeff Driskel is Broncos’ starting quarterback Sunday? Probably less than you think.

Keeler: Broncos are officially the Blake Bortles of NFL franchises now. Dead by inches. Tortured by timeouts. Just good enough to break your heart.

What to expect for the first Broncos game with fans during the pandemic

Which begs the question: What exactly did the Broncos do at practice all last week? Slow starts have become a nasty habit for this team.

“We just didn’t come out ready to play, honestly,” said young Broncos receiver Tim Patrick, refusing to accept the effect of injuries for Denver’s 20-0 deficit after two quarters. “We need to gel, but you can’t coach effort.”

I second that emotion. But if Joseph can’t inspire effort, then is he really a leader of men?

From the delusion of trying to stop Kittle with man-to-man coverage at the game’s outset to the panicky decisions to go for it on fourth down too early and much too often, it’s apparent the learning curve for Joseph is far too steep and arduous for a franchise that prides itself on being among the NFL elite. Anyone in Colorado that thinks Joseph deserves another season to develop should probably stick to handing out orange slices and hugs in defeat.

Let’s hope general manager John Elway is already making a list of replacements for Joseph. Could John Harbaugh part ways with the Baltimore Ravens at season’s end? And will Stanford coach David Shaw ever leave the Bay Area for the NFL?

Truth be told, however, the Broncos have a bigger problem in the huddle than on the sideline. Week after week, Keenum says all the right things, but doesn’t act as if he actually has the talent to deliver on his words.

“We’re all frustrated,” said Keenum, insisting teammates didn’t come out flat. “I felt like everybody had the right focus, had the right intensity, knew what was at stake, but I don’t know what it is. We’ve just got to go out and slap ourselves in the face or something …”

Since his spate of interceptions early in the season, Keenum seems to be playing to avoid mistakes rather than to win. That’s not an offensive identity. It’s a coaching staff trying to hide the quarterback’s deficiencies.

After 13 games, isn’t it fair to say Keenum is incapable of putting an offense on his shoulders? With running back Phillip Lindsay having an off day and Sanders sidelined, the Broncos stood around most of the afternoon, waiting for the Niners defense to fall down.

Keenum needed 42 passing attempts to gain 186 yards. Dink. Dunk. Kerplunk.

At the podium during his postgame news conference, Keenum stood with hands shoved in his pockets, and talked in the clipped repentant tone of a kid in trouble with Mom. His body language was painful, eliciting the desire to give a good guy a go-get-em-next-time fist bump on the shoulder.

In defeat, Keenum doesn’t get mad, at least not outwardly. His style is to humbly accept responsibility and be apologetic.

Want my humble opinion?

I’m sorry the Broncos don’t have a playoff-caliber starting quarterback.