Heat olive oil in a large heavy-bottomed pot over medium heat.
Add onion and cook until soft and lightly golden.
Stir in garlic and cook for 30 seconds until fragrant.
Add ground beef and break it up well.
Cook until fully browned and slightly crispy in spots.
Sprinkle chili powder, cumin, smoked paprika, cayenne, salt, pepper, onion powder, and garlic powder over the meat.
Stir continuously for 1–2 minutes to bloom the spices.
Stir in crushed tomatoes and tomato sauce.
Add kidney beans and pinto beans.
Pour in beef broth and Worcestershire sauce.
Add sugar and cocoa powder if using.
Bring to a gentle boil.
Reduce heat to low and simmer partially covered for 60–90 minutes, stirring every 10–15 minutes.
Taste and adjust salt and heat as needed.
Add a splash of broth if chili becomes too thick.
Simmer an additional 10 minutes before serving.