Total spend
{fmt(totalNow,'currency')}
{totalNow===base.total?'unchanged':`${totalNow>base.total?'+':''}${(totalNow-base.total).toLocaleString()} vs base`}
Projected revenue
{fmt(Math.round(projection.newTotal),'currency')}
=0?'text-emerald-600 dark:text-emerald-400':'text-rose-600 dark:text-rose-400'}`}>
{projection.gain>=0?'+':''}{fmt(Math.round(projection.gain),'currency')} ({((projection.ratio-1)*100).toFixed(1)}%)
Implied ROAS
{(projection.newTotal/Math.max(totalNow,1)).toFixed(2)}×
{horizon}d horizon
{projection.rows.length===0 && (
No platform spend in this range yet — connect or import data first.
)}
{projection.rows.map(r => {
const sliderMax = Math.round(r.spend * 2.5);
const pctChange = ((r.newSpend - r.spend)/r.spend)*100;
const efficiency = r.newRoas / r.roas; // 1.0 = same as baseline
return (
{r.label}
base {fmt(r.spend,'currency')} · base ROAS {r.roas.toFixed(2)}×
{fmt(r.newSpend,'currency')}
0?'text-emerald-600 dark:text-emerald-400':pctChange<0?'text-rose-600 dark:text-rose-400':'text-ink-400'}`}>
{pctChange>=0?'+':''}{pctChange.toFixed(1)}%
{/* Slider */}
Proj. revenue
{fmt(Math.round(r.newRev),'currency')}
Implied ROAS
=0?'text-emerald-600 dark:text-emerald-400':'text-rose-600 dark:text-rose-400'}`}>
{r.newRoas.toFixed(2)}×
Efficiency
{(efficiency*100).toFixed(0)}%
);
})}