Thanks for all the parsing explanations (particularly 2d - didn't see that at all) There were quite a few that I wasn't able to fully parse, but put them in anyway, as they fitted.
Definitely on the harder side today, but still enjoyable. I liked 20a, but isn't it a bit unusual to have the second part of the answer as an actual word in the clue?
Had to google weather fronts to get the first word of 8d, as had never heard of that.
The CCL clues were really clever - thanks to those who spotted them!
Finally, it was nice to have a final-letters clue for a change!