I ended up with Astarion. I was en route to romancing Shadowheart, but I got surprisingly few approval moments or interactions with her throughout act 2. At the same time, my character seemed to be taking the shape of "goodie-two-shoes but sassy bitch to those who deserve it", which gave loads of Astarion approval.
I ended up learning into it and I'm super glad I did. There's an Act 2 Dark Urge scene that I felt completely changed the romance dynamic between my character and Astarion - it felt like it put us on a much more even footing, and I was surprised by how sincere and empathetic the scene felt (given that Astarion's main Cope is a mask of flirting and sass).
I had originally wanted to romance Karlach, but there was a bug that prevented her approval from rising and by the time I discovered and fixed it, I had missed loads of Act 1 approval moments
I didn't end up with Lae'zel in the end, but I hedged my bets for long enough that I got the Long Rest scene where she wakes you up in the night. The encounter ended hilariously fast, but what followed melted my heart and made it very hard to not choose her.
I also love how quickly Lae'zel changes her entire world view, which happened around the same time for me. Mad respect for such principles and focus