My understanding is that CRDT is for the offline scenario and doesn’t have conflicts with the way it resolves. It is also a completely decentralized algorithm.
If you need real time, I think you can use (slightly) simpler algorithms like operational transform (OT) where the server can synchronize state. OT might be viable for offline as well… I am not an expert.
Optimistic locking, pessimistic locking and last-in-wins would be the more näive strategies and maybe ok acceptable for real time, but would be terrible for offline.