Why the group is not on the bullseye
Your optic sits above the bore, so the bullet starts below the line of sight and climbs through it. A rifle zeroed at 50 yd still hits low at 25 yd, by an amount set mostly by sight height. zero-targets computes that amount and puts the IMPACT mark exactly there, so a short range can give you a zero for a longer one.
How it is calculated
A point-mass trajectory solver (RK4 with the standard G1 and G7 drag tables) runs in your browser. It finds the bore angle that crosses the line of sight at your zero distance, then reads the bullet path, velocity and energy at every range, plus drift in a 10 mph crosswind for the ballistic cards and table. Zeroing assumes still air on level ground in a standard atmosphere. It is checked against py-ballisticcalc. Muzzle velocity comes from published barrel-length data, or from your chronograph.
Limits
The result is only as good as the inputs. For the zero target, sight height matters most; for long-range data, muzzle velocity and BC do. Spin drift, Coriolis and uphill or downhill shots are not modeled. Confirm your zero and your drops at real distances, and follow your range's safety rules.