Two operations are causally related when one could have influenced the other. There are three ways this happens. First, if a single process does A and then B, A causally precedes B. Second, if a process reads a value and then writes a new one, the write depends on the read. Third, causality is transitive: if A precedes B and B precedes C, then A precedes C. Everything else is concurrent, meaning neither operation knew about the other.
The model promises that every node applies causally related writes in the same order. Concurrent writes carry no ordering promise, so two replicas are free to apply them in different orders. This is why causal consistency sits in the middle of the spectrum. Linearizability gives a single global order for all operations and behaves like one machine. Eventual consistency gives no order at all and only promises replicas converge someday. Causal consistency orders the things that matter for correctness and leaves the rest free.
A useful mental check: if you would be confused or upset to see the effect without the cause, that pair is causally related and the model protects it. A reply appearing before the comment it answers, a balance update appearing before the deposit that caused it, a photo showing up before the album it was added to. Those anomalies cannot happen under causal consistency.