In a large bowl, combine bread flour, sugar, instant yeast, and salt (keep salt away from yeast initially). Add cold water and 30g softened butter. Mix until a shaggy dough forms.
Turn dough onto a clean surface. Knead by hand for 10 minutes until smooth and elastic. Add small amounts of flour or water if needed.
Shape dough into a 1 cm thick rectangle. Wrap in plastic and freeze for 30–60 minutes until very cold but not frozen solid.
While dough chills, roll lamination butter into a 15x15 cm square, 1 cm thick. Keep refrigerated.
On a floured surface, roll chilled dough into a 30x20 cm rectangle. Place butter sheet in the center. Fold dough over butter like a letter, sealing edges completely.
Roll dough into a 45x15 cm rectangle (5–7 mm thick). Perform a double fold: fold top third to center, bottom third to meet it, then fold in half. Wrap and freeze for 15 minutes.
Roll dough again to 45–50 cm long. Trim edges. Perform another double fold. Wrap and freeze for 30 minutes.
Roll dough into a 28x30 cm rectangle, 4–5 mm thick. Let rest if dough resists.
Trim edges. Cut lengthwise into 10 cm strips, then cut each strip diagonally into 12–15 cm triangles. Reserve scraps.
Gently stretch each triangle to 36–38 cm long. Cut a 1 cm slit at the wide base. Roll from wide end toward point, tucking tip underneath.
Place shaped croissants on parchment-lined baking sheet, spaced apart. Spray lightly with water. Cover and proof at room temperature until doubled in size (1–2 hours).
Preheat oven to 190°C (375°F). Mix 1 egg yolk with ½ tablespoon milk. Brush gently over proofed croissants.
Bake at 190°C for 20 minutes, rotating halfway. Reduce temperature if browning too fast. Bake until deep golden brown.
Transfer to wire rack. Cool for at least 10 minutes before serving.