Prep the oven and dish: Preheat the oven to 375°F (190°C).
Lightly grease a 9x13-inch baking dish with butter or olive oil.
Blanch the vegetables: Bring a large pot of salted water to a boil. Add broccoli, cauliflower, and carrots. Cook for 2–3 minutes until bright and slightly tender.
Drain and run under cold water to stop the cooking. Pat dry.
Sauté aromatics: In a large skillet, heat olive oil and butter over medium heat. Add onion and cook 3–4 minutes until translucent.
Stir in garlic and cook 30 seconds until fragrant.
Make the roux: Sprinkle flour over the onions and stir for 1 minute. It should look like a paste. This step ensures a smooth, thick sauce.
Add liquids: Slowly whisk in milk, then vegetable broth.
Keep whisking to avoid lumps. Simmer gently for 3–4 minutes until the sauce thickens enough to coat a spoon.
Season and enrich: Stir in Dijon, nutmeg, thyme, salt, and pepper. Add 1/2 cup Parmesan and mozzarella (if using).
Stir until smooth and creamy. Taste and adjust seasoning.
Combine with vegetables: Add the blanched vegetables to the skillet and toss to coat. If your skillet is small, mix everything in a large bowl instead.
Assemble the bake: Transfer the mixture to the prepared baking dish.
Smooth the top. Sprinkle with remaining 1/4 cup Parmesan and the panko.
Bake: Place in the oven for 18–22 minutes, until bubbling at the edges and lightly golden on top. For a deeper crust, broil for 1–2 minutes at the end, watching closely.
Rest and serve: Let it stand for 5 minutes to set.
Garnish with chopped parsley. Serve warm alongside roast meats, fish, or a hearty grain dish.