How do I customise the styling of "solved topics" in the main list?

TL;DR

Это добавит класс topic-solution к сообщениям, отмеченным как ответ.

api.addPostClassesCallback((attrs) => {
  if (attrs.accepted_answer) return ["topic-solution"];
});

Классы, которые присваиваются сообщению, определяются здесь.

Нужный вам хук уже существует в самом конце этого файла… вот так.

Plugin-API предоставляет метод, позволяющий добавлять классы к сообщению на основе условия.

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/lib/plugin-api.js#L819-L829

Суть метода в том, что он выполняет переданный обратный вызов и возвращает класс для добавления, если условие выполнено.

При срабатывании обратного вызова Discourse передаёт ему атрибуты сообщения. Поэтому, например, можно сделать вот так.

api.addPostClassesCallback((attrs) => {
  console.log(attrs);
});

Если открыть консоль, вы увидите, что там выводятся атрибуты каждого сообщения.

Это лишь примеры; там есть и многое другое.

Вам повезло: когда сообщение помечается как решение, Discourse отслеживает это и добавляет соответствующую информацию в атрибуты сообщения. Свойство называется accepted_answer.

Таким образом, вам достаточно проверить, истинно ли это значение, и добавить свой класс, если оно истинно. Вот как это делается:

api.addPostClassesCallback((attrs) => {
  if (attrs.accepted_answer) return ["topic-solution"];
});

Этого достаточно, чтобы переключать класс даже в том случае, если автор темы передумает и выберет другое решение. Класс будет удалён из старого ответа и добавлен к новому.