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 です。

したがって、その値が true かどうかを確認し、true の場合にカスタムクラスを追加するだけで済みます。以下の通りです。

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

これで、OP が考えを変えて別の回答を選ぶ場合でも、クラスを適切に切り替えることができます。古い回答からはクラスが削除され、新しい回答に追加されます。