code: function transform (fn, duration, then) {
      
      var tStart = Date.now();
      var end = 1;
      
  //
  // The parameters `duration` and `then` are both optional.
  //
      duration = typeof duration === "number" ? duration : DEFAULT_DURATION;
      then = typeof duration === "function" ? duration : then;
      then = typeof then === "function" ? then : function () {};
      
      function loop () {
          
          var tCurrent = Date.now() - tStart;
          var value = end * ((tCurrent / (duration / 100)) / 100);
          
          value = value > end ? end : value;
          
          if (tCurrent > duration || value === end) {
              fn(end);
              then();
              return;
          }
          
          fn(value);
          
          requestAnimationFrame(loop);
      }
      
      loop();
  }
docs: ## Function `transform`  A function that takes another function and feeds it values from `0` to `1` over a specified duration. This is the most basic function everything else here is built upon. To do something useful, the supplied callback function usually has to do some basic math to calculate the *real* start and end values of a transformation.  Please note that no **easing** is used here at all, so everything is just linear. The supplied function is responsible for applying any easing if it is needed.