Fragment shader vertColor question

I’m reading the PShader reference and I have a question about code listing 4.2:

Vertex shader:

uniform mat4 transform;

attribute vec4 position;
attribute vec4 color;

varying vec4 vertColor;

void main() {
  gl_Position = transform * position;
  vertColor = color;

Fragment shader:

#ifdef GL_ES
precision mediump float;
precision mediump int;

varying vec4 vertColor;

void main() {
  gl_FragColor = vertColor;

In the vertex shader color is the color of the input vertex. In this code listing you set the output color vertColor equal to the input color color. However, once you go over to the fragment shader you’re just passed a single vertColor, which I understand to be the color of a single vertex.

Why are you only passed a single vertColor? Is vertColor automatically interpolated from the vertices of the fragment?

if I understand correctly, color (and other attributes) values are interpolated when passed from vert shader to frag shader.

So, for example, if you want to add shading using lights and normals (phong, PBR, etc) you want to do it inside the fragment shader - otherwise (if you implement it in the vertex shader) the result may look distorted.