grid-column: span 4 is what’s busted — you’ve defined a 3‑column grid, then told every .card to span 4 columns, so the browser starts inventing implicit grid tracks / placements to satisfy it.
Fix depends on intent: if cards are meant to be full-width, make it explicit with .card { grid-column: 1 / -1; }. If they’re meant to flow in the 3-column layout, drop the grid-column rule (or set it to span 1) and let auto-placement do its thing.