anchor.diff:  
   @reflectable
   class _ValidatedField {
  +  static const INVALID_CLASS = 'invalid';
  +  
     final InputElement _element;
     final Function _onValidityChange;
  +  bool _wasVisited = false;
     bool _isValid;
   
     bool get isValid => _isValid;
   
     _ValidatedField(this._element, this._onValidityChange) {
  -    if (_element is TextInputElement) {
  -      // Just listening to the [_body.onChange] is not enough to update
  -      // the validity in real-time as the user types.
  -      _element.onInput.listen(_updateValidity);
  -      _updateValidity();
  -    }
  +    // Just listening to the [_body.onChange] is not enough to update
  +    // the validity in real-time as the user types.
  +    _element
  +        ..onFocus.listen(_setVisited)
  +        ..onClick.listen(_setVisited)
  +        ..onInput.listen(_updateValidity)
  +        ..onPaste.listen(_updateValidity)
  +        ..onReset.listen(_updateValidity);
  +    _element.classes.remove('invalid');
     }
   
  +  void _setVisited([_]) {
  +    _wasVisited = true;
  +    _updateValidity();
  +  }
  +  
     void _updateValidity([_]) {
  -    final bool newIsValid = _element.disabled || _element.checkValidity();
  -    if (newIsValid != _isValid) {
  -      _isValid = newIsValid;
  -      // Don't rely on the automatic ':invalid' pseudo-class for finer control.
  -      _element.classes.toggle('invalid', !_isValid && _element.value.isNotEmpty);
  -      _onValidityChange();
  -    }
  +    _isValid = _element.disabled || _element.checkValidity();
  +    // Don't rely on the automatic ':invalid' pseudo-class for finer control.
  +    _element.classes.toggle('invalid', _wasVisited && !_isValid);
  +    _onValidityChange();
     }
   }
  
positive.code: 
    void show() {
      if (!_modal.opened) {
        _updateFormValidity();
        _modal.toggle();
      }
  
negative.code:   }
  
    void _addValidatableFields(Iterable<Node> candidates) {
      _validatedFields.clear();
      _addValidatableFieldsImpl(candidates);
    }
  
    void _addValidatableFieldsImpl(Iterable<Node> candidates) {
      candidates.forEach((Element element) {
        if (element is InputElement) {
          if (element.willValidate) {
  