Difference between kube-proxy and Calico

Please explain in simple terms the difference between kube-proxy and Calico CNI…
The AI explanation is not clear.

kube-proxy is responsible for communicating with the master node and routing. Calico CNI provides connectivity by assigning IP addresses to pods and services, and reachability through its routing deamon. The routing seems to be an overlapping function between the two. Calico CNI uses IPtables, while kube-proxy sets up iptables rules in order to do random load balancing between them. In short, Calico CNI is used to configure pods and services with an IP, this IP is then stored in the IP table at the kube-proxy. ¹²³

Calico replaces kube-proxy if running in eBPF mode, otherwise it uses it.