So, the message that is output by the buildFullWeatherReportHTML function does not show the issue? That made me remember a display issue that occurs when there are new lines between the end of one div and the start of another. For some reason the chat has issues with this and splits them up. So, taking your gm menu as an example, if you change it to be this: const showGMMainMenu = () => {
const s = state.WeatherMod;
const climates = Object.keys(WeatherConfig.climates).map(climate =>
`<a style="${btnStyle}" href="!weather setgm climate ${climate}">${climateIcons[climate]} ${tClimate(climate)}</a>`
).join(" ");
const html = `<div style="${chatStyle}">`
+`<div style="${styleTitle}">${t('weather')}</div>${hr}`
+`<div style="${styleSection}">${t('climate')}:</div> ${climateIcons[s.selectedClimate]} ${tClimate(s.selectedClimate)}<br>`
+`${btnGroup(climates)}${hr}`
+`<div style="${styleSection}">${t('language')}:</div> ${s.language.toUpperCase()}<br>`
+`${btnGroup(`<a style="${btnStyle}" href="!weather lang en">EN</a> <a style="${btnStyle}" href="!weather lang fr">FR</a>`)}${hr}`
+`${btnGroup(`<a style="${btnStyle}" href="!weather menu-date">📅 ${t('date')}</a>`)}`
+`${btnGroup(`<a style="${btnStyle}" href="!weather menu-manual">🛠 ${t('manual')}</a>`)}`
+`${btnGroup(`<a style="${btnStyle}" href="!weather menu-profiles">💾 ${t('profiles')}</a>`)}`
+`${btnGroup(`<a style="${btnStyle}" href="!weather report">🌦 ${t('generate')}</a>`)}`
+`${btnGroup(`<a style="${btnStyle}" href="!weather showplayers">📣 ${t('weather')} → Players</a>`)}`
+`</div>`;
sendChat("WeatherMod", `/w gm ${html}`);
}; You will eliminate the new lines between the end and beginning of divs, and the menu will output correctly. Making that change, results in this output: EDIT: Had erroneously used += instead of + in the string creation.