CSS transitions were originally limited to property changes on elements already on screen. An element going from `display:none` to `display:block` has no "before" value to transition from, so fade-in modals needed keyframe animations or a JS trick — add a class one `requestAnimationFrame` late.
Values defined inside `@starting-style` are exactly that "just before it appears" frame. Combined with `transition-behavior: allow-discrete`, even discrete properties like `display` and `overlay` can transition, so a dialog or popover fading in from `display:none` becomes a one-line transition.
Check caniuse/MDN baseline for support. Where it's missing, a `@keyframes` entry animation remains the standard fallback.
When to use
Giving a modal, popover, or toast a smooth fade-in from display:none without writing keyframes.