Whisk together the flour, baking powder, and salt in a medium bowl until well combined.
In a large bowl using an electric mixer, beat the butter until smooth and creamy, about 1 minute. Add the sugar gradually and continue beating on medium-high speed until the mixture is light and fluffy, approximately 2-3 minutes.
Beat in the eggs one at a time, ensuring each is fully incorporated before adding the next. Scrape down the sides of the bowl as needed. Mix in the vanilla extract and almond extract (if using) until just combined.
Gradually add the flour mixture to the wet ingredients on low speed, mixing until just combined. Be careful not to overmix—stop as soon as no flour streaks remain.
Divide the dough in half, form each portion into a flat disc, and wrap tightly in plastic wrap. Refrigerate for at least 2 hours or up to 3 days.
Preheat your oven to 350°F (175°C) and line baking sheets with parchment paper.
Working with one portion of dough at a time (keeping the other refrigerated), roll out on a lightly floured surface to ¼-inch thickness. Cut into desired shapes using cookie cutters, then transfer to prepared baking sheets, spacing 2 inches apart.
Bake one sheet at a time in the center rack of your oven for 10-12 minutes. The cookies are done when the edges are just set but the centers still appear slightly underbaked and have no browning.
Allow cookies to cool on the baking sheet for 5 minutes before transferring to a wire rack to cool completely.
For the frosting, beat softened butter until smooth and creamy. Gradually add powdered sugar, alternating with heavy cream or milk, until desired consistency is reached. Mix in vanilla extract and salt.
Divide frosting into separate bowls and add food coloring as desired. Spread or pipe frosting onto completely cooled cookies and add sprinkles or other decorations immediately before the frosting sets.
Allow frosting to set for at least 2 hours before stacking or storing.