Wash and dry oranges, then zest them using a microplane, avoiding the bitter white pith. Measure 2 tablespoons of packed zest and set aside.
Cut the zested oranges in half and juice them, straining out seeds and pulp to get 1/4 cup of fresh juice. Keep zest and juice separate.
Chop the dark and milk chocolate into small, uniform pieces about the size of chocolate chips. Combine in a bowl and set aside near the stovetop.
Pour milk and heavy cream into a medium saucepan. Add orange zest, sugar, cocoa powder, and salt to the cold milk mixture.
Place over medium heat and whisk constantly for 5-7 minutes until steaming hot with small bubbles around the edges, but not boiling.
Reduce heat to low and add chopped chocolate all at once. Let sit for 30 seconds, then whisk vigorously for 2-3 minutes until completely melted and smooth.
Remove from heat and pour in fresh orange juice and vanilla extract. Whisk thoroughly for 30 seconds to incorporate. Taste and adjust sweetness if needed.
For ultra-smooth texture, pour through a fine-mesh strainer into a pitcher or mugs. Skip straining if you prefer more texture and visible orange zest.
Ladle or pour into warm mugs, filling about three-quarters full. Top with whipped cream, chocolate shavings, orange slices, or candied orange peel.