Yeah, but this is 2017, when we can't even display images or text on a webpage without JavaScript. Why do in a few characters of CSS what can be done in kilobytes of remotely-executed JavaScript?
Alternatively, couldn't you make "password" an eight-character ligature that looks like the word rather than eight discs?
yeah. The :empty() pseudoclass should do the trick.
:empty is for elements with no children, not empty value.
You could potentially use the validation rules, and set a min length of 1.
You'd need [required] instead of [minlength] for :valid to work.
The other option is :placeholder-shown, to style no-input normally, but it's newer and not as supported.
I wonder if the good old input[value=""] would work. Probably not if you have jQuery.
No, because that matches on the HTML attribute (aka the defaultValue property in JS), not on the current value of the input.