Here’s some more background information on the technical aspects of the limit:
GOSSIP_MAX_SIZE is the relevant constant and is currently set to 10MB for the uncompressed payload of the block message.
The contents of this payload is an SSZ-encoded consensus message. The consensus message has information about consensus matters and also carries the execution payload, which is the the part of the message received from the execution layer. All fields in the consensus layer have fixed bounds on how much space they can possibly use - in Deneb, this “consensus overhead” amounts to 357288 bytes.
The execution payload is made up of several fields, all of which have constant upper bounds on their length except for the transactions (in the consensus layer, we have a theoretical limit of 1024TB of transaction data, for the curious). The constant-size portion of the execution payload is another 1264 bytes.
As such, we can reframe the problem of a maximum gossip size effectively as a limit on the size of the transactions that we can fit in a block - 10127208 bytes.
The advantage of framing it as a limit on transactions is that this field is entirely controlled by the block producer and / or execution clients - they know, as they are constructing the block, what size transactions have and what the sum of the transaction sizes are.
Edit: fixed sizes, thanks @tbenr for crosschecking with Teku!