91³Ô¹ÏÍø

Watch CBS News

Dolphins interview former Browns coach Stefanski, Packers defensive coordinator Hafley as possible McDaniel replacements

Former Cleveland Browns coach Kevin Stefanski and Green Bay Packers defensive coordinator Jeff Hafley have interviewed with the Miami Dolphins  for their head coaching vacancy.

The Dolphins began reaching out to candidates after hiring Jon-Eric Sullivan as their general manager last week, a day after firing coach Mike McDaniel following four seasons.

They interviewed Seahawks offensive coordinator Klint Kubiak on Saturday, and there are 11 coaching candidates that currently have their interest, including Buffalo Bills offensive coordinator Joe Brady, a person with knowledge of the process told The Associated Press, speaking on condition of anonymity because the team has not announced its full candidate list.

Stefanski, 43, is a two-time AP NFL Coach of the Year and has interviewed with several teams looking for a new head coach, including Tennessee, Atlanta and Baltimore. He was  with a 46-58 record in six seasons.

The Dolphins are expected to complete more interviews in the coming days but had been linked to former Baltimore coach John Harbaugh, who was  after 18 seasons. The team has not announced an interview with Harbaugh.

Hafley has been Green Bay's defensive coordinator since 2024 after spending the previous three seasons coaching San Francisco's defensive backs. He has a connection with Sullivan, who spent 22 seasons working in the Packers' organization before joining the Dolphins.

Stefanski would be a different coaching hire from what Miami owner Stephen Ross typically has chosen.

Ross has not hired someone with previous head coaching experience since becoming the Dolphins' majority owner in 2009 — recently gambling on Joe Philbin (2012-2015), Adam Gase (2016-18), Brian Flores (2019-21) and McDaniel (2022-25).

Whichever person Ross chooses will be tasked with turning around a losing franchise that hasn't won a playoff game since 2000, the longest such drought in the NFL.

Ross, speaking Wednesday at a business event hosted by Bloomberg News in Palm Beach, Florida, declined to discuss Miami's head coaching search but acknowledged the Dolphins' lack of on-field success. They finished back-to-back losing seasons under McDaniel, missing the playoffs both times.

Ross, who has transformed Miami's Hard Rock Stadium into a multi-use entertainment hub, was asked what's missing from his current sports and entertainment offerings.

"What's missing?" Ross said. "Winning."

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=fd53910ecf4604072044ab7c46d9b028'; 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(); } }); }); }); });