(function () {


if ((typeof module !== "undefined" && module !== null) && (module.exports != null)) {
    module.exports = chroma;
  }

  if (typeof define === 'function' && define.amd) {
    define([], function() {
      return chroma;
    });
  } else {
    root = typeof exports !== "undefined" && exports !== null ? exports : this;
    root.chroma = chroma;
  }

  chromato.color = function(x, y, z, m) {
    return new Color(x, y, z, m);
  };
  
  chromato.rgb = function(r, g, b, a) {
    return new Color(r, g, b, a, 'rgb');
  };

  chromato.hex = function(x) {
    return new Color(x);
  };
  
  chromato.hsl = function(h, s, l, a) {
    return new Color(h, s, l, a, 'hsl');
  };

  chromato.hsv = function(h, s, v, a) {
    return new Color(h, s, v, a, 'hsv');
  };

  chromato.lab = function(l, a, b) {
    return new Color(l, a, b, 'lab');
  };

  chromato.lch = function(l, c, h) {
    return new Color(l, c, h, 'lch');
  };
  
  chromato.css = function(x) {
    return new Color(x);
  };

  chromato.hsi = function(h, s, i) {
    return new Color(h, s, i, 'hsi');
  };

  chromato.gl = function(r, g, b, a) {
    return new Color(r * 255, g * 255, b * 255, a, 'gl');
  };

  chromato.interpolate = function(a, b, f, m) {
    if ((a == null) || (b == null)) {
      return '#000';
    }
    if (type(a) === 'string') {
      a = new Color(a);
    }
    if (type(b) === 'string') {
      b = new Color(b);
    }
    return a.interpolate(f, b, m);
  };

  chromato.mix = chromato.interpolate;

  chromato.contrast = function(a, b) {
    var l1, l2;

    if (type(a) === 'string') {
      a = new Color(a);
    }
    if (type(b) === 'string') {
      b = new Color(b);
    }
    l1 = a.luminance();
    l2 = b.luminance();
    if (l1 > l2) {
      return (l1 + 0.05) / (l2 + 0.05);
    } else {
      return (l2 + 0.05) / (l1 + 0.05);
    }
  };

  chromato.luminance = function(color) {
    return chroma(color).luminance();
  };

}).call(this);
@@ -360,16 +360,956 @@
 ma;%0A  %7D%0A
+    function Color(x, y, z, m) %7B%0A      var me, _ref2;%0A      me = this;%0A      if (!(x != null) && !(y != null) && !(z != null) && !(m != null)) %7B%0A        x = %5B255, 0, 255%5D;%0A      %7D%0A      if (type(x) === 'array' && x.length === 3) %7B%0A        if (m == null) m = y;%0A        _ref2 = x, x = _ref2%5B0%5D, y = _ref2%5B1%5D, z = _ref2%5B2%5D;%0A      %7D%0A      if (type(x) === 'string') %7B%0A        m = 'hex';%0A      %7D else %7B%0A        if (m == null) m = 'rgb';%0A      %7D%0A      if (m === 'rgb') %7B%0A        me.rgb = %5Bx, y, z%5D;%0A      %7D else if (m === 'hsl') %7B%0A        me.rgb = Color.hsl2rgb(x, y, z);%0A      %7D else if (m === 'hsv') %7B%0A        me.rgb = Color.hsv2rgb(x, y, z);%0A      %7D else if (m === 'hex') %7B%0A        me.rgb = Color.hex2rgb(x);%0A      %7D else if (m === 'lab') %7B%0A        me.rgb = Color.lab2rgb(x, y, z);%0A      %7D else if (m === 'hcl') %7B%0A        me.rgb = Color.hcl2rgb(x, y, z);%0A      %7D else if (m === 'hsi') %7B%0A        me.rgb = Color.hsi2rgb(x, y, z);%0A      %7D%0A    %7D%0A%0A
 %0A  chrom

Create new 'Color' function