While the full story is more complicated, you can think of @ as a shorthand way of writing out your root domain. It is expected to appear as your root domain after you save it.
You cannot publish a CNAME at the root. When you create a CNAME at the root in Cloudflare it will be published as synthetic A and AAAA records via CNAME flattering. This means that any validation method that is looking for a CNAME record type will not work.
You might need to ask Ghost how they validate your custom domain. Since they mention using Cloudflare with your root domain in the following guide, I would expect them to have a validation process that worked with CNAME flattening.