Draw the contours:
Observed limit (solid line):
ax.contour(X, Y, Z, levels=[1.0], colors="black", linewidths=2)
ax.contourf(X, Y, Z, levels=[1.0, Z.max()], colors=["gray"], alpha=0.3)
Expected limit (dashed line):
ax.contour(X, Y, Z_exp, levels=[1.0], colors="black",
linewidths=2, linestyles="dashed")
Brazil bands (expected +/-1sigma, +/-2sigma):
ax.contourf(X, Y, Z_p2s, levels=[1.0, Z.max()], colors=["#FFF200"], alpha=0.5)
ax.contourf(X, Y, Z_p1s, levels=[1.0, Z.max()], colors=["#00CC00"], alpha=0.5)
Kinematic boundary: Diagonal line where decay is forbidden.
ax.plot([x_min, x_max], [x_min, x_max], "k--", alpha=0.5, label="Kinematic boundary")