Combine the chicken, yogurt, garlic, ginger, garam masala, and half of the salt. Marinate for at least 20 minutes.
Heat 1 tablespoon of oil in a Dutch oven. Add the onion and cook for 8 to 10 minutes until golden. Transfer half of the onion to a plate.
Add the remaining oil, cumin, cinnamon, and cardamom. Cook for 30 seconds, then add the marinated chicken.
Cook for 12 to 15 minutes, stirring occasionally, until the chicken is nearly cooked and the masala is thick.
Cook and Layer the Rice:
Bring the stock to a boil in a separate pot. Add the soaked rice and cook until the grains are about three-quarters cooked, 6 to 8 minutes. Drain well.
Spread the rice over the chicken. Scatter the mint, reserved fried onions, and saffron water over the top.
Cover tightly, reduce the heat to low, and steam for 20 minutes. Rest for 10 minutes before fluffing gently.
Spoon the biryani onto a platter, keeping the layers visible, and serve hot.
Notes
Do not overcook the rice before layering; a firm center prevents mushy biryani.
For extra richness, drizzle 1 tablespoon melted ghee over the rice before steaming.
Serve with cooling yogurt raita to balance the spices.