anchor.diff:  
     return color.changeAlpha(color.alpha - amount.valueInRange(0, 1, "amount"));
   }
  +
  +int _codepointForIndex(int index, int lengthInCodepoints) {
  +  if (index == 0) return 0;
  +  if (index > 0) return math.min(index - 1, lengthInCodepoints);
  +  return math.max(lengthInCodepoints + index, 0);
  +}
  
positive.code:     var index = arguments[2].assertNumber("index");
      index.assertNoUnits("index");
  
      var lengthInRunes = string.text.runes.length;
      var indexInt = index.assertInt("index");
      if (indexInt < 0) indexInt = lengthInRunes + indexInt + 2;
      var insertionPoint = codepointIndexToCodeUnitIndex(
          string.text, math.max(math.min(indexInt - 1, lengthInRunes), 0));
      return new SassString(
          string.text.replaceRange(insertionPoint, insertionPoint, insert.text),
          quotes: string.hasQuotes);
    }));
  
  
negative.code:     var codePointIndex =
          codeUnitIndexToCodepointIndex(string.text, codeUnitIndex);
      return new SassNumber(codePointIndex + 1);
    }));
  
    environment.setFunction(new BuiltInCallable(
        "str-slice", r"$string, $start-at, $end-at: -1", (arguments) {
      var string = arguments[0].assertString("string");
      var start = arguments[1].assertNumber("start-at");
      var end = arguments[2].assertNumber("end-at");
      start.assertNoUnits();
      end.assertNoUnits();
  
      var lengthInCodepoints = string.text.runes.length;
      var startCodepoint =
          _codepointForIndex(start.assertInt(), lengthInCodepoints);
      var endCodepoint = _codepointForIndex(end.assertInt(), lengthInCodepoints);
      return new SassString(
          string.text.substring(
              codepointIndexToCodeUnitIndex(string.text, startCodepoint),
              codepointIndexToCodeUnitIndex(string.text, endCodepoint) + 1),
          quotes: string.hasQuotes);
    }));
  
    // ## Introspection
  