Чистым css'ом это вроде не решить. Как вариант js'ом отслеживать пустой value или нет, и если нет, то навешивать на инпут класс, который и будет заменять input:valid
Если по подбору цветовой палитры то есть такая статья.
Я, для реализации данного алгоритма на php, использовал ImageMagick (возможно это из серии «из пушки по воробьям» и можно обойтись той же GD, но мне как-то привычней и быстрей было так)
Это обычный data-атрибут, в который, как мне кажется, записана json-строка, в последствии преобразующаяся js-кой в объект и каким-то образом обрабатываемая.
Но это не точно:) (я не спец, о опыт по работе был).