anchor.diff:        return;
       }
   
  -    _saveStyles(t.style);
  +    if (_transitionEndTimer == null) {
  +      _saveStyles(t.style);
  +      final Point<double> delta = _getCenterPoint(this) - _getTopLeftPoint(t);
  +      _setStyle(t.style, 'transform-origin',
  +          '${delta.x.round()}px ${delta.y.round()}px');
  +    }
   
  -    t.style.transform = 'scale(0)';
  -    t.style.opacity = '0';
  -    t.style.transition = 'transform $TRANSITION_DURATION ease-in, '
  -        'opacity $TRANSITION_DURATION ease-out';
  -    final Point<double> delta = getCenterPoint(this) - getTopLeftPoint(t);
  -    t.style.transformOrigin = '${delta.x.round()}px ${delta.y.round()}px';
  +    _setStyle(t.style, 'transform', 'scale(0)');
  +    _setStyle(t.style, 'opacity', '0');
  +    _setStyle(t.style, 'transition',
  +        'transform ${TRANSITION_DURATION.inMilliseconds}ms ease-in  0s, '
  +        'opacity   ${TRANSITION_DURATION.inMilliseconds}ms ease-out 0s');
  +    startTransitionEndTimer();
     }
   
     void _unfoldTarget() {
  
positive.code:     } else {
        _restoreStyles(t.style);
      }
    }
  
    _saveStyles(CssStyleDeclaration style) =>
        PROP_NAMES.forEach((p) => _saveStyle(style, p));
    _saveStyle(CssStyleDeclaration style, String propName) {
  
negative.code:   HtmlElement get _targetElement =>
        target == null ? null : querySelector(target);
    CssStyleDeclaration _originalStyle;
    Timer _transitionEndTimer;
  
    FoldButtonElement.created() : super.created();
  
  