fr is not a length and does not work in calc

fr looks like a unit and behaves like a share of what is left after everything else has been laid out, which is why it cannot appear in arithmetic with lengths.

/* invalid: fr is not a length */
grid-template-columns: calc(1fr - 2rem) 20rem;

/* what was meant: gap handles the spacing */
grid-template-columns: 1fr 20rem;
gap: 2rem;

1fr is also not the same as auto or 100%: it has an implicit minimum of auto, so a track with a long unbreakable word refuses to shrink below it — the grid equivalent of the flexbox min-width: auto trap, and fixed the same way with minmax(0, 1fr).