anchor.diff:        doneForward: (Element e) {
           e.style.transform = transformEnd;
           e.style.opacity = '$opacityEnd';
  +        if (hideOnZero && opacityEnd.abs() < 0.001) {
  +          e.style.display = 'none';
  +        }
           if (disableEvents) e.style.pointerEvents = 'auto';
         }, doneBackward: (Element e) {
           e.style.opacity = '$opacityStart';
           e.style.transform = transformStart;
  +        if (hideOnZero && opacityEnd.abs() < 0.001) {
  +          e.style.display = 'none';
  +        }
           if (disableEvents) e.style.pointerEvents = 'none';
         });
   }
  
positive.code: Keyframes transformFadeKeyframes(String transformStart, double opacityStart,
                                   {String transformEnd: 'none',
                                    double opacityEnd: 1.0,
                                    bool disableEvents: false}) {
    String content = """
  from {
    -webkit-transform: $transformStart;
  
negative.code: """;
    
    // prepare method based on whether to disable the pointer
    KeyframeSetter prepare = (Element e) {
      if (disableEvents) e.style.pointerEvents = 'none';
      if (hideOnZero) e.style.display = 'block';
    };
    
    // generate a name that is somewhat unique to this animation but will be the
  