docs: function () {
                  /* Color hooks registration: Colors are defaulted to white -- as opposed to black -- since colors that are
                     currently set to "transparent" default to their respective template below when color-animated,
                     and white is typically a closer match to transparent than black is. An exception is made for text ("color"),
                     which is almost always set closer to black than white. */
                  for (var i = 0; i < CSS.Lists.colors.length; i++) {
                      var rgbComponents = (CSS.Lists.colors[i] === "color") ? "0 0 0 1" : "255 255 255 1";
                      CSS.Hooks.templates[CSS.Lists.colors[i]] = [ "Red Green Blue Alpha", rgbComponents ];
                  }
  
                  var rootProperty,
                      hookTemplate,
                      hookNames;
  
                  /* In IE, color values inside compound-value properties are positioned at the end the value instead of at the beginning.
                     Thus, we re-arrange the templates accordingly. */
                  if (IE) {
                      for (rootProperty in CSS.Hooks.templates) {
                          hookTemplate = CSS.Hooks.templates[rootProperty];
                          hookNames = hookTemplate[0].split(" ");
  
                          var defaultValues = hookTemplate[1].match(CSS.RegEx.valueSplit);
  
                          if (hookNames[0] === "Color") {
                              /* Reposition both the hook's name and its default value to the end of their respective strings. */
                              hookNames.push(hookNames.shift());
                              defaultValues.push(defaultValues.shift());
  
                              /* Replace the existing template for the hook's root property. */
                              CSS.Hooks.templates[rootProperty] = [ hookNames.join(" "), defaultValues.join(" ") ];
                          }
                      }
                  }
  
                  /* Hook registration. */
                  for (rootProperty in CSS.Hooks.templates) {
                      hookTemplate = CSS.Hooks.templates[rootProperty];
                      hookNames = hookTemplate[0].split(" ");
  
                      for (var i in hookNames) {
                          var fullHookName = rootProperty + hookNames[i],
                              hookPosition = i;
  
                          /* For each hook, register its full name (e.g. textShadowBlur) with its root property (e.g. textShadow)
                             and the hook's position in its template's default value string. */
                          CSS.Hooks.registered[fullHookName] = [ rootProperty, hookPosition ];
                      }
                  }
              }