Norms

Norms compare the neutral face with a selected reference group, gender, and dentition stage.
Landmarks pair by their canonical names, never by list or mesh-vertex order.

Photos-to-face provides 42 landmarks. The current 14 reference assets contain 41 of those names;
none contains f_Neck, so neck measurements are not compared. Matching also excludes f_Me,
s_Tr, and the bilateral s_po, s_go, and f_SBA points because the mobile scan boundary is
unreliable. These eight points stay fixed to the patient in the vector field. The remaining
33 shared landmarks drive the fit; the same exclusions currently apply to reconstructed faces.

The reference CSVs use left-positive X and anterior-positive Z, plus classical outer-lip
f_Ls/f_Li names. FaceAnalysis_Norm.ImportNorm_CSV converts them to Titan face coordinates
with (-x, y, -z) and swaps f_Ls with f_UpperLip, and f_Li with f_LowerLip. The CSVs
retain their source convention. See docs/titan/face_scan/face.md for Titan's lip definitions.

Matching estimates axis scales, then fits rotation and translation against the unchanged
patient coordinates. Refinement uses those same patient points. Changing faces clears the
cached norm. A saved transform whose source centroid differs from the current reference
points is recomputed, including matches saved before the depth-axis correction on 2026-09-05.
Valid corrected matches retain the doctor's saved adjustments.

The displayed vectors run from the patient surface toward the fitted norm surface. They are
interpolated from shared landmark triangles; they are not mesh normals. No neck reference
position is synthesized, although interpolation can extend onto mesh regions outside the
landmark triangles.

The face socket must apply its expression transform even before a dental jaw is loaded.
Manager_3DViewer_Sockets.OnBlendShapeWeightChanged updates that pose independently of the jaw;
otherwise the face can remain at identity while the correctly transformed overlays appear offset.
The regular LateUpdate also synchronizes the face pose independently of blendshape changes.
This covers late orientation/loading updates when the neutral expression weights remain zero.

Regression checks: FaceNormMatchingTests verifies reference coordinates, lip order, landmark
coverage, immutable fitting inputs, half-turn rotations, and planar inputs.