Combine warm water, warm milk, sugar, and yeast in a bowl, stirring gently until dissolved and slightly foamy
Add flour and salt to the mixture, stirring until a rough dough forms
Transfer dough to a clean surface and knead until smooth, soft, and elastic
Place dough in a lightly greased bowl, cover, and allow it to rise until doubled in size
Roll the rested dough into a large circle or rectangle on a lightly floured surface
Spread softened butter evenly across the dough, leaving a small border around edges
Fold and gently roll the dough to help create light layers
Cut the dough into triangular sections of equal size
Roll each triangle from the wider base toward the tip to form the croissant shape
Arrange croissants on a lined baking tray with space for expansion
Cover lightly and allow a second rise until puffy and airy
Brush each croissant gently with beaten egg wash
Bake until deeply golden, crisp, and fragrant
Cool slightly before serving to allow layers to set