ReadonlyaAlpha, nominally 0 to 1 and not clamped either.
parseColor returns the number the author wrote: 0.1 reads back
as 0.1, and a hex byte as byte / 255.
ReadonlybBlue, on the same terms.
ReadonlygGreen, on the same terms.
ReadonlyrRed, nominally 0 to 255 and not clamped to it.
Mixing past either end of a range leaves the channel outside the gamut,
and that is kept rather than flattened: formatColor writes such a
colour as color(srgb ...), which can express it, instead of a hex triple
that cannot.
A colour as four channels:
r,g,bin 0–255 andain 0–1.