Preheat and prep: Heat oven to 375°F (190°C). Grease a 9x13-inch baking dish.
Cook the pasta: Boil in salted water until just shy of al dente (1–2 minutes less than package).
Drain and set aside.
Sauté aromatics: In a large skillet, warm 1 tablespoon olive oil over medium. Add onion with a pinch of salt and cook 3–4 minutes until translucent. Stir in garlic for 30 seconds.
Wilt the spinach: Add fresh spinach by handfuls, stirring until wilted.
If using frozen spinach, add it squeezed dry and warm through.
Make the roux: Push veggies to the edges. Melt butter in the center, sprinkle in flour, and whisk 1 minute to cook off the raw taste.
Build the sauce: Slowly whisk in milk, then broth if using. Simmer 2–3 minutes until slightly thickened.
Stir in cream cheese until smooth.
Season and add cheeses: Add salt, pepper, Italian seasoning, red pepper flakes, lemon zest, and lemon juice. Stir in half the mozzarella and half the Parmesan until melted.
Add artichokes and pasta: Fold in chopped artichokes, then the cooked pasta. Taste and adjust seasoning; the sauce should be well-seasoned now.
Assemble: Transfer mixture to the baking dish.
Top with remaining mozzarella and Parmesan.
Breadcrumb topping: Toss panko with 1 tablespoon olive oil and a pinch of salt. Sprinkle evenly over the cheese.
Bake: Bake 18–22 minutes until bubbly and lightly browned. For extra color, broil 1–2 minutes, watching closely.
Rest and serve: Let sit 5–10 minutes so the sauce sets slightly.
Garnish with extra lemon zest or chopped parsley if you like.