Tumult ensued on the steps of Portland City Hall as police pepper-sprayed and arrested protesters in the aftermath of an unruly demonstration Wednesday over a newly approved contract for rank-and-file officers.

The scene devolved into a lengthy standoff, with dozens of protesters swarming Southwest Fifth Avenue and blocking traffic and light-rail trains until an estimated 75 officers in riot gear intervened.

Police had already shoved protesters out of City Hall, dousing some with pepper spray, after they disrupted a City Council hearing. Demonstrators wouldn't begin dispersing until just after 5 p.m., some eight hours after the unparalleled protest began.

The source of contention: City Council's 3-1 vote for a controversial new police contract, and Mayor Charlie Hales' unprecedented maneuvering within City Hall to conduct the vote in meeting room cordoned off from protesters.

Hales, who made the contract a top priority before he leaves office Jan. 1, said fallout was unlikely to be avoided because protesters were determined to make a scene.

"This is a good day," Hales said of the contract's approval. "It will pay dividends, for a bureau that has a good relationship with the city, over time."

The contract raises officers' pay, amid a staffing shortage, and ends a contentious rule that let officers wait 48 hours to speak with internal investigators after using deadly force.

Officials said concerns over rules for body-worn cameras will be publicly vetted next year under the new mayor, Ted Wheeler. But that hasn't satisfied opponents, who also wanted expanded civilian oversight powers.

Protesters also claimed a victory of sorts, arguing the City Council's closed-door vote -- broadcast online, over television screens and remotely in the City Council chambers -- may help them file a complaint over a violation of public meeting laws.

City Hall. pic.twitter.com/rGV9UQ5FpR — PDX City Hall Watch (@cityhallwatch) October 12, 2016

"They wouldn't have gotten this passed if they did it in a democratic way," said Gregory McKelvey, spokesman for protest group Don't Shoot Portland.

Wednesday's protest capped a fiery few weeks at City Hall as tensions mounted over Hales' proposed three-year contract with the Portland Police Association. Longtime City Hall staffers couldn't recount a similar scene aside from the Occupy Portland movement of 2011 that overtook three city parks.

"I regret it ever got to that point," said Commissioner Nick Fish, who supported the police contract. "We have to find a way to have these kinds of charged discussions and debates without having disruptions to our building and to our ability to conduct the people's business."

The demonstration began in earnest Tuesday as protesters set up tents outside City Hall and hung a large banner for the Black Lives Matter movement. And, as they'd done in weeks past, protesters came prepared to disrupt Wednesday's City Council meeting - with one person even writing an email warning that "after we take city hall maybe we will take bridges and freeways too."

City officials took public testimony about the contract last month and weren't required to listen again before voting. So protesters signed up to speak on other matters, hoping to nonetheless criticize the police contract, a tactic they used last week.

But protesters' frequent outbursts and interruptions prompted Hales to adjourn Wednesday's public meeting less than 30 minutes after it began. As activists claimed a small victory inside the City Council's second-floor chambers, Portland politicians restarted the meeting in a third-floor conference room without audience members.

That's because officials had decided to prepare the room, complete with TV cameras, expecting their meeting would be interrupted.

Protesters, blocked from the third floor by police, chanted from below. At times, their taunts nearly drowned out testimony on unrelated items.

Just before 11 a.m., during a presentation on housing, Hales hastily rearranged the agenda to hear the police contract.

Then, over the piercing chants downstairs, Hales, Fish and Commissioner Amanda Fritz for the contract. Commissioner Steve Novick voted no, while Commissioner Dan Saltzman was absent to observe Yom Kippur.

Some activists shook the locked doors of city commissioners' offices, while others set up tents in hallways. One man with a bullhorn chastised police on scene: "This isn't even loud compared to what you do to us!"

Inside the empty council chambers, Dan Handelman of Portland Copwatch criticized officials for voting in private. He said politicians should have the courage to look opponents in the eye.

"People need to vocalize their opposition," he said, adding that in his 24 years monitoring the police bureau he'd "never seen anything where the City Council shut out their entire community."

City attorney Tracy Reeve said the City Council's maneuver complied with state public meeting requirements. But no one could ever remember such a scheme being necessary.

"Never experienced this before," said Brendan Finn, Saltzman's top aide, who has worked inside City Hall for 18 years.

About 12:20 p.m., officials ordered an evacuation. But protesters refused to leave though a second-floor exit. Twenty minutes later, officers forced demonstrators out.

Chaos ensued.

On the exit steps, some protesters wouldn't budge and hurled items at police. Officers responded by pushing demonstrators, including former mayoral candidate Jessie Sponberg.

Several protesters were pepper-sprayed and splayed out as friends poured milk in their eyes. Riot police arrived and cleared the street and sidewalk, advancing and retreating several times, with tensions running high until protesters decided to disperse.

Portland City Council is expected to reconvene in 17 minutes. This is happening outside. pic.twitter.com/xtKCf9exzO — PDX City Hall Watch (@cityhallwatch) October 12, 2016

In all, 10 demonstrators were arrested. Protesters say they're planning another major action Friday.

McKelvey said in a Twitter message that organizer Micah Rhodes and at least one other protester are being monitored at Legacy Good Samaritan Medical Center for injuries suffered Wednesday.

He said Rhodes suffered a head injury and will be at the hospital overnight. Another man has rib injuries, McKelvey said. He said he thinks more protesters went to hospitals, as well.

Someone also "assaulted and injured" an officer at City Hall, a Portland police spokesman said in a news release. The officer wasn't seriously injured.

Novick, who voted against the contract over concerns on how to pay for higher wages, said he wasn't surprised by what played out Wednesday.

How others perceive the events, he said, will depend on their underlying views about police issues.

"It's very unfortunate," he said.

-- Brad Schmidt

503-294-7628

@cityhallwatch

Elliot Njus, Samantha Matsumoto and Jim Ryan of The Oregonian/OregonLive staff contributed to this report