Name the role, not the colour
A property called --ink is read wherever text is drawn; one called --dark-blue describes a look and has to be renamed when the design changes. Naming by role is what makes a theme swap a one file change.
Inheritance is the mechanism
A custom property set on a container is visible to every descendant, which is why the definition belongs high in the tree. Setting it on a leaf makes it visible only there, and that is usually the bug.