91³Ô¹ÏÍø

Watch CBS News

Yvette Hoffman, wounded in Minnesota lawmaker shootings, beloved by her elementary school community

Minnesota state Sen. John Hoffman is still hospitalized in serious but stable condition one week after he and his wife, Yvette, were both shot multiple times in their Champlin home in a politically motivated attack.

Investigators believe the same gunman fatally shot Minnesota House Speaker Emerita Melissa Hortman and her husband, Mark, inside their Brooklyn Park home about 90 minutes later.

Yvette Hoffman, who was released from the hospital on Thursday, is an educational support professional at Maple Grove's Fernbrook Elementary, where she's known for her warm hugs and gentle patience to a room full of kindergarteners.

"She's the kind of person to go in and put a smiley face with ketchup on their hamburger," said Heather Hjelmstad.

Hjelmstad has worked with Hoffman for years in the district, but now they work together in the classroom. She's known for her radiant spirit, her gift for calming anxious 5-year-olds and being the person everyone can depend on.

She's a key player who builds confidence in the classroom, and if you ask Principal Jeff Zastrow, she's an easy hire.

6p-pkg-attacks-champlin-teacher-wcco832n.jpg
Yvette Hoffman Hoffman Family

"She has a very, very genuine love for the kids and patience," Zastrow said. "She listens to every story about every loose tooth, every pet."  

The woman so talented with putting smiles on faces is recovering at home. She was shot eight times in the early morning hours of June 14. Her husband was shot nine times.

As word got around about this horrific attack, Fernbrook's Parent Teacher Organization launched a fundraiser with a goal of $5,000 to help and support the Hoffmans. That goal exploded — surpassing $220,000 and still climbing.

"Our hope is that this money can allow the Hoffmans to focus on their recovery and not have to worry about the financial piece of it," said PTO president Angela Champagne-From.

The community is stepping up for a family who have championed so many, from the classroom to the State Capitol.

The suspected shooter, 57-year-old Vance Boelter, was taken into custody on Sunday night in Sibley County after a 36-hour manhunt. He faces six federal charges and four state charges of murder and attempted murder.

Investigators allege Boelter also went to the homes of two other elected officials that same night. One wasn't home, and a police officer reportedly scared Boelter away before he was able to approach the other lawmaker's residence.

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });