"Inflation is heading in the right direction but is still far too high for the Fed to take much comfort from this print," Brian Coulton, chief economist at Fitch Ratings, said in an email.
Cheaper goods, pricier services
Price increases for goods, like cars, furniture and clothing have cooled as the supply-chain snarls that drove inflation last year have mostly unraveled. The cost of goods has now dropped for three straight months. However, inflation in services — such as travel and entertainment — is now a closely watched metric, as some economists believe services inflation will be harder to tame.
"Services inflation is 7%, and this is not just a story about rental inflation — which keeps jumping in leaps and bounds," Coulton said. Federal Reserve Chair Jerome Powell "has flagged services excluding rents as a key aggregate to watch and this is not really showing any signs of slowing down."
The Federal Reserve has been laser-focused on crushing inflation, hiking its key interest rate seven times last year to a range of 4.25% to 4.5%. Raising interest rates slows inflation by making it more expensive to buy things, and have helped drive price increases down from a summer peak to their current level.
The 6.5% annual rate of inflation, while the lowest in over a year, is still roughly triple the 2% level the Fed wants to see. Wall Street expects the Fed to increase rates several more times this year, although in smaller increments than last year's jumbo-sized hikes.
"Coming in line with expectations, the ongoing slowing in inflation provides the Federal Reserve room and reason to pare the size of its policy rate increases," Nationwide Chief Economist Kathy Bostjancic said in a note. "While it shows that the monetary policy tightening so far has been successful, with the annual rate of headline and core readings well above the 2% target level the Fed is not done tightening."
Falling expectations
Another positive sign for the Fed's efforts to quell inflation is that Americans overall expect price increases to decline over the next few years. That is important because so-called "inflation expectations" can be self-fulfilling: If people expect prices to keep rising sharply, they will typically take steps, like demanding higher pay, that can perpetuate high inflation.
On Monday, the Federal Reserve Bank of New York said that consumers now anticipate inflation of 5% over the next year. That's the lowest such expectation in nearly 18 months. Over the next five years, consumers expect inflation to average 2.4%, only barely above the Fed's 2% target.
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();
}
});
});
});
});