Democrat Conor Lamb has declared victory in the Pennsylvania special election.

"It took a little longer than we thought, but we did it. You did it," Lamb told supporters at his election night party early Wednesday morning. With 100 percent of precincts in district 18 reporting, Lamb leads Republican Rick Saccone by only 579 votes—less than half a percentage point. Most media outlets have not yet called the race for Lamb, and Saccone still hasn’t conceded. But Democrats are already celebrating.

“Listen, this is a district [Democrats] lost by 19 points like 17 months ago,” said Jeff Hewitt, a Democratic strategist. “It’s a shocking turnaround, no matter what the final result is.” Hewitt thinks the closeness of the race represents a repudiation of President Trump, and a testament to Lamb’s quality as a candidate: “If the Democrats had a tired old state rep running and the Republicans had a young fresh vibrant voice I don’t think this race would even be close.”

The race was in a dead heat at 11 p.m. ET, with Lamb leading Saccone by a mere 95 votes. That lead increased, and then decreased again, after absentee ballots from Washington and Allegheny Counties were taken into account. The remaining absentee ballots will likely be counted later today. According to election lawyer, Adam Bonin, Tuesday’s vote count is informal; the official count will take place on Friday. There is no mandatory recount in Pennsylvania’s congressional races, but candidates can request one within five days of the election, with three voter signatures per precinct. It’s likely, Hewitt told me, that whoever loses will request one.

The race has been closely watched for hints of what may happen in the upcoming midterms, even though this time next year, the district won’t even exist. The stakes in PA-18 have little do with political power and everything to do with symbolism: Republicans had hoped that Saccone, who aligned himself with Trump, would emerge victorious as a testament to the president’s lingering popularity in the area. Democrats, meanwhile, saw the race as a chance to show how the party can win over Trump supporters come November.

Media coverage had framed the election as a referendum on President Trump, but, as I reported last week, Lamb did his best to avoid Trump-bashing. Instead, the former federal prosecutor and Marine chose to stress labor issues and the opioid crisis, and took a relatively conservative stance on guns. Saccone, a current state representative with a formidable resume as a counter-intelligence officer in the United States Air Force, pledged to reel in government spending, and aligned himself closely with the president, once describing himself as “Trump before Trump was Trump.”

The two were vying to fill the congressional seat vacated by Tim Murphy, the district’s longtime Republican representative. Murphy resigned in October after it was revealed that he had an extramarital affair and asked his mistress to get an abortion. The 18th district, which encompasses parts of Allegheny, Washington, Greene, and Westmoreland Counties, has 70,000 more registered Democrats but still tends to elect Republicans: Donald Trump beat Hillary Clinton here by 20 points in the 2016 presidential election, and Mitt Romney and John McCain both won by similar margins. Murphy, who held the seat for 15 years, ran uncontested in the last two races.

The seat should have been easy pickings for Republicans, but for the past month, the polls were tight. The Cook Political Report recently upped the seat’s rating from “Leans Republican” to “Toss Up.” On Monday morning, a new Monmouth University poll gave Lamb a six-point advantage over Saccone. Republicans were worried, and it showed: GOP-affiliated groups spent more than $9 million to support Saccone, and Trump visited the district twice.

Strategists viewed the race as somewhat of a bellwether election for Democrats heading into the midterms. Some told me that part of the reason Lamb kept the race so close was local Democrats’ frustration with Trump: They were fired up and ready to vote. But that’s only part of the equation. “If the Democrat wins, it’s because he had an individualized message, repudiated [House Minority Leader Nancy] Pelosi, and appealed to blue-collar, white working people again,” Democratic strategist Jeff Hewitt told me ahead of the race.

The closeness of the race seems to suggest that Lamb’s moderate strategy has brought him within striking distance of Saccone—but maybe not far enough to overtake the Republican. Lamb was criticized in recent weeks by both Democrats and Republicans who thought he was being inconsistent on issues like abortion and gun control—and was merely toeing the line to pick up moderate Republican votes. One Democratic strategist, who requested anonymity because he was not authorized to speak for the campaign, told me that Lamb’s campaign “took a bet that by being a little ambiguous, he’s going to be able to appeal to more voters. I tend to think Democrats can be more highly motivated when they have a candidate that stands for something.”

A Pennsylvania-based Republican political consultant, who requested anonymity for the same reason, wasn’t buying it either. “While he has said he opposes Nancy Pelosi, does anyone honestly believe he’s going to vote against her?” he asked. President Trump even took a creative whack at the Democrat this weekend, calling him “Lamb the Sham” at a rally. (Although the president has reportedly bad-mouthed Saccone as well.)

Many of the strategists I spoke with said that Saccone was singularly well-positioned on Tuesday because of Trump’s popularity in the district. The president’s proposed steep tariffs on foreign steel and aluminum were pretty popular move here in the heart of steel country, and that was certainly helpful for Saccone. Plus, the Trump family’s recent visits to the district ginned up excitement for the election.

Recount or no, Tuesday’s  results promise increased uncertainty for Republicans heading into the midterms—and offer Democrats a sign that they’ve got a real chance to shake things up.