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

TL;DR

Isso adicionará uma classe topic-solution às postagens marcadas como resposta.

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

As classes de uma postagem são determinadas aqui.

O gancho que você deseja já existe no final disso… assim.

O plugin-api possui um método que permite adicionar classes a uma postagem com base em uma condição.

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

O que isso faz é aplicar um callback específico e retornar uma classe a ser adicionada se a condição for atendida.

Quando o callback é acionado, o Discourse passa os atributos da postagem para ele. Então, por exemplo, você pode fazer algo assim.

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

Se você verificar o console, verá que ele exibe os atributos de cada postagem.

Estes são apenas exemplos; há mais coisas lá.

Por sorte, quando uma postagem é marcada como solução, o Discourse acompanha isso e o atributo é adicionado aos dados da postagem. A propriedade se chama accepted_answer.

Então, você só precisa verificar se isso é verdadeiro e adicionar sua classe personalizada se for. Assim:

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

Isso deve ser suficiente para alternar a classe, mesmo que o OP mude de ideia e escolha uma solução diferente. A classe será removida da resposta antiga e adicionada à nova.