anchor.diff:  library fold_button;
   
   import 'dart:html';
  +import 'dart:async';
   import 'package:polymer/polymer.dart';
   
   @CustomTag('fold-button')
   class FoldButtonElement extends PolymerElement {
  -  static const TRANSITION_DURATION = '0.2s';
     static const List<String> PROP_NAMES =
         const ['display', 'transform', 'opacity', 'transform-origin', 'transition'];
  +  static const TRANSITION_DURATION = const Duration(milliseconds: 200);
  +  static const DISPLAY_DELAY = const Duration(milliseconds: 80);
   
     @PublishedProperty(reflect: true)
     String get target => readValue(#target);
  
positive.code:       return;
      }
  
      _saveStyles(t.style);
  
      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';
    }
  
    void _unfoldTarget() {
  
negative.code:   }
    _restoreStyles(CssStyleDeclaration style) =>
        PROP_NAMES.forEach((p) => _restoreStyle(style, p));
    _restoreStyle(CssStyleDeclaration style, String propName, [String defaultValue]) {
      if (_originalStyle == null) return;
      final p = _originalStyle.getPropertyValue(propName);
      final value = (p == null) ? defaultValue : p;
      if (value == null) {
        _listWithVenderPrefix(propName).forEach(style.removeProperty);
      } else {
        _listWithVenderPrefix(propName).forEach((name) =>
            style.setProperty(name, value));
      }
    }
  }
  
  List<String> _listWithVenderPrefix(String propName) =>
    ['-webkit-$propName', '-moz-$propName', '-ms-$propName',
     '-o-$propName', propName];
  
  _getCenterPoint(Element e) {
    final rects = e.getClientRects();
    return rects
      .map((r) => (r.topLeft + r.bottomRight) * 0.5)
      .fold(new Point(0.0, 0.0), (prev, p) => prev + p) * (1 / rects.length);
  }
  _getTopLeftPoint(Element e) {
    final rects = e.getClientRects();
    return rects
      .map((r) => r.topLeft)
  