font-display: swap, optional, and what each one trades

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.