anchor.diff:      // rule before any of its children.
       var insertionPoint = _outerChildren.isEmpty ? null : _outerChildren.last;
   
  -    _styleRules.add(new CssStyleRule(selector, [], span: node.span));
  -    var children = _collectChildren(() => super.visitStyleRule(node));
  -    _styleRules.removeLast();
  +    var children = _withStyleRule(
  +        new CssStyleRule(selector, [], span: node.span),
  +        () => _collectChildren(() => super.visitStyleRule(node)));
       if (children.isEmpty) return;
   
       var rule = new CssStyleRule(selector, children, span: node.span);
  
positive.code:     list.add(new LinkedListValue(node));
    }
  
    /*=T*/ _resetStyleRules/*<T>*/(/*=T*/ callback()) {
      var oldStyleRules = _styleRules;
      _styleRules = [];
      var result = callback();
      _styleRules = oldStyleRules;
      return result;
    }
  
    /// Like [_collectChildren], but handles bubbling.
    Iterable<CssNode> _atRuleChildren(void callback()) {
      if (_styleRules.isEmpty) return _collectChildren(callback);
  
      return _scope(() {
        _outerChildren = new LinkedList();
  
negative.code: 
    void visitStyleRule(StyleRule node) {
      var selectorText = _performInterpolation(node.selector, trim: true);
      if (_styleRule != null) {
        // TODO: semantically resolve parent references.
        selectorText = new CssValue(
            "${_styleRule.selector.value} ${selectorText.value}",
            span: node.selector.span);
      }
  
  