covariance and contravariance
When you change basis, vectors and functionals do not transform the same way, and the two words name the two patterns. The components of an ordinary vector transform contravariantly — against the basis — while the components of a functional (a covector) transform covariantly — with the dual basis. The point is that they move in opposite directions so the pairing between them stays fixed.
Make it concrete. Suppose new basis vectors are the old ones combined by a matrix P (new in terms of old). Then a vector's coordinates change by P^-1 (contravariant: if you double the unit, the coordinate halves), while a covector's components change by P^T (covariant). The two laws are inverse-transposes of each other, which is precisely the relationship between a basis and its dual basis.
The 'invariant' that survives is the pairing: <f, v> = sum f_i v^i is the same number in every basis, because the P-factor from the vector cancels the (P^-1)-factor from the covector. Coordinate-free reality is whatever does not depend on the basis, and the pairing is the prototype.
This is the seed of tensor calculus. Physicists encode the two transformation laws as upper indices (contravariant, vector-like) and lower indices (covariant, covector-like); a general tensor mixes both. Getting an index up versus down right is exactly getting vector versus covector right — the same distinction you have been building here, written with raised and lowered labels.
Vector and covector components transform inversely so their pairing stays fixed.
Naming trap: 'contravariant' components belong to ordinary vectors, 'covariant' components to covectors — the adjectives describe the COMPONENTS' transformation, which is opposite to the basis vectors' own transformation, so the terminology feels backwards at first. Anchor on: a vector is contravariant, a covector is covariant.