$Record and $Record__Prior
Key Takeaway
$Record holds the triggering record's field values, and the flow can change them. $Record__Prior holds read-only values from just before the flow started, and all of its values are null when a newly created record triggers the flow.
The triggering record is the record that starts a flow. Salesforce automatically gives the flow two global variables about that record. $Record holds the record's field values, and the flow can read and change them. $Record__Prior holds the values the record had just before the change, and those values are read-only.
What $Record holds
$Record is a special record variable that Salesforce creates and fills automatically when a record-triggered flow runs. It holds all the field values from the triggering record, so the flow doesn't need a Get Records element or its own variables to get that record's data.
In the Flow Builder resource menu, $Record appears with the label "Triggering {Object}", where {Object} is the object the flow runs on. For example, a flow on Contact shows "Triggering Contact". You can select it to use the whole record, or select it and then a field to use one field value.
In a record-triggered flow, $Record doesn't contain values for fields whose values come from other records. Examples include Contact.Name and User.MediumPhotoUrl.