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

TL;DR

Esto agregará una clase topic-solution a las publicaciones marcadas como respuesta.

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

Las clases que tiene una publicación se determinan aquí.

El hook que buscas ya existe al final de ese archivo… así.

La plugin-api tiene un método que te permite agregar clases a una publicación según una condición.

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

Lo que hace es aplicar una función de retorno (callback) dada y devuelve una clase para agregar si se cumple la condición.

Cuando se dispara el callback, Discourse le pasa los atributos de la publicación. Así que, por ejemplo, puedes hacer algo como esto.

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

Si revisas la consola, verás que muestra los atributos de cada publicación.

Estos son solo ejemplos; hay más cosas allí.

Por suerte para ti, cuando una publicación se marca como solución, Discourse lleva un registro de eso y se agrega a los atributos de la publicación. La propiedad se llama accepted_answer.

Así que solo necesitas verificar si eso es verdadero y agregar tu clase personalizada si lo es. Así:

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

Eso debería ser suficiente para alternar la clase incluso si el OP cambia de opinión y elige una solución diferente. Eliminará la clase de la respuesta anterior y la agregará a la nueva.