Connect with us

California

How California’s Solar Ironworkers Got Rid of Tiers

Published

on

How California’s Solar Ironworkers Got Rid of Tiers


California’s solar power plants now rival the scale of any in the world. What stands out most is how they were built: under union contracts.

Across the United States, nearly 90 percent of solar workers had no union last year. In California, the situation was different — at least on paper. The vast majority of its solar power plants have been wrenched in place by unionized construction workers.

Advertisement

But at first these were union jobs practically in name only, as thousands of unionized solar construction workers toiled on the underside of a two-tier system. Their wages, training, and job security lagged far behind their union siblings. Many questioned if they were members at all.

“As a probationary, pay was $15 an hour or a little less,” said Pablo Perez, a union member of the International Association of Bridge, Structural, Ornamental and Reinforcing Iron Worker (IW or Ironworkers) working on major solar plants near Fresno. “I was one of one hundred guys they brought in. When the job was over, you were done.”

Over the last few decades, many building trades leaders signed on to lower-tier contracts to get a foothold in residential and clean energy construction jobsites.

Around 2010, while other unions were still shut out of California’s growing solar power plants, the International Brotherhood of Electrical Workers (IBEW) began winning contracts — but at a cost. Temporary, lower-paid “construction wiremen” would fill about two-thirds of electrical jobs. Longer-term union members and apprentices split the rest.

Advertisement

Officers argued the repetitive nature of solar construction — often repeating the same ten tasks of wiring and setting panels, for acres — didn’t require broadly trained, highly paid electricians.

Officials in the building trades often try direct outreach to persuade project developers to hire union, pitching them on safety, quality work, and fewer delays. But local Ironworker leader Don Savory in Fresno initially found it tough to convince solar developers to hire unionized contracting companies.

“When solar started coming, there were a few of them built nonunion, paying $12 to $14 an hour,” he said. “At our package, $60 an hour [for wages and benefits], we weren’t getting traction.”

So as solar construction picked up faster, Savory proposed labor agreements that matched the IBEW’s tier ratios: five probationary Ironworkers for each fully trained “journeyworker” and apprentice.

Even compared to apprentices only two years into working iron, “probies” would get one-third less pay and nearly none of the benefits. Instead of the union hiring hall that lined up a next job for apprentices, probationary workers finished their month or two of solar work with no guarantees to stay working union.

Advertisement

The San Joaquin Valley, surrounding Fresno, is where Ironworker solar tiers started and ended. A few fields over is where the United Farm Workers struggled under vigilante gunfire.

In 2000, Fresno’s conservative city council passed the nation’s first ban on municipal Project Labor Agreements, a common deal used to unionize public work.

Meanwhile California’s state laws started pushing utility companies to shift to renewable energy: 20 percent clean by 2017, 50 percent by 2030, and 100 percent by 2045. Those mandates became a model for twenty-seven other states, though the targets are usually less ambitious.

But California’s renewable laws lacked any explicit labor standards, let alone guaranteed union contracts.

Building trades unions made a stick out of the state’s environmental permit law. Like they had recently done to win concessions from gas power plant owners, unions threatened solar developers with lawsuits and mobilization to block permits until they signed a deal to unionize.

Advertisement

Just as important was a big carrot: unions could train thousands of new workers in the skills needed to build solar farms fast enough, even in remote corners of the state. Their apprenticeships, hiring halls, and mentorship gave them an edge over nonunion outfits, which struggled to keep up with the demand.

As Ironworkers lined up their first few years of solar contracts, some local leaders pushed to get other unions included. Instead of competing over turf on each site, five trades agreed that stable, inclusive terms would mean steadier work all around.

By 2015, IBEW, Ironworkers, the Laborers’ International Union of North America, Northern California Millwrights, and the International Union of Operating Engineers worked out a “five-craft agreement.” Their combined pressure made union labor the standard for all but one solar plant developer in California.

Ironworker officers pledged that the solar two-tier would be temporary. Still, “the guys were hissing and booing” when Savory introduced the tiers deal at a local meeting in 2013. “I said, ‘This’ll get a foot in the door, then it’s up to you guys to make it better.’”

Unlike some other trades with appointed officers, Ironworkers elect their local leaders from the ranks. In the “rodbusters” union, a culture of rowdy local meetings and contested elections often checks those who win.

Advertisement

On the job, the new tier drew gripes. According to one local officer, probationary workers were largely “hired off the street, or somebody’s cousin,” without the selective interviews and job experience that picked apprentices. Probies only got brief training in the field.

