The descriptor decides whether text is invisible, wrong or missing while a font loads, and there is no option that avoids all three.
@font-face {
font-family: Inter;
src: url('/fonts/inter-var.woff2') format('woff2-variations');
font-display: swap;
}
/* block: invisible for up to 3s, then fallback, then swap
swap: fallback immediately, swap whenever it arrives
fallback: invisible ~100ms, fallback, swap only if <3s
optional: invisible ~100ms, fallback, and NEVER swap */
swap is the common choice and produces a layout shift whenever the font arrives late, which is a Cumulative Layout Shift regression caused by a performance setting. optional is the only one that guarantees no shift, at the cost of some visitors never seeing the font at all — which for a body typeface is usually the better trade and is rarely chosen.