Contractors “just kind of threw us out there, sink or swim,” said Darrell Lewis, a former probationary-tier Ironworker. “If it wasn’t for some of the older guys, it would’ve been hard to learn on the job like we had to. The older apprentices watched out for us.”

Longtime Ironworkers complained that worksites with a majority of quick, temporary hires were undercutting the union culture of quality and safety. Savory said solar foremen — union members who coordinate and train others on site — told him the new system was creating “organized chaos, basically. It was like herding cats.”

That chaos was especially risky for probationary workers, given their limited training, weak health coverage, and the scorching conditions.

“I wasn’t used to the heat,” Lewis said. “It was summertime when I started, and it was 107 degrees out there. A few guys actually dropped off the job.” In nearby Southern California, summers are getting so hot that a few solar contractors have recently shifted to building at night.

Advertisement

Probies who stuck around wanted a full union apprenticeship, to get pay and security to match the tough work. They often found solidarity from older members on their solar sites. “All the guys who were already in were giving us as much advice as they could about how to get into the union,” said Perez. “It’s a real brotherhood, and that’s not a word I’d use lightly.”

Perez, Lewis, and scores of other probies were accepted within a few years into the Ironworkers apprenticeship program. Nearly all have stuck with the trade, and a few have become foremen.

Member pushback and jobsite frustrations nudged union leaders to make good on their promise. In 2015, Savory proposed a new Project Labor Agreement that would replace all probationary solar Ironworkers with full members or apprentices.

Some contractors griped that they’d be on the hook for higher wages. Pointing to the chaos when untrained workers did the work, Savory’s response was simple: “‘You’ll get more done.’ And they do.”

The proposal to abolish tiers came right as other unions were locking in their sides of the five-craft agreement that would unionize the rest of solar construction work. Although the IBEW kept its lower solar tier, Ironworkers say the Laborers, Millwrights, and Operating Engineers never introduced one.

Advertisement

Instead of a race to the bottom, the cross-trade push prodded contractors around Fresno to accept the Ironworkers’ landmark no-tiers deal: one apprentice to one journeyworker and no more probationary positions.

Major solar Ironworker locals in Southern California soon demanded the same, and contractors gave in fast. Ironworkers membership has grown 70 percent in the eight years since.

Last October, IBEW, Laborers, and Operating Engineers announced a national “three-craft agreement,” outlining the jobs each trade will claim in union solar contracts, for every state but California.

Whether and how that agreement becomes a contract — including if Ironworkers fit in — will depend first on forcing solar developers to unionize. In California, unionizing solar jobs took creative, cross-trade pressure on contractors.

But to make solar jobs as good as those before them, like Fresno’s rodbusters showed, it took solidarity on the job and democracy in the hall.

Advertisement





Source link

California

4.6 earthquake jolts Northern California awake, residents report shaking homes for miles

Published

on

4.6 earthquake jolts Northern California awake, residents report shaking homes for miles


4.6 earthquake jolts Northern California awake, residents report shaking homes for miles

Advertisement

READY… ACCORDING TO THE MONTEREY COUNTY OF EMERGENCY SERVICES THERE’S ONLY BEEN 429 EARTHQUAKES IN OUR AREA THAT ARE ABOVE A 4.0 MAGNITUDE. BUT OFFICIALS AND EXPERTS SAY IT IS ONLY A MATTER OF TIME UNTIL THE NEXT BIG ONE. NOW TO PREPARE YOU CAN SIGN UP WITH YOUR COUNTY’S EMERGENCY SERVICES ALERTS BY GOING ON THE COUNTY WEBSITE. YOU CAN ALSO DOWNLOAD THIS APP CALLED MYSHAKE. IF A QUAKE ABOVE 4.5 MAGNITUDE HITS CALIFORNIA, YOU CAN GET AN ALERT A FEW SECONDS YOU FEEL IT IN YOUR AREA. THAT DEPENDS ON HOW CLOSE YOUR ARE TO THE EPICENTER. IT WILL REMIND YOU WHAT TO DO AND ALLOWS YOU TO SHARE AND SEE WHAT DAMAGES HAVE BEEN REPORTED NEAR YOU. NOW DOWNLOADING SOME SORT OF ALERT SYSTEM IS IMPORTANT, ESPECIALLY FOR THOSE OF US LIVING NEAR THE COAST. I SPOKE WITH SANTA CRUZ COUNTY’S OFFICE OF EMERGENCY SERVICES, AND THEY HAD FOUR REMINDERS: FIRST ONE – PREP YOUR LIVING SPACE. TRY TO AVOID PLACING BOOKSHELVES AND BIG FURNITURE NEAR ENTRY WAYS THAT COULD FALL AND BLOCK DURING AN EARTHQUAKE. SECONDLY – LIKE FOR ANY NATURAL DISASTER: HAVE A PLAN. WHEN IT COMES TO AN EARTHQUAKE, UTILITIES LIKE YOUR WATER AND SEWER SYSTEM MAY NOT WORK. THIRD – MAKE SURE YOU HAVE A GO BAG PREPPED WITH YOUR FOOD, WATER, CASH… AND THE LAST ONE: PUT ALL YOUR ESSENTIAL IDENTITY AND HEALTH DOCUMENTS IN ONE PLACE SO YOU CAN JUST GRAB IT AND GO. THE BIGGEST EARTHQUAKE TO HIT OUR NECK OF THE WOODS WAS THE LOMA PRIETA QUAKE IN 1989. THAT CLOCKE

Advertisement

4.6 earthquake jolts Northern California awake, residents report shaking homes for miles

Updated: 9:36 AM CDT Apr 2, 2026

Editorial Standards

Advertisement

A magnitude 4.9 earthquake struck Northern California early Thursday, according to the U.S. Geological Survey, with many saying they felt their homes shake for a few seconds in a 100-mile stretch, including San Francisco. The quake hit at 1:41 a.m. PST east-southeast of Boulder Creek, the USGS said. It had a depth of 6.7 miles. Boulder Creek, which has about 5,000 people, is about 65 miles southeast of San Francisco.Some residents said they were first awakened by earthquake alerts on their phones, then felt their beds and windows shake. Some items were knocked off store shelves in Boulder Creek.The shaking was felt in other parts of the Central Coast, including Marina, where at least one resident said they felt slight shaking and were awakened by it.The National Tsunami Warning Center said there is no tsunami danger from the earthquake. No damage or injuries were immediately reported.

A magnitude 4.9 earthquake struck Northern California early Thursday, according to the U.S. Geological Survey, with many saying they felt their homes shake for a few seconds in a 100-mile stretch, including San Francisco.

Advertisement

The quake hit at 1:41 a.m. PST east-southeast of Boulder Creek, the USGS said. It had a depth of 6.7 miles. Boulder Creek, which has about 5,000 people, is about 65 miles southeast of San Francisco.

Some residents said they were first awakened by earthquake alerts on their phones, then felt their beds and windows shake. Some items were knocked off store shelves in Boulder Creek.

The shaking was felt in other parts of the Central Coast, including Marina, where at least one resident said they felt slight shaking and were awakened by it.

Advertisement

The National Tsunami Warning Center said there is no tsunami danger from the earthquake.

No damage or injuries were immediately reported.

Advertisement

`;
}

function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=” + Date.now();
}
}

function initializeWeatherBox(container) {
var containerId = container.getAttribute(“data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;

Advertisement

function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});

clickedElement.classList.add(‘open’);
clickedElement.setAttribute(‘aria-selected’, ‘true’);

container.querySelectorAll(‘[data-content-id]’).forEach(function(content) {
content.style.display = ‘none’;
content.setAttribute(‘hidden’, ‘true’);
});

var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}

function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}

Advertisement

var location = { zip: window.DEFAULT_ZIPCODE };

try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}

var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;

if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}

function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;

Advertisement

var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);

if (weatherData.alerts_count > 0) {
weatherWatchHeader.className=”weather-watch-header has-alerts”;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, “https://www.kcci.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘mobile-weather’, “https://www.kcci.com/alerts”);”);
}
} else {
weatherWatchHeader.className=”weather-watch-header”;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}

function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;

var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}

var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className=”weather-grid–current-icon weather-current-icon icon icon-weather-” + weatherData.current.icon_name;
}

Advertisement

var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}

var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}

var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}

updateWeatherBackground(weatherData.current.icon_name);
}
}

function updateWeatherBackground(iconName) {
try {
var bgPath = weatherImages.backgrounds[iconName] || weatherImages.backgrounds.unknown;
container.style.backgroundImage=”url(” + bgPath + ‘)’;
} catch (e) {
console.log(‘Error updating weather background:’, e);
}
}

Advertisement

function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;

if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html=””;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);

for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex

`;
}

function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=” + Date.now();
}
}

Advertisement

function initializeWeatherBox(container) {
var containerId = container.getAttribute(“data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;

function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});

clickedElement.classList.add(‘open’);
clickedElement.setAttribute(‘aria-selected’, ‘true’);

container.querySelectorAll(‘[data-content-id]’).forEach(function(content) {
content.style.display = ‘none’;
content.setAttribute(‘hidden’, ‘true’);
});

var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}

Advertisement

function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}

var location = { zip: window.DEFAULT_ZIPCODE };

try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}

var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;

if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}

Advertisement

function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;

var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);

if (weatherData.alerts_count > 0) {
weatherWatchHeader.className=”weather-watch-header has-alerts”;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, “https://www.kcci.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘sidelist-weather’, “https://www.kcci.com/alerts”);”);
}
} else {
weatherWatchHeader.className=”weather-watch-header”;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}

function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;

var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}

Advertisement

var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className=”weather-grid–current-icon weather-current-icon icon icon-weather-” + weatherData.current.icon_name;
}

var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}

var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}

var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}

updateWeatherBackground(weatherData.current.icon_name);
}
}

Advertisement

function updateWeatherBackground(iconName) {
try {
var bgPath = weatherImages.backgrounds[iconName] || weatherImages.backgrounds.unknown;
container.style.backgroundImage=”url(” + bgPath + ‘)’;
} catch (e) {
console.log(‘Error updating weather background:’, e);
}
}

function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;

if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html=””;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);

for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex

Loading more articles…

Advertisement



Source link

Continue Reading

California

April kicks off in the Sierra with chain controls on I-80

Published

on

April kicks off in the Sierra with chain controls on I-80



Just days after Northern California saw a stretch of record high temperatures, the high Sierra Nevada is once again getting snow.

Chain controls went up on Interstate 80 in the Sierra early Wednesday morning.

As of 7 a.m., controls are in effect westbound from the Donner Lake Interchange to Rainbow. On the eastbound side, chain controls are in effect from Kingvale to Truckee.

Advertisement

Highway 50 is not seeing any restrictions at this time.

Other major Sierra roads seeing chain controls Wednesday include Highways 4, 49 and 88.

Wednesday also marks the day California’s Department of Water Resources will conduct its fourth snow survey of the season. As of Monday, the statewide snowpack is at about 18% of average.

Advertisement



Source link

Advertisement
Continue Reading

California

Meet the moderators; Fresno State to host bipartisan California governor candidate forum

Published

on

Meet the moderators; Fresno State to host bipartisan California governor candidate forum


Preparations are underway for a major bipartisan gubernatorial candidate forum set for Wednesday at Fresno State, where several high-profile candidates for California governor will make their case to voters.

The event is expected to spotlight issues impacting not only the Central Valley but also communities across the state, with a strong focus on affordability, agriculture, and water policy.

Confirmed candidates scheduled to appear include:

  • Xavier Becerra, attorney and former U.S. Secretary of Health and Human Services
  • Chad Bianco, Riverside County sheriff
  • Steve Hilton, author and Fox News contributor
  • Matt Mahan, San Jose mayor
  • Katie Porter, former U.S. representative
  • Antonio Villaraigosa, former Los Angeles mayor

The forum will be moderated by Fresno County Supervisor Buddy Mendes and former State Assemblymember Kristin Olsen, who say their goal is to ensure Central Valley concerns remain front and center.

“There are so many issues related to affordability right now, energy costs, housing costs, regulatory costs, even food prices,” Olsen said. “These are real challenges affecting families, farmers, and farm workers in the Central Valley. We want to make sure candidates clearly explain how they’ll address them if elected.”

Advertisement

Moderators say they are prepared to press candidates for direct answers.

“That will be our challenge,” Olsen said. “We’ll clearly lay out expectations for candid responses, and if someone doesn’t answer the question, we’ll follow up.”

Mendes emphasized the importance of water policy, a critical issue for the region’s agricultural economy, noting that many statewide candidates may lack a full understanding of how California’s water systems operate.

“A lot of candidates don’t fully understand water movement in this state, how storage works, or the difference between surface water and groundwater,” Mendes said.

He added that keeping candidates focused may be one of the biggest challenges during the forum.

Advertisement

“We might have to stop them and remind them to answer the question instead of running out the clock,” Mendes said.

Mendes, who is a registered republican, and Olsen, who has since switched from republican to no party preference, have both moderated in the past, though this marks their first time moderating a gubernatorial forum.

They stressed that their approach will be firm but nonpartisan.

“This isn’t about being partisan, it’s about answering the questions,” Mendes said.

Organizers say hosting the forum in Fresno is intentional, aiming to elevate issues specific to the San Joaquin Valley — a region they say is often overlooked in statewide political discussions.

Advertisement

The forum is scheduled to run from noon to 1:30 p.m. and is sponsored by 30 agricultural associations statewide. It will be streamed live on the FOX26 YouTube page.



Source link

Continue Reading

Trending