aboutsummaryrefslogtreecommitdiff
path: root/node_modules/stylus/lib/nodes
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/stylus/lib/nodes')
-rw-r--r--node_modules/stylus/lib/nodes/arguments.js92
-rw-r--r--node_modules/stylus/lib/nodes/atblock.js79
-rw-r--r--node_modules/stylus/lib/nodes/atrule.js136
-rw-r--r--node_modules/stylus/lib/nodes/binop.js83
-rw-r--r--node_modules/stylus/lib/nodes/block.js127
-rw-r--r--node_modules/stylus/lib/nodes/boolean.js117
-rw-r--r--node_modules/stylus/lib/nodes/call.js85
-rw-r--r--node_modules/stylus/lib/nodes/charset.js58
-rw-r--r--node_modules/stylus/lib/nodes/comment.js64
-rw-r--r--node_modules/stylus/lib/nodes/each.js75
-rw-r--r--node_modules/stylus/lib/nodes/expression.js220
-rw-r--r--node_modules/stylus/lib/nodes/extend.js69
-rw-r--r--node_modules/stylus/lib/nodes/feature.js84
-rw-r--r--node_modules/stylus/lib/nodes/function.js128
-rw-r--r--node_modules/stylus/lib/nodes/group.js110
-rw-r--r--node_modules/stylus/lib/nodes/hsla.js277
-rw-r--r--node_modules/stylus/lib/nodes/ident.js156
-rw-r--r--node_modules/stylus/lib/nodes/if.js78
-rw-r--r--node_modules/stylus/lib/nodes/import.js68
-rw-r--r--node_modules/stylus/lib/nodes/index.js59
-rw-r--r--node_modules/stylus/lib/nodes/keyframes.js81
-rw-r--r--node_modules/stylus/lib/nodes/literal.js112
-rw-r--r--node_modules/stylus/lib/nodes/media.js76
-rw-r--r--node_modules/stylus/lib/nodes/member.js82
-rw-r--r--node_modules/stylus/lib/nodes/namespace.js60
-rw-r--r--node_modules/stylus/lib/nodes/node.js250
-rw-r--r--node_modules/stylus/lib/nodes/null.js88
-rw-r--r--node_modules/stylus/lib/nodes/object.js213
-rw-r--r--node_modules/stylus/lib/nodes/params.js90
-rw-r--r--node_modules/stylus/lib/nodes/property.js96
-rw-r--r--node_modules/stylus/lib/nodes/query-list.js108
-rw-r--r--node_modules/stylus/lib/nodes/query.js170
-rw-r--r--node_modules/stylus/lib/nodes/return.js63
-rw-r--r--node_modules/stylus/lib/nodes/rgba.js367
-rw-r--r--node_modules/stylus/lib/nodes/root.js96
-rw-r--r--node_modules/stylus/lib/nodes/selector.js94
-rw-r--r--node_modules/stylus/lib/nodes/string.js147
-rw-r--r--node_modules/stylus/lib/nodes/supports.js75
-rw-r--r--node_modules/stylus/lib/nodes/ternary.js71
-rw-r--r--node_modules/stylus/lib/nodes/unaryop.js66
-rw-r--r--node_modules/stylus/lib/nodes/unit.js214
41 files changed, 4784 insertions, 0 deletions
diff --git a/node_modules/stylus/lib/nodes/arguments.js b/node_modules/stylus/lib/nodes/arguments.js
new file mode 100644
index 00000000..3c56b49c
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/arguments.js
@@ -0,0 +1,92 @@
+
+/*!
+ * Stylus - Arguments
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node')
+ , nodes = require('../nodes')
+ , utils = require('../utils');
+
+/**
+ * Initialize a new `Arguments`.
+ *
+ * @api public
+ */
+
+var Arguments = module.exports = function Arguments(){
+ nodes.Expression.call(this);
+ this.map = {};
+};
+
+/**
+ * Inherit from `nodes.Expression.prototype`.
+ */
+
+Arguments.prototype.__proto__ = nodes.Expression.prototype;
+
+/**
+ * Initialize an `Arguments` object with the nodes
+ * from the given `expr`.
+ *
+ * @param {Expression} expr
+ * @return {Arguments}
+ * @api public
+ */
+
+Arguments.fromExpression = function(expr){
+ var args = new Arguments
+ , len = expr.nodes.length;
+ args.lineno = expr.lineno;
+ args.column = expr.column;
+ args.isList = expr.isList;
+ for (var i = 0; i < len; ++i) {
+ args.push(expr.nodes[i]);
+ }
+ return args;
+};
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Arguments.prototype.clone = function(parent){
+ var clone = nodes.Expression.prototype.clone.call(this, parent);
+ clone.map = {};
+ for (var key in this.map) {
+ clone.map[key] = this.map[key].clone(parent, clone);
+ }
+ clone.isList = this.isList;
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Arguments.prototype.toJSON = function(){
+ return {
+ __type: 'Arguments',
+ map: this.map,
+ isList: this.isList,
+ preserve: this.preserve,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename,
+ nodes: this.nodes
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/atblock.js b/node_modules/stylus/lib/nodes/atblock.js
new file mode 100644
index 00000000..03a191cf
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/atblock.js
@@ -0,0 +1,79 @@
+/*!
+ * Stylus - @block
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `@block` node.
+ *
+ * @api public
+ */
+
+var Atblock = module.exports = function Atblock(){
+ Node.call(this);
+};
+
+/**
+ * Return `block` nodes.
+ */
+
+Atblock.prototype.__defineGetter__('nodes', function(){
+ return this.block.nodes;
+});
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Atblock.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Atblock.prototype.clone = function(parent){
+ var clone = new Atblock;
+ clone.block = this.block.clone(parent, clone);
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return @block.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Atblock.prototype.toString = function(){
+ return '@block';
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Atblock.prototype.toJSON = function(){
+ return {
+ __type: 'Atblock',
+ block: this.block,
+ lineno: this.lineno,
+ column: this.column,
+ fileno: this.fileno
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/atrule.js b/node_modules/stylus/lib/nodes/atrule.js
new file mode 100644
index 00000000..43301b50
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/atrule.js
@@ -0,0 +1,136 @@
+/*!
+ * Stylus - at-rule
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new at-rule node.
+ *
+ * @param {String} type
+ * @api public
+ */
+
+var Atrule = module.exports = function Atrule(type){
+ Node.call(this);
+ this.type = type;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Atrule.prototype.__proto__ = Node.prototype;
+
+/**
+ * Check if at-rule's block has only properties.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Atrule.prototype.__defineGetter__('hasOnlyProperties', function(){
+ if (!this.block) return false;
+
+ var nodes = this.block.nodes;
+ for (var i = 0, len = nodes.length; i < len; ++i) {
+ var nodeName = nodes[i].nodeName;
+ switch(nodes[i].nodeName) {
+ case 'property':
+ case 'expression':
+ case 'comment':
+ continue;
+ default:
+ return false;
+ }
+ }
+ return true;
+});
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Atrule.prototype.clone = function(parent){
+ var clone = new Atrule(this.type);
+ if (this.block) clone.block = this.block.clone(parent, clone);
+ clone.segments = this.segments.map(function(node){ return node.clone(parent, clone); });
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Atrule.prototype.toJSON = function(){
+ var json = {
+ __type: 'Atrule',
+ type: this.type,
+ segments: this.segments,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+ if (this.block) json.block = this.block;
+ return json;
+};
+
+/**
+ * Return @<type>.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Atrule.prototype.toString = function(){
+ return '@' + this.type;
+};
+
+/**
+ * Check if the at-rule's block has output nodes.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Atrule.prototype.__defineGetter__('hasOutput', function(){
+ return !!this.block && hasOutput(this.block);
+});
+
+function hasOutput(block) {
+ var nodes = block.nodes;
+
+ // only placeholder selectors
+ if (nodes.every(function(node){
+ return 'group' == node.nodeName && node.hasOnlyPlaceholders;
+ })) return false;
+
+ // something visible
+ return nodes.some(function(node) {
+ switch (node.nodeName) {
+ case 'property':
+ case 'literal':
+ case 'import':
+ return true;
+ case 'block':
+ return hasOutput(node);
+ default:
+ if (node.block) return hasOutput(node.block);
+ }
+ });
+}
diff --git a/node_modules/stylus/lib/nodes/binop.js b/node_modules/stylus/lib/nodes/binop.js
new file mode 100644
index 00000000..c56aee39
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/binop.js
@@ -0,0 +1,83 @@
+
+/*!
+ * Stylus - BinOp
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `BinOp` with `op`, `left` and `right`.
+ *
+ * @param {String} op
+ * @param {Node} left
+ * @param {Node} right
+ * @api public
+ */
+
+var BinOp = module.exports = function BinOp(op, left, right){
+ Node.call(this);
+ this.op = op;
+ this.left = left;
+ this.right = right;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+BinOp.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+BinOp.prototype.clone = function(parent){
+ var clone = new BinOp(this.op);
+ clone.left = this.left.clone(parent, clone);
+ clone.right = this.right && this.right.clone(parent, clone);
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ if (this.val) clone.val = this.val.clone(parent, clone);
+ return clone;
+};
+
+/**
+ * Return <left> <op> <right>
+ *
+ * @return {String}
+ * @api public
+ */
+BinOp.prototype.toString = function() {
+ return this.left.toString() + ' ' + this.op + ' ' + this.right.toString();
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+BinOp.prototype.toJSON = function(){
+ var json = {
+ __type: 'BinOp',
+ left: this.left,
+ right: this.right,
+ op: this.op,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+ if (this.val) json.val = this.val;
+ return json;
+};
diff --git a/node_modules/stylus/lib/nodes/block.js b/node_modules/stylus/lib/nodes/block.js
new file mode 100644
index 00000000..ed4e9776
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/block.js
@@ -0,0 +1,127 @@
+
+/*!
+ * Stylus - Block
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Block` node with `parent` Block.
+ *
+ * @param {Block} parent
+ * @api public
+ */
+
+var Block = module.exports = function Block(parent, node){
+ Node.call(this);
+ this.nodes = [];
+ this.parent = parent;
+ this.node = node;
+ this.scope = true;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Block.prototype.__proto__ = Node.prototype;
+
+/**
+ * Check if this block has properties..
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Block.prototype.__defineGetter__('hasProperties', function(){
+ for (var i = 0, len = this.nodes.length; i < len; ++i) {
+ if ('property' == this.nodes[i].nodeName) {
+ return true;
+ }
+ }
+});
+
+/**
+ * Check if this block has @media nodes.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Block.prototype.__defineGetter__('hasMedia', function(){
+ for (var i = 0, len = this.nodes.length; i < len; ++i) {
+ var nodeName = this.nodes[i].nodeName;
+ if ('media' == nodeName) {
+ return true;
+ }
+ }
+ return false;
+});
+
+/**
+ * Check if this block is empty.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Block.prototype.__defineGetter__('isEmpty', function(){
+ return !this.nodes.length;
+});
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Block.prototype.clone = function(parent, node){
+ parent = parent || this.parent;
+ var clone = new Block(parent, node || this.node);
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ clone.scope = this.scope;
+ this.nodes.forEach(function(node){
+ clone.push(node.clone(clone, clone));
+ });
+ return clone;
+};
+
+/**
+ * Push a `node` to this block.
+ *
+ * @param {Node} node
+ * @api public
+ */
+
+Block.prototype.push = function(node){
+ this.nodes.push(node);
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Block.prototype.toJSON = function(){
+ return {
+ __type: 'Block',
+ // parent: this.parent,
+ // node: this.node,
+ scope: this.scope,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename,
+ nodes: this.nodes
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/boolean.js b/node_modules/stylus/lib/nodes/boolean.js
new file mode 100644
index 00000000..97c11971
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/boolean.js
@@ -0,0 +1,117 @@
+
+/*!
+ * Stylus - Boolean
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node')
+ , nodes = require('./');
+
+/**
+ * Initialize a new `Boolean` node with the given `val`.
+ *
+ * @param {Boolean} val
+ * @api public
+ */
+
+var Boolean = module.exports = function Boolean(val){
+ Node.call(this);
+ if (this.nodeName) {
+ this.val = !!val;
+ } else {
+ return new Boolean(val);
+ }
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Boolean.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return `this` node.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Boolean.prototype.toBoolean = function(){
+ return this;
+};
+
+/**
+ * Return `true` if this node represents `true`.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Boolean.prototype.__defineGetter__('isTrue', function(){
+ return this.val;
+});
+
+/**
+ * Return `true` if this node represents `false`.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Boolean.prototype.__defineGetter__('isFalse', function(){
+ return ! this.val;
+});
+
+/**
+ * Negate the value.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Boolean.prototype.negate = function(){
+ return new Boolean(!this.val);
+};
+
+/**
+ * Return 'Boolean'.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Boolean.prototype.inspect = function(){
+ return '[Boolean ' + this.val + ']';
+};
+
+/**
+ * Return 'true' or 'false'.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Boolean.prototype.toString = function(){
+ return this.val
+ ? 'true'
+ : 'false';
+};
+
+/**
+ * Return a JSON representaiton of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Boolean.prototype.toJSON = function(){
+ return {
+ __type: 'Boolean',
+ val: this.val
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/call.js b/node_modules/stylus/lib/nodes/call.js
new file mode 100644
index 00000000..5cf655df
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/call.js
@@ -0,0 +1,85 @@
+
+/*!
+ * Stylus - Call
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Call` with `name` and `args`.
+ *
+ * @param {String} name
+ * @param {Expression} args
+ * @api public
+ */
+
+var Call = module.exports = function Call(name, args){
+ Node.call(this);
+ this.name = name;
+ this.args = args;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Call.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Call.prototype.clone = function(parent){
+ var clone = new Call(this.name);
+ clone.args = this.args.clone(parent, clone);
+ if (this.block) clone.block = this.block.clone(parent, clone);
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return <name>(param1, param2, ...).
+ *
+ * @return {String}
+ * @api public
+ */
+
+Call.prototype.toString = function(){
+ var args = this.args.nodes.map(function(node) {
+ var str = node.toString();
+ return str.slice(1, str.length - 1);
+ }).join(', ');
+
+ return this.name + '(' + args + ')';
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Call.prototype.toJSON = function(){
+ var json = {
+ __type: 'Call',
+ name: this.name,
+ args: this.args,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+ if (this.block) json.block = this.block;
+ return json;
+};
diff --git a/node_modules/stylus/lib/nodes/charset.js b/node_modules/stylus/lib/nodes/charset.js
new file mode 100644
index 00000000..e6d52077
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/charset.js
@@ -0,0 +1,58 @@
+
+/*!
+ * Stylus - Charset
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Charset` with the given `val`
+ *
+ * @param {String} val
+ * @api public
+ */
+
+var Charset = module.exports = function Charset(val){
+ Node.call(this);
+ this.val = val;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Charset.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return @charset "val".
+ *
+ * @return {String}
+ * @api public
+ */
+
+Charset.prototype.toString = function(){
+ return '@charset ' + this.val;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Charset.prototype.toJSON = function(){
+ return {
+ __type: 'Charset',
+ val: this.val,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/comment.js b/node_modules/stylus/lib/nodes/comment.js
new file mode 100644
index 00000000..56b59b3b
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/comment.js
@@ -0,0 +1,64 @@
+
+/*!
+ * Stylus - Comment
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Comment` with the given `str`.
+ *
+ * @param {String} str
+ * @param {Boolean} suppress
+ * @param {Boolean} inline
+ * @api public
+ */
+
+var Comment = module.exports = function Comment(str, suppress, inline){
+ Node.call(this);
+ this.str = str;
+ this.suppress = suppress;
+ this.inline = inline;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Comment.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Comment.prototype.toJSON = function(){
+ return {
+ __type: 'Comment',
+ str: this.str,
+ suppress: this.suppress,
+ inline: this.inline,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
+
+/**
+ * Return comment.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Comment.prototype.toString = function(){
+ return this.str;
+};
diff --git a/node_modules/stylus/lib/nodes/each.js b/node_modules/stylus/lib/nodes/each.js
new file mode 100644
index 00000000..985bd29d
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/each.js
@@ -0,0 +1,75 @@
+
+/*!
+ * Stylus - Each
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node')
+ , nodes = require('./');
+
+/**
+ * Initialize a new `Each` node with the given `val` name,
+ * `key` name, `expr`, and `block`.
+ *
+ * @param {String} val
+ * @param {String} key
+ * @param {Expression} expr
+ * @param {Block} block
+ * @api public
+ */
+
+var Each = module.exports = function Each(val, key, expr, block){
+ Node.call(this);
+ this.val = val;
+ this.key = key;
+ this.expr = expr;
+ this.block = block;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Each.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Each.prototype.clone = function(parent){
+ var clone = new Each(this.val, this.key);
+ clone.expr = this.expr.clone(parent, clone);
+ clone.block = this.block.clone(parent, clone);
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Each.prototype.toJSON = function(){
+ return {
+ __type: 'Each',
+ val: this.val,
+ key: this.key,
+ expr: this.expr,
+ block: this.block,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/expression.js b/node_modules/stylus/lib/nodes/expression.js
new file mode 100644
index 00000000..92293f32
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/expression.js
@@ -0,0 +1,220 @@
+
+/*!
+ * Stylus - Expression
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node')
+ , nodes = require('../nodes')
+ , utils = require('../utils');
+
+/**
+ * Initialize a new `Expression`.
+ *
+ * @param {Boolean} isList
+ * @api public
+ */
+
+var Expression = module.exports = function Expression(isList){
+ Node.call(this);
+ this.nodes = [];
+ this.isList = isList;
+};
+
+/**
+ * Check if the variable has a value.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Expression.prototype.__defineGetter__('isEmpty', function(){
+ return !this.nodes.length;
+});
+
+/**
+ * Return the first node in this expression.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Expression.prototype.__defineGetter__('first', function(){
+ return this.nodes[0]
+ ? this.nodes[0].first
+ : nodes.null;
+});
+
+/**
+ * Hash all the nodes in order.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Expression.prototype.__defineGetter__('hash', function(){
+ return this.nodes.map(function(node){
+ return node.hash;
+ }).join('::');
+});
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Expression.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Expression.prototype.clone = function(parent){
+ var clone = new this.constructor(this.isList);
+ clone.preserve = this.preserve;
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ clone.nodes = this.nodes.map(function(node) {
+ return node.clone(parent, clone);
+ });
+ return clone;
+};
+
+/**
+ * Push the given `node`.
+ *
+ * @param {Node} node
+ * @api public
+ */
+
+Expression.prototype.push = function(node){
+ this.nodes.push(node);
+};
+
+/**
+ * Operate on `right` with the given `op`.
+ *
+ * @param {String} op
+ * @param {Node} right
+ * @return {Node}
+ * @api public
+ */
+
+Expression.prototype.operate = function(op, right, val){
+ switch (op) {
+ case '[]=':
+ var self = this
+ , range = utils.unwrap(right).nodes
+ , val = utils.unwrap(val)
+ , len
+ , node;
+ range.forEach(function(unit){
+ len = self.nodes.length;
+ if ('unit' == unit.nodeName) {
+ var i = unit.val < 0 ? len + unit.val : unit.val
+ , n = i;
+ while (i-- > len) self.nodes[i] = nodes.null;
+ self.nodes[n] = val;
+ } else if (unit.string) {
+ node = self.nodes[0];
+ if (node && 'object' == node.nodeName) node.set(unit.string, val.clone());
+ }
+ });
+ return val;
+ case '[]':
+ var expr = new nodes.Expression
+ , vals = utils.unwrap(this).nodes
+ , range = utils.unwrap(right).nodes
+ , node;
+ range.forEach(function(unit){
+ if ('unit' == unit.nodeName) {
+ node = vals[unit.val < 0 ? vals.length + unit.val : unit.val];
+ } else if ('object' == vals[0].nodeName) {
+ node = vals[0].get(unit.string);
+ }
+ if (node) expr.push(node);
+ });
+ return expr.isEmpty
+ ? nodes.null
+ : utils.unwrap(expr);
+ case '||':
+ return this.toBoolean().isTrue
+ ? this
+ : right;
+ case 'in':
+ return Node.prototype.operate.call(this, op, right);
+ case '!=':
+ return this.operate('==', right, val).negate();
+ case '==':
+ var len = this.nodes.length
+ , right = right.toExpression()
+ , a
+ , b;
+ if (len != right.nodes.length) return nodes.false;
+ for (var i = 0; i < len; ++i) {
+ a = this.nodes[i];
+ b = right.nodes[i];
+ if (a.operate(op, b).isTrue) continue;
+ return nodes.false;
+ }
+ return nodes.true;
+ break;
+ default:
+ return this.first.operate(op, right, val);
+ }
+};
+
+/**
+ * Expressions with length > 1 are truthy,
+ * otherwise the first value's toBoolean()
+ * method is invoked.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Expression.prototype.toBoolean = function(){
+ if (this.nodes.length > 1) return nodes.true;
+ return this.first.toBoolean();
+};
+
+/**
+ * Return "<a> <b> <c>" or "<a>, <b>, <c>" if
+ * the expression represents a list.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Expression.prototype.toString = function(){
+ return '(' + this.nodes.map(function(node){
+ return node.toString();
+ }).join(this.isList ? ', ' : ' ') + ')';
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Expression.prototype.toJSON = function(){
+ return {
+ __type: 'Expression',
+ isList: this.isList,
+ preserve: this.preserve,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename,
+ nodes: this.nodes
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/extend.js b/node_modules/stylus/lib/nodes/extend.js
new file mode 100644
index 00000000..05458b61
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/extend.js
@@ -0,0 +1,69 @@
+
+/*!
+ * Stylus - Extend
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Extend` with the given `selectors` array.
+ *
+ * @param {Array} selectors array of the selectors
+ * @api public
+ */
+
+var Extend = module.exports = function Extend(selectors){
+ Node.call(this);
+ this.selectors = selectors;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Extend.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Extend.prototype.clone = function(){
+ return new Extend(this.selectors);
+};
+
+/**
+ * Return `@extend selectors`.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Extend.prototype.toString = function(){
+ return '@extend ' + this.selectors.join(', ');
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Extend.prototype.toJSON = function(){
+ return {
+ __type: 'Extend',
+ selectors: this.selectors,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/feature.js b/node_modules/stylus/lib/nodes/feature.js
new file mode 100644
index 00000000..f4e18328
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/feature.js
@@ -0,0 +1,84 @@
+
+/*!
+ * Stylus - Feature
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Feature` with the given `segs`.
+ *
+ * @param {Array} segs
+ * @api public
+ */
+
+var Feature = module.exports = function Feature(segs){
+ Node.call(this);
+ this.segments = segs;
+ this.expr = null;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Feature.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Feature.prototype.clone = function(parent){
+ var clone = new Feature;
+ clone.segments = this.segments.map(function(node){ return node.clone(parent, clone); });
+ if (this.expr) clone.expr = this.expr.clone(parent, clone);
+ if (this.name) clone.name = this.name;
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return "<ident>" or "(<ident>: <expr>)"
+ *
+ * @return {String}
+ * @api public
+ */
+
+Feature.prototype.toString = function(){
+ if (this.expr) {
+ return '(' + this.segments.join('') + ': ' + this.expr.toString() + ')';
+ } else {
+ return this.segments.join('');
+ }
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Feature.prototype.toJSON = function(){
+ var json = {
+ __type: 'Feature',
+ segments: this.segments,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+ if (this.expr) json.expr = this.expr;
+ if (this.name) json.name = this.name;
+ return json;
+};
diff --git a/node_modules/stylus/lib/nodes/function.js b/node_modules/stylus/lib/nodes/function.js
new file mode 100644
index 00000000..25a6586b
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/function.js
@@ -0,0 +1,128 @@
+
+/*!
+ * Stylus - Function
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Function` with `name`, `params`, and `body`.
+ *
+ * @param {String} name
+ * @param {Params|Function} params
+ * @param {Block} body
+ * @api public
+ */
+
+var Function = module.exports = function Function(name, params, body){
+ Node.call(this);
+ this.name = name;
+ this.params = params;
+ this.block = body;
+ if ('function' == typeof params) this.fn = params;
+};
+
+/**
+ * Check function arity.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Function.prototype.__defineGetter__('arity', function(){
+ return this.params.length;
+});
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Function.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return hash.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Function.prototype.__defineGetter__('hash', function(){
+ return 'function ' + this.name;
+});
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Function.prototype.clone = function(parent){
+ if (this.fn) {
+ var clone = new Function(
+ this.name
+ , this.fn);
+ } else {
+ var clone = new Function(this.name);
+ clone.params = this.params.clone(parent, clone);
+ clone.block = this.block.clone(parent, clone);
+ }
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return <name>(param1, param2, ...).
+ *
+ * @return {String}
+ * @api public
+ */
+
+Function.prototype.toString = function(){
+ if (this.fn) {
+ return this.name
+ + '('
+ + this.fn.toString()
+ .match(/^function *\w*\((.*?)\)/)
+ .slice(1)
+ .join(', ')
+ + ')';
+ } else {
+ return this.name
+ + '('
+ + this.params.nodes.join(', ')
+ + ')';
+ }
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Function.prototype.toJSON = function(){
+ var json = {
+ __type: 'Function',
+ name: this.name,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+ if (this.fn) {
+ json.fn = this.fn;
+ } else {
+ json.params = this.params;
+ json.block = this.block;
+ }
+ return json;
+};
diff --git a/node_modules/stylus/lib/nodes/group.js b/node_modules/stylus/lib/nodes/group.js
new file mode 100644
index 00000000..8c1a4ea3
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/group.js
@@ -0,0 +1,110 @@
+
+/*!
+ * Stylus - Group
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Group`.
+ *
+ * @api public
+ */
+
+var Group = module.exports = function Group(){
+ Node.call(this);
+ this.nodes = [];
+ this.extends = [];
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Group.prototype.__proto__ = Node.prototype;
+
+/**
+ * Push the given `selector` node.
+ *
+ * @param {Selector} selector
+ * @api public
+ */
+
+Group.prototype.push = function(selector){
+ this.nodes.push(selector);
+};
+
+/**
+ * Return this set's `Block`.
+ */
+
+Group.prototype.__defineGetter__('block', function(){
+ return this.nodes[0].block;
+});
+
+/**
+ * Assign `block` to each selector in this set.
+ *
+ * @param {Block} block
+ * @api public
+ */
+
+Group.prototype.__defineSetter__('block', function(block){
+ for (var i = 0, len = this.nodes.length; i < len; ++i) {
+ this.nodes[i].block = block;
+ }
+});
+
+/**
+ * Check if this set has only placeholders.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Group.prototype.__defineGetter__('hasOnlyPlaceholders', function(){
+ return this.nodes.every(function(selector) { return selector.isPlaceholder; });
+});
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Group.prototype.clone = function(parent){
+ var clone = new Group;
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ this.nodes.forEach(function(node){
+ clone.push(node.clone(parent, clone));
+ });
+ clone.filename = this.filename;
+ clone.block = this.block.clone(parent, clone);
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Group.prototype.toJSON = function(){
+ return {
+ __type: 'Group',
+ nodes: this.nodes,
+ block: this.block,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/hsla.js b/node_modules/stylus/lib/nodes/hsla.js
new file mode 100644
index 00000000..bea1e124
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/hsla.js
@@ -0,0 +1,277 @@
+
+/*!
+ * Stylus - HSLA
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node')
+ , nodes = require('./');
+
+/**
+ * Initialize a new `HSLA` with the given h,s,l,a component values.
+ *
+ * @param {Number} h
+ * @param {Number} s
+ * @param {Number} l
+ * @param {Number} a
+ * @api public
+ */
+
+var HSLA = exports = module.exports = function HSLA(h,s,l,a){
+ Node.call(this);
+ this.h = clampDegrees(h);
+ this.s = clampPercentage(s);
+ this.l = clampPercentage(l);
+ this.a = clampAlpha(a);
+ this.hsla = this;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+HSLA.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return hsla(n,n,n,n).
+ *
+ * @return {String}
+ * @api public
+ */
+
+HSLA.prototype.toString = function(){
+ return 'hsla('
+ + this.h + ','
+ + this.s.toFixed(0) + '%,'
+ + this.l.toFixed(0) + '%,'
+ + this.a + ')';
+};
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+HSLA.prototype.clone = function(parent){
+ var clone = new HSLA(
+ this.h
+ , this.s
+ , this.l
+ , this.a);
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+HSLA.prototype.toJSON = function(){
+ return {
+ __type: 'HSLA',
+ h: this.h,
+ s: this.s,
+ l: this.l,
+ a: this.a,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
+
+/**
+ * Return rgba `RGBA` representation.
+ *
+ * @return {RGBA}
+ * @api public
+ */
+
+HSLA.prototype.__defineGetter__('rgba', function(){
+ return nodes.RGBA.fromHSLA(this);
+});
+
+/**
+ * Return hash.
+ *
+ * @return {String}
+ * @api public
+ */
+
+HSLA.prototype.__defineGetter__('hash', function(){
+ return this.rgba.toString();
+});
+
+/**
+ * Add h,s,l to the current component values.
+ *
+ * @param {Number} h
+ * @param {Number} s
+ * @param {Number} l
+ * @return {HSLA} new node
+ * @api public
+ */
+
+HSLA.prototype.add = function(h,s,l){
+ return new HSLA(
+ this.h + h
+ , this.s + s
+ , this.l + l
+ , this.a);
+};
+
+/**
+ * Subtract h,s,l from the current component values.
+ *
+ * @param {Number} h
+ * @param {Number} s
+ * @param {Number} l
+ * @return {HSLA} new node
+ * @api public
+ */
+
+HSLA.prototype.sub = function(h,s,l){
+ return this.add(-h, -s, -l);
+};
+
+/**
+ * Operate on `right` with the given `op`.
+ *
+ * @param {String} op
+ * @param {Node} right
+ * @return {Node}
+ * @api public
+ */
+
+HSLA.prototype.operate = function(op, right){
+ switch (op) {
+ case '==':
+ case '!=':
+ case '<=':
+ case '>=':
+ case '<':
+ case '>':
+ case 'is a':
+ case '||':
+ case '&&':
+ return this.rgba.operate(op, right);
+ default:
+ return this.rgba.operate(op, right).hsla;
+ }
+};
+
+/**
+ * Return `HSLA` representation of the given `color`.
+ *
+ * @param {RGBA} color
+ * @return {HSLA}
+ * @api public
+ */
+
+exports.fromRGBA = function(rgba){
+ var r = rgba.r / 255
+ , g = rgba.g / 255
+ , b = rgba.b / 255
+ , a = rgba.a;
+
+ var min = Math.min(r,g,b)
+ , max = Math.max(r,g,b)
+ , l = (max + min) / 2
+ , d = max - min
+ , h, s;
+
+ switch (max) {
+ case min: h = 0; break;
+ case r: h = 60 * (g-b) / d; break;
+ case g: h = 60 * (b-r) / d + 120; break;
+ case b: h = 60 * (r-g) / d + 240; break;
+ }
+
+ if (max == min) {
+ s = 0;
+ } else if (l < .5) {
+ s = d / (2 * l);
+ } else {
+ s = d / (2 - 2 * l);
+ }
+
+ h %= 360;
+ s *= 100;
+ l *= 100;
+
+ return new HSLA(h,s,l,a);
+};
+
+/**
+ * Adjust lightness by `percent`.
+ *
+ * @param {Number} percent
+ * @return {HSLA} for chaining
+ * @api public
+ */
+
+HSLA.prototype.adjustLightness = function(percent){
+ this.l = clampPercentage(this.l + this.l * (percent / 100));
+ return this;
+};
+
+/**
+ * Adjust hue by `deg`.
+ *
+ * @param {Number} deg
+ * @return {HSLA} for chaining
+ * @api public
+ */
+
+HSLA.prototype.adjustHue = function(deg){
+ this.h = clampDegrees(this.h + deg);
+ return this;
+};
+
+/**
+ * Clamp degree `n` >= 0 and <= 360.
+ *
+ * @param {Number} n
+ * @return {Number}
+ * @api private
+ */
+
+function clampDegrees(n) {
+ n = n % 360;
+ return n >= 0 ? n : 360 + n;
+}
+
+/**
+ * Clamp percentage `n` >= 0 and <= 100.
+ *
+ * @param {Number} n
+ * @return {Number}
+ * @api private
+ */
+
+function clampPercentage(n) {
+ return Math.max(0, Math.min(n, 100));
+}
+
+/**
+ * Clamp alpha `n` >= 0 and <= 1.
+ *
+ * @param {Number} n
+ * @return {Number}
+ * @api private
+ */
+
+function clampAlpha(n) {
+ return Math.max(0, Math.min(n, 1));
+}
diff --git a/node_modules/stylus/lib/nodes/ident.js b/node_modules/stylus/lib/nodes/ident.js
new file mode 100644
index 00000000..181f738a
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/ident.js
@@ -0,0 +1,156 @@
+
+/*!
+ * Stylus - Ident
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node')
+ , nodes = require('./');
+
+/**
+ * Initialize a new `Ident` by `name` with the given `val` node.
+ *
+ * @param {String} name
+ * @param {Node} val
+ * @api public
+ */
+
+var Ident = module.exports = function Ident(name, val, mixin){
+ Node.call(this);
+ this.name = name;
+ this.string = name;
+ this.val = val || nodes.null;
+ this.mixin = !!mixin;
+};
+
+/**
+ * Check if the variable has a value.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Ident.prototype.__defineGetter__('isEmpty', function(){
+ return undefined == this.val;
+});
+
+/**
+ * Return hash.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Ident.prototype.__defineGetter__('hash', function(){
+ return this.name;
+});
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Ident.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Ident.prototype.clone = function(parent){
+ var clone = new Ident(this.name);
+ clone.val = this.val.clone(parent, clone);
+ clone.mixin = this.mixin;
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ clone.property = this.property;
+ clone.rest = this.rest;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Ident.prototype.toJSON = function(){
+ return {
+ __type: 'Ident',
+ name: this.name,
+ val: this.val,
+ mixin: this.mixin,
+ property: this.property,
+ rest: this.rest,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
+
+/**
+ * Return <name>.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Ident.prototype.toString = function(){
+ return this.name;
+};
+
+/**
+ * Coerce `other` to an ident.
+ *
+ * @param {Node} other
+ * @return {String}
+ * @api public
+ */
+
+Ident.prototype.coerce = function(other){
+ switch (other.nodeName) {
+ case 'ident':
+ case 'string':
+ case 'literal':
+ return new Ident(other.string);
+ case 'unit':
+ return new Ident(other.toString());
+ default:
+ return Node.prototype.coerce.call(this, other);
+ }
+};
+
+/**
+ * Operate on `right` with the given `op`.
+ *
+ * @param {String} op
+ * @param {Node} right
+ * @return {Node}
+ * @api public
+ */
+
+Ident.prototype.operate = function(op, right){
+ var val = right.first;
+ switch (op) {
+ case '-':
+ if ('unit' == val.nodeName) {
+ var expr = new nodes.Expression;
+ val = val.clone();
+ val.val = -val.val;
+ expr.push(this);
+ expr.push(val);
+ return expr;
+ }
+ case '+':
+ return new nodes.Ident(this.string + this.coerce(val).string);
+ }
+ return Node.prototype.operate.call(this, op, right);
+};
diff --git a/node_modules/stylus/lib/nodes/if.js b/node_modules/stylus/lib/nodes/if.js
new file mode 100644
index 00000000..e7d354d2
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/if.js
@@ -0,0 +1,78 @@
+
+/*!
+ * Stylus - If
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `If` with the given `cond`.
+ *
+ * @param {Expression} cond
+ * @param {Boolean|Block} negate, block
+ * @api public
+ */
+
+var If = module.exports = function If(cond, negate){
+ Node.call(this);
+ this.cond = cond;
+ this.elses = [];
+ if (negate && negate.nodeName) {
+ this.block = negate;
+ } else {
+ this.negate = negate;
+ }
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+If.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+If.prototype.clone = function(parent){
+ var clone = new If();
+ clone.cond = this.cond.clone(parent, clone);
+ clone.block = this.block.clone(parent, clone);
+ clone.elses = this.elses.map(function(node){ return node.clone(parent, clone); });
+ clone.negate = this.negate;
+ clone.postfix = this.postfix;
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+If.prototype.toJSON = function(){
+ return {
+ __type: 'If',
+ cond: this.cond,
+ block: this.block,
+ elses: this.elses,
+ negate: this.negate,
+ postfix: this.postfix,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/import.js b/node_modules/stylus/lib/nodes/import.js
new file mode 100644
index 00000000..7a3548a4
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/import.js
@@ -0,0 +1,68 @@
+
+/*!
+ * Stylus - Import
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Import` with the given `expr`.
+ *
+ * @param {Expression} expr
+ * @api public
+ */
+
+var Import = module.exports = function Import(expr, once){
+ Node.call(this);
+ this.path = expr;
+ this.once = once || false;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Import.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Import.prototype.clone = function(parent){
+ var clone = new Import();
+ clone.path = this.path.nodeName ? this.path.clone(parent, clone) : this.path;
+ clone.once = this.once;
+ clone.mtime = this.mtime;
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Import.prototype.toJSON = function(){
+ return {
+ __type: 'Import',
+ path: this.path,
+ once: this.once,
+ mtime: this.mtime,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/index.js b/node_modules/stylus/lib/nodes/index.js
new file mode 100644
index 00000000..d9b79b99
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/index.js
@@ -0,0 +1,59 @@
+
+/*!
+ * Stylus - nodes
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Constructors
+ */
+
+exports.Node = require('./node');
+exports.Root = require('./root');
+exports.Null = require('./null');
+exports.Each = require('./each');
+exports.If = require('./if');
+exports.Call = require('./call');
+exports.UnaryOp = require('./unaryop');
+exports.BinOp = require('./binop');
+exports.Ternary = require('./ternary');
+exports.Block = require('./block');
+exports.Unit = require('./unit');
+exports.String = require('./string');
+exports.HSLA = require('./hsla');
+exports.RGBA = require('./rgba');
+exports.Ident = require('./ident');
+exports.Group = require('./group');
+exports.Literal = require('./literal');
+exports.Boolean = require('./boolean');
+exports.Return = require('./return');
+exports.Media = require('./media');
+exports.QueryList = require('./query-list');
+exports.Query = require('./query');
+exports.Feature = require('./feature');
+exports.Params = require('./params');
+exports.Comment = require('./comment');
+exports.Keyframes = require('./keyframes');
+exports.Member = require('./member');
+exports.Charset = require('./charset');
+exports.Namespace = require('./namespace');
+exports.Import = require('./import');
+exports.Extend = require('./extend');
+exports.Object = require('./object');
+exports.Function = require('./function');
+exports.Property = require('./property');
+exports.Selector = require('./selector');
+exports.Expression = require('./expression');
+exports.Arguments = require('./arguments');
+exports.Atblock = require('./atblock');
+exports.Atrule = require('./atrule');
+exports.Supports = require('./supports');
+
+/**
+ * Singletons.
+ */
+
+exports.true = new exports.Boolean(true);
+exports.false = new exports.Boolean(false);
+exports.null = new exports.Null;
diff --git a/node_modules/stylus/lib/nodes/keyframes.js b/node_modules/stylus/lib/nodes/keyframes.js
new file mode 100644
index 00000000..e4e1271a
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/keyframes.js
@@ -0,0 +1,81 @@
+
+/*!
+ * Stylus - Keyframes
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Atrule = require('./atrule');
+
+/**
+ * Initialize a new `Keyframes` with the given `segs`,
+ * and optional vendor `prefix`.
+ *
+ * @param {Array} segs
+ * @param {String} prefix
+ * @api public
+ */
+
+var Keyframes = module.exports = function Keyframes(segs, prefix){
+ Atrule.call(this, 'keyframes');
+ this.segments = segs;
+ this.prefix = prefix || 'official';
+};
+
+/**
+ * Inherit from `Atrule.prototype`.
+ */
+
+Keyframes.prototype.__proto__ = Atrule.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Keyframes.prototype.clone = function(parent){
+ var clone = new Keyframes;
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ clone.segments = this.segments.map(function(node) { return node.clone(parent, clone); });
+ clone.prefix = this.prefix;
+ clone.block = this.block.clone(parent, clone);
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Keyframes.prototype.toJSON = function(){
+ return {
+ __type: 'Keyframes',
+ segments: this.segments,
+ prefix: this.prefix,
+ block: this.block,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
+
+/**
+ * Return `@keyframes name`.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Keyframes.prototype.toString = function(){
+ return '@keyframes ' + this.segments.join('');
+};
diff --git a/node_modules/stylus/lib/nodes/literal.js b/node_modules/stylus/lib/nodes/literal.js
new file mode 100644
index 00000000..c95d9638
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/literal.js
@@ -0,0 +1,112 @@
+
+/*!
+ * Stylus - Literal
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node')
+ , nodes = require('./');
+
+/**
+ * Initialize a new `Literal` with the given `str`.
+ *
+ * @param {String} str
+ * @api public
+ */
+
+var Literal = module.exports = function Literal(str){
+ Node.call(this);
+ this.val = str;
+ this.string = str;
+ this.prefixed = false;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Literal.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return hash.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Literal.prototype.__defineGetter__('hash', function(){
+ return this.val;
+});
+
+/**
+ * Return literal value.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Literal.prototype.toString = function(){
+ return this.val;
+};
+
+/**
+ * Coerce `other` to a literal.
+ *
+ * @param {Node} other
+ * @return {String}
+ * @api public
+ */
+
+Literal.prototype.coerce = function(other){
+ switch (other.nodeName) {
+ case 'ident':
+ case 'string':
+ case 'literal':
+ return new Literal(other.string);
+ default:
+ return Node.prototype.coerce.call(this, other);
+ }
+};
+
+/**
+ * Operate on `right` with the given `op`.
+ *
+ * @param {String} op
+ * @param {Node} right
+ * @return {Node}
+ * @api public
+ */
+
+Literal.prototype.operate = function(op, right){
+ var val = right.first;
+ switch (op) {
+ case '+':
+ return new nodes.Literal(this.string + this.coerce(val).string);
+ default:
+ return Node.prototype.operate.call(this, op, right);
+ }
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Literal.prototype.toJSON = function(){
+ return {
+ __type: 'Literal',
+ val: this.val,
+ string: this.string,
+ prefixed: this.prefixed,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/media.js b/node_modules/stylus/lib/nodes/media.js
new file mode 100644
index 00000000..65fdf7ba
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/media.js
@@ -0,0 +1,76 @@
+
+/*!
+ * Stylus - Media
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Atrule = require('./atrule');
+
+/**
+ * Initialize a new `Media` with the given `val`
+ *
+ * @param {String} val
+ * @api public
+ */
+
+var Media = module.exports = function Media(val){
+ Atrule.call(this, 'media');
+ this.val = val;
+};
+
+/**
+ * Inherit from `Atrule.prototype`.
+ */
+
+Media.prototype.__proto__ = Atrule.prototype;
+
+/**
+ * Clone this node.
+ *
+ * @return {Media}
+ * @api public
+ */
+
+Media.prototype.clone = function(parent){
+ var clone = new Media;
+ clone.val = this.val.clone(parent, clone);
+ clone.block = this.block.clone(parent, clone);
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Media.prototype.toJSON = function(){
+ return {
+ __type: 'Media',
+ val: this.val,
+ block: this.block,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
+
+/**
+ * Return @media "val".
+ *
+ * @return {String}
+ * @api public
+ */
+
+Media.prototype.toString = function(){
+ return '@media ' + this.val;
+};
diff --git a/node_modules/stylus/lib/nodes/member.js b/node_modules/stylus/lib/nodes/member.js
new file mode 100644
index 00000000..af947388
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/member.js
@@ -0,0 +1,82 @@
+
+/*!
+ * Stylus - Member
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Member` with `left` and `right`.
+ *
+ * @param {Node} left
+ * @param {Node} right
+ * @api public
+ */
+
+var Member = module.exports = function Member(left, right){
+ Node.call(this);
+ this.left = left;
+ this.right = right;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Member.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Member.prototype.clone = function(parent){
+ var clone = new Member;
+ clone.left = this.left.clone(parent, clone);
+ clone.right = this.right.clone(parent, clone);
+ if (this.val) clone.val = this.val.clone(parent, clone);
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Member.prototype.toJSON = function(){
+ var json = {
+ __type: 'Member',
+ left: this.left,
+ right: this.right,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+ if (this.val) json.val = this.val;
+ return json;
+};
+
+/**
+ * Return a string representation of this node.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Member.prototype.toString = function(){
+ return this.left.toString()
+ + '.' + this.right.toString();
+};
diff --git a/node_modules/stylus/lib/nodes/namespace.js b/node_modules/stylus/lib/nodes/namespace.js
new file mode 100644
index 00000000..878b474e
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/namespace.js
@@ -0,0 +1,60 @@
+/*!
+ * Stylus - Namespace
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Namespace` with the given `val` and `prefix`
+ *
+ * @param {String|Call} val
+ * @param {String} [prefix]
+ * @api public
+ */
+
+var Namespace = module.exports = function Namespace(val, prefix){
+ Node.call(this);
+ this.val = val;
+ this.prefix = prefix;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Namespace.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return @namespace "val".
+ *
+ * @return {String}
+ * @api public
+ */
+
+Namespace.prototype.toString = function(){
+ return '@namespace ' + (this.prefix ? this.prefix + ' ' : '') + this.val;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Namespace.prototype.toJSON = function(){
+ return {
+ __type: 'Namespace',
+ val: this.val,
+ prefix: this.prefix,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/node.js b/node_modules/stylus/lib/nodes/node.js
new file mode 100644
index 00000000..a392c970
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/node.js
@@ -0,0 +1,250 @@
+
+/*!
+ * Stylus - Node
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Evaluator = require('../visitor/evaluator')
+ , utils = require('../utils')
+ , nodes = require('./');
+
+/**
+ * Initialize a new `CoercionError` with the given `msg`.
+ *
+ * @param {String} msg
+ * @api private
+ */
+
+function CoercionError(msg) {
+ this.name = 'CoercionError'
+ this.message = msg
+ Error.captureStackTrace(this, CoercionError);
+}
+
+/**
+ * Inherit from `Error.prototype`.
+ */
+
+CoercionError.prototype.__proto__ = Error.prototype;
+
+/**
+ * Node constructor.
+ *
+ * @api public
+ */
+
+var Node = module.exports = function Node(){
+ this.lineno = nodes.lineno || 1;
+ this.column = nodes.column || 1;
+ this.filename = nodes.filename;
+};
+
+Node.prototype = {
+ constructor: Node,
+
+ /**
+ * Return this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+ get first() {
+ return this;
+ },
+
+ /**
+ * Return hash.
+ *
+ * @return {String}
+ * @api public
+ */
+
+ get hash() {
+ return this.val;
+ },
+
+ /**
+ * Return node name.
+ *
+ * @return {String}
+ * @api public
+ */
+
+ get nodeName() {
+ return this.constructor.name.toLowerCase();
+ },
+
+ /**
+ * Return this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+ clone: function(){
+ return this;
+ },
+
+ /**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+ toJSON: function(){
+ return {
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+ },
+
+ /**
+ * Nodes by default evaluate to themselves.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+ eval: function(){
+ return new Evaluator(this).evaluate();
+ },
+
+ /**
+ * Return true.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+ toBoolean: function(){
+ return nodes.true;
+ },
+
+ /**
+ * Return the expression, or wrap this node in an expression.
+ *
+ * @return {Expression}
+ * @api public
+ */
+
+ toExpression: function(){
+ if ('expression' == this.nodeName) return this;
+ var expr = new nodes.Expression;
+ expr.push(this);
+ return expr;
+ },
+
+ /**
+ * Return false if `op` is generally not coerced.
+ *
+ * @param {String} op
+ * @return {Boolean}
+ * @api private
+ */
+
+ shouldCoerce: function(op){
+ switch (op) {
+ case 'is a':
+ case 'in':
+ case '||':
+ case '&&':
+ return false;
+ default:
+ return true;
+ }
+ },
+
+ /**
+ * Operate on `right` with the given `op`.
+ *
+ * @param {String} op
+ * @param {Node} right
+ * @return {Node}
+ * @api public
+ */
+
+ operate: function(op, right){
+ switch (op) {
+ case 'is a':
+ if ('string' == right.first.nodeName) {
+ return nodes.Boolean(this.nodeName == right.val);
+ } else {
+ throw new Error('"is a" expects a string, got ' + right.toString());
+ }
+ case '==':
+ return nodes.Boolean(this.hash == right.hash);
+ case '!=':
+ return nodes.Boolean(this.hash != right.hash);
+ case '>=':
+ return nodes.Boolean(this.hash >= right.hash);
+ case '<=':
+ return nodes.Boolean(this.hash <= right.hash);
+ case '>':
+ return nodes.Boolean(this.hash > right.hash);
+ case '<':
+ return nodes.Boolean(this.hash < right.hash);
+ case '||':
+ return this.toBoolean().isTrue
+ ? this
+ : right;
+ case 'in':
+ var vals = utils.unwrap(right).nodes
+ , len = vals && vals.length
+ , hash = this.hash;
+ if (!vals) throw new Error('"in" given invalid right-hand operand, expecting an expression');
+
+ // 'prop' in obj
+ if (1 == len && 'object' == vals[0].nodeName) {
+ return nodes.Boolean(vals[0].has(this.hash));
+ }
+
+ for (var i = 0; i < len; ++i) {
+ if (hash == vals[i].hash) {
+ return nodes.true;
+ }
+ }
+ return nodes.false;
+ case '&&':
+ var a = this.toBoolean()
+ , b = right.toBoolean();
+ return a.isTrue && b.isTrue
+ ? right
+ : a.isFalse
+ ? this
+ : right;
+ default:
+ if ('[]' == op) {
+ var msg = 'cannot perform '
+ + this
+ + '[' + right + ']';
+ } else {
+ var msg = 'cannot perform'
+ + ' ' + this
+ + ' ' + op
+ + ' ' + right;
+ }
+ throw new Error(msg);
+ }
+ },
+
+ /**
+ * Default coercion throws.
+ *
+ * @param {Node} other
+ * @return {Node}
+ * @api public
+ */
+
+ coerce: function(other){
+ if (other.nodeName == this.nodeName) return other;
+ throw new CoercionError('cannot coerce ' + other + ' to ' + this.nodeName);
+ }
+};
diff --git a/node_modules/stylus/lib/nodes/null.js b/node_modules/stylus/lib/nodes/null.js
new file mode 100644
index 00000000..4efea99f
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/null.js
@@ -0,0 +1,88 @@
+
+/*!
+ * Stylus - Null
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node')
+ , nodes = require('./');
+
+/**
+ * Initialize a new `Null` node.
+ *
+ * @api public
+ */
+
+var Null = module.exports = function Null(){};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Null.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return 'Null'.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Null.prototype.inspect =
+Null.prototype.toString = function(){
+ return 'null';
+};
+
+/**
+ * Return false.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Null.prototype.toBoolean = function(){
+ return nodes.false;
+};
+
+/**
+ * Check if the node is a null node.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Null.prototype.__defineGetter__('isNull', function(){
+ return true;
+});
+
+/**
+ * Return hash.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Null.prototype.__defineGetter__('hash', function(){
+ return null;
+});
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Null.prototype.toJSON = function(){
+ return {
+ __type: 'Null',
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/object.js b/node_modules/stylus/lib/nodes/object.js
new file mode 100644
index 00000000..a52c749c
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/object.js
@@ -0,0 +1,213 @@
+
+/*!
+ * Stylus - Object
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node')
+ , nodes = require('./')
+ , nativeObj = {}.constructor;
+
+/**
+ * Initialize a new `Object`.
+ *
+ * @api public
+ */
+
+var Object = module.exports = function Object(){
+ Node.call(this);
+ this.vals = {};
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Object.prototype.__proto__ = Node.prototype;
+
+/**
+ * Set `key` to `val`.
+ *
+ * @param {String} key
+ * @param {Node} val
+ * @return {Object} for chaining
+ * @api public
+ */
+
+Object.prototype.set = function(key, val){
+ this.vals[key] = val;
+ return this;
+};
+
+/**
+ * Return length.
+ *
+ * @return {Number}
+ * @api public
+ */
+
+Object.prototype.__defineGetter__('length', function() {
+ return nativeObj.keys(this.vals).length;
+});
+
+/**
+ * Get `key`.
+ *
+ * @param {String} key
+ * @return {Node}
+ * @api public
+ */
+
+Object.prototype.get = function(key){
+ return this.vals[key] || nodes.null;
+};
+
+/**
+ * Has `key`?
+ *
+ * @param {String} key
+ * @return {Boolean}
+ * @api public
+ */
+
+Object.prototype.has = function(key){
+ return key in this.vals;
+};
+
+/**
+ * Operate on `right` with the given `op`.
+ *
+ * @param {String} op
+ * @param {Node} right
+ * @return {Node}
+ * @api public
+ */
+
+Object.prototype.operate = function(op, right){
+ switch (op) {
+ case '.':
+ case '[]':
+ return this.get(right.hash);
+ case '==':
+ var vals = this.vals
+ , a
+ , b;
+ if ('object' != right.nodeName || this.length != right.length)
+ return nodes.false;
+ for (var key in vals) {
+ a = vals[key];
+ b = right.vals[key];
+ if (a.operate(op, b).isFalse)
+ return nodes.false;
+ }
+ return nodes.true;
+ case '!=':
+ return this.operate('==', right).negate();
+ default:
+ return Node.prototype.operate.call(this, op, right);
+ }
+};
+
+/**
+ * Return Boolean based on the length of this object.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Object.prototype.toBoolean = function(){
+ return nodes.Boolean(this.length);
+};
+
+/**
+ * Convert object to string with properties.
+ *
+ * @return {String}
+ * @api private
+ */
+
+Object.prototype.toBlock = function(){
+ var str = '{'
+ , key
+ , val;
+ for (key in this.vals) {
+ val = this.get(key);
+ if ('object' == val.first.nodeName) {
+ str += key + ' ' + val.first.toBlock();
+ } else {
+ switch (key) {
+ case '@charset':
+ str += key + ' ' + val.first.toString() + ';';
+ break;
+ default:
+ str += key + ':' + toString(val) + ';';
+ }
+ }
+ }
+ str += '}';
+ return str;
+
+ function toString(node) {
+ if (node.nodes) {
+ return node.nodes.map(toString).join(node.isList ? ',' : ' ');
+ } else if ('literal' == node.nodeName && ',' == node.val) {
+ return '\\,';
+ }
+ return node.toString();
+ }
+};
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Object.prototype.clone = function(parent){
+ var clone = new Object;
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ for (var key in this.vals) {
+ clone.vals[key] = this.vals[key].clone(parent, clone);
+ }
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Object.prototype.toJSON = function(){
+ return {
+ __type: 'Object',
+ vals: this.vals,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
+
+/**
+ * Return "{ <prop>: <val> }"
+ *
+ * @return {String}
+ * @api public
+ */
+
+Object.prototype.toString = function(){
+ var obj = {};
+ for (var prop in this.vals) {
+ obj[prop] = this.vals[prop].toString();
+ }
+ return JSON.stringify(obj);
+};
diff --git a/node_modules/stylus/lib/nodes/params.js b/node_modules/stylus/lib/nodes/params.js
new file mode 100644
index 00000000..d7ac6d74
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/params.js
@@ -0,0 +1,90 @@
+
+/*!
+ * Stylus - Params
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Params` with `name`, `params`, and `body`.
+ *
+ * @param {String} name
+ * @param {Params} params
+ * @param {Expression} body
+ * @api public
+ */
+
+var Params = module.exports = function Params(){
+ Node.call(this);
+ this.nodes = [];
+};
+
+/**
+ * Check function arity.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Params.prototype.__defineGetter__('length', function(){
+ return this.nodes.length;
+});
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Params.prototype.__proto__ = Node.prototype;
+
+/**
+ * Push the given `node`.
+ *
+ * @param {Node} node
+ * @api public
+ */
+
+Params.prototype.push = function(node){
+ this.nodes.push(node);
+};
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Params.prototype.clone = function(parent){
+ var clone = new Params;
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ this.nodes.forEach(function(node){
+ clone.push(node.clone(parent, clone));
+ });
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Params.prototype.toJSON = function(){
+ return {
+ __type: 'Params',
+ nodes: this.nodes,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
+
diff --git a/node_modules/stylus/lib/nodes/property.js b/node_modules/stylus/lib/nodes/property.js
new file mode 100644
index 00000000..215785ac
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/property.js
@@ -0,0 +1,96 @@
+
+/*!
+ * Stylus - Property
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Property` with the given `segs` and optional `expr`.
+ *
+ * @param {Array} segs
+ * @param {Expression} expr
+ * @api public
+ */
+
+var Property = module.exports = function Property(segs, expr){
+ Node.call(this);
+ this.segments = segs;
+ this.expr = expr;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Property.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Property.prototype.clone = function(parent){
+ var clone = new Property(this.segments);
+ clone.name = this.name;
+ if (this.literal) clone.literal = this.literal;
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ clone.segments = this.segments.map(function(node){ return node.clone(parent, clone); });
+ if (this.expr) clone.expr = this.expr.clone(parent, clone);
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Property.prototype.toJSON = function(){
+ var json = {
+ __type: 'Property',
+ segments: this.segments,
+ name: this.name,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+ if (this.expr) json.expr = this.expr;
+ if (this.literal) json.literal = this.literal;
+ return json;
+};
+
+/**
+ * Return string representation of this node.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Property.prototype.toString = function(){
+ return 'property(' + this.segments.join('') + ', ' + this.expr + ')';
+};
+
+/**
+ * Operate on the property expression.
+ *
+ * @param {String} op
+ * @param {Node} right
+ * @return {Node}
+ * @api public
+ */
+
+Property.prototype.operate = function(op, right, val){
+ return this.expr.operate(op, right, val);
+};
diff --git a/node_modules/stylus/lib/nodes/query-list.js b/node_modules/stylus/lib/nodes/query-list.js
new file mode 100644
index 00000000..3819640b
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/query-list.js
@@ -0,0 +1,108 @@
+
+/*!
+ * Stylus - QueryList
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `QueryList`.
+ *
+ * @api public
+ */
+
+var QueryList = module.exports = function QueryList(){
+ Node.call(this);
+ this.nodes = [];
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+QueryList.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+QueryList.prototype.clone = function(parent){
+ var clone = new QueryList;
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ for (var i = 0; i < this.nodes.length; ++i) {
+ clone.push(this.nodes[i].clone(parent, clone));
+ }
+ return clone;
+};
+
+/**
+ * Push the given `node`.
+ *
+ * @param {Node} node
+ * @api public
+ */
+
+QueryList.prototype.push = function(node){
+ this.nodes.push(node);
+};
+
+/**
+ * Merges this query list with the `other`.
+ *
+ * @param {QueryList} other
+ * @return {QueryList}
+ * @api private
+ */
+
+QueryList.prototype.merge = function(other){
+ var list = new QueryList
+ , merged;
+ this.nodes.forEach(function(query){
+ for (var i = 0, len = other.nodes.length; i < len; ++i){
+ merged = query.merge(other.nodes[i]);
+ if (merged) list.push(merged);
+ }
+ });
+ return list;
+};
+
+/**
+ * Return "<a>, <b>, <c>"
+ *
+ * @return {String}
+ * @api public
+ */
+
+QueryList.prototype.toString = function(){
+ return '(' + this.nodes.map(function(node){
+ return node.toString();
+ }).join(', ') + ')';
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+QueryList.prototype.toJSON = function(){
+ return {
+ __type: 'QueryList',
+ nodes: this.nodes,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/query.js b/node_modules/stylus/lib/nodes/query.js
new file mode 100644
index 00000000..47a568b7
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/query.js
@@ -0,0 +1,170 @@
+
+/*!
+ * Stylus - Query
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Query`.
+ *
+ * @api public
+ */
+
+var Query = module.exports = function Query(){
+ Node.call(this);
+ this.nodes = [];
+ this.type = '';
+ this.predicate = '';
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Query.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Query.prototype.clone = function(parent){
+ var clone = new Query;
+ clone.predicate = this.predicate;
+ clone.type = this.type;
+ for (var i = 0, len = this.nodes.length; i < len; ++i) {
+ clone.push(this.nodes[i].clone(parent, clone));
+ }
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Push the given `feature`.
+ *
+ * @param {Feature} feature
+ * @api public
+ */
+
+Query.prototype.push = function(feature){
+ this.nodes.push(feature);
+};
+
+/**
+ * Return resolved type of this query.
+ *
+ * @return {String}
+ * @api private
+ */
+
+Query.prototype.__defineGetter__('resolvedType', function(){
+ if (this.type) {
+ return this.type.nodeName
+ ? this.type.string
+ : this.type;
+ }
+});
+
+/**
+ * Return resolved predicate of this query.
+ *
+ * @return {String}
+ * @api private
+ */
+
+Query.prototype.__defineGetter__('resolvedPredicate', function(){
+ if (this.predicate) {
+ return this.predicate.nodeName
+ ? this.predicate.string
+ : this.predicate;
+ }
+});
+
+/**
+ * Merges this query with the `other`.
+ *
+ * @param {Query} other
+ * @return {Query}
+ * @api private
+ */
+
+Query.prototype.merge = function(other){
+ var query = new Query
+ , p1 = this.resolvedPredicate
+ , p2 = other.resolvedPredicate
+ , t1 = this.resolvedType
+ , t2 = other.resolvedType
+ , type, pred;
+
+ // Stolen from Sass :D
+ t1 = t1 || t2;
+ t2 = t2 || t1;
+ if (('not' == p1) ^ ('not' == p2)) {
+ if (t1 == t2) return;
+ type = ('not' == p1) ? t2 : t1;
+ pred = ('not' == p1) ? p2 : p1;
+ } else if (('not' == p1) && ('not' == p2)) {
+ if (t1 != t2) return;
+ type = t1;
+ pred = 'not';
+ } else if (t1 != t2) {
+ return;
+ } else {
+ type = t1;
+ pred = p1 || p2;
+ }
+ query.predicate = pred;
+ query.type = type;
+ query.nodes = this.nodes.concat(other.nodes);
+ return query;
+};
+
+/**
+ * Return "<a> and <b> and <c>"
+ *
+ * @return {String}
+ * @api public
+ */
+
+Query.prototype.toString = function(){
+ var pred = this.predicate ? this.predicate + ' ' : ''
+ , type = this.type || ''
+ , len = this.nodes.length
+ , str = pred + type;
+ if (len) {
+ str += (type && ' and ') + this.nodes.map(function(expr){
+ return expr.toString();
+ }).join(' and ');
+ }
+ return str;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Query.prototype.toJSON = function(){
+ return {
+ __type: 'Query',
+ predicate: this.predicate,
+ type: this.type,
+ nodes: this.nodes,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/return.js b/node_modules/stylus/lib/nodes/return.js
new file mode 100644
index 00000000..003ef380
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/return.js
@@ -0,0 +1,63 @@
+
+/*!
+ * Stylus - Return
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node')
+ , nodes = require('./');
+
+/**
+ * Initialize a new `Return` node with the given `expr`.
+ *
+ * @param {Expression} expr
+ * @api public
+ */
+
+var Return = module.exports = function Return(expr){
+ this.expr = expr || nodes.null;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Return.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Return.prototype.clone = function(parent){
+ var clone = new Return();
+ clone.expr = this.expr.clone(parent, clone);
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Return.prototype.toJSON = function(){
+ return {
+ __type: 'Return',
+ expr: this.expr,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/rgba.js b/node_modules/stylus/lib/nodes/rgba.js
new file mode 100644
index 00000000..a961dc9c
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/rgba.js
@@ -0,0 +1,367 @@
+
+/*!
+ * Stylus - RGBA
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node')
+ , HSLA = require('./hsla')
+ , functions = require('../functions')
+ , adjust = functions.adjust
+ , nodes = require('./');
+
+/**
+ * Initialize a new `RGBA` with the given r,g,b,a component values.
+ *
+ * @param {Number} r
+ * @param {Number} g
+ * @param {Number} b
+ * @param {Number} a
+ * @api public
+ */
+
+var RGBA = exports = module.exports = function RGBA(r,g,b,a){
+ Node.call(this);
+ this.r = clamp(r);
+ this.g = clamp(g);
+ this.b = clamp(b);
+ this.a = clampAlpha(a);
+ this.name = '';
+ this.rgba = this;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+RGBA.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return an `RGBA` without clamping values.
+ *
+ * @param {Number} r
+ * @param {Number} g
+ * @param {Number} b
+ * @param {Number} a
+ * @return {RGBA}
+ * @api public
+ */
+
+RGBA.withoutClamping = function(r,g,b,a){
+ var rgba = new RGBA(0,0,0,0);
+ rgba.r = r;
+ rgba.g = g;
+ rgba.b = b;
+ rgba.a = a;
+ return rgba;
+};
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+RGBA.prototype.clone = function(){
+ var clone = new RGBA(
+ this.r
+ , this.g
+ , this.b
+ , this.a);
+ clone.raw = this.raw;
+ clone.name = this.name;
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+RGBA.prototype.toJSON = function(){
+ return {
+ __type: 'RGBA',
+ r: this.r,
+ g: this.g,
+ b: this.b,
+ a: this.a,
+ raw: this.raw,
+ name: this.name,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
+
+/**
+ * Return true.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+RGBA.prototype.toBoolean = function(){
+ return nodes.true;
+};
+
+/**
+ * Return `HSLA` representation.
+ *
+ * @return {HSLA}
+ * @api public
+ */
+
+RGBA.prototype.__defineGetter__('hsla', function(){
+ return HSLA.fromRGBA(this);
+});
+
+/**
+ * Return hash.
+ *
+ * @return {String}
+ * @api public
+ */
+
+RGBA.prototype.__defineGetter__('hash', function(){
+ return this.toString();
+});
+
+/**
+ * Add r,g,b,a to the current component values.
+ *
+ * @param {Number} r
+ * @param {Number} g
+ * @param {Number} b
+ * @param {Number} a
+ * @return {RGBA} new node
+ * @api public
+ */
+
+RGBA.prototype.add = function(r,g,b,a){
+ return new RGBA(
+ this.r + r
+ , this.g + g
+ , this.b + b
+ , this.a + a);
+};
+
+/**
+ * Subtract r,g,b,a from the current component values.
+ *
+ * @param {Number} r
+ * @param {Number} g
+ * @param {Number} b
+ * @param {Number} a
+ * @return {RGBA} new node
+ * @api public
+ */
+
+RGBA.prototype.sub = function(r,g,b,a){
+ return new RGBA(
+ this.r - r
+ , this.g - g
+ , this.b - b
+ , a == 1 ? this.a : this.a - a);
+};
+
+/**
+ * Multiply rgb components by `n`.
+ *
+ * @param {String} n
+ * @return {RGBA} new node
+ * @api public
+ */
+
+RGBA.prototype.multiply = function(n){
+ return new RGBA(
+ this.r * n
+ , this.g * n
+ , this.b * n
+ , this.a);
+};
+
+/**
+ * Divide rgb components by `n`.
+ *
+ * @param {String} n
+ * @return {RGBA} new node
+ * @api public
+ */
+
+RGBA.prototype.divide = function(n){
+ return new RGBA(
+ this.r / n
+ , this.g / n
+ , this.b / n
+ , this.a);
+};
+
+/**
+ * Operate on `right` with the given `op`.
+ *
+ * @param {String} op
+ * @param {Node} right
+ * @return {Node}
+ * @api public
+ */
+
+RGBA.prototype.operate = function(op, right){
+ if ('in' != op) right = right.first
+
+ switch (op) {
+ case 'is a':
+ if ('string' == right.nodeName && 'color' == right.string) {
+ return nodes.true;
+ }
+ break;
+ case '+':
+ switch (right.nodeName) {
+ case 'unit':
+ var n = right.val;
+ switch (right.type) {
+ case '%': return adjust(this, new nodes.String('lightness'), right);
+ case 'deg': return this.hsla.adjustHue(n).rgba;
+ default: return this.add(n,n,n,0);
+ }
+ case 'rgba':
+ return this.add(right.r, right.g, right.b, right.a);
+ case 'hsla':
+ return this.hsla.add(right.h, right.s, right.l);
+ }
+ break;
+ case '-':
+ switch (right.nodeName) {
+ case 'unit':
+ var n = right.val;
+ switch (right.type) {
+ case '%': return adjust(this, new nodes.String('lightness'), new nodes.Unit(-n, '%'));
+ case 'deg': return this.hsla.adjustHue(-n).rgba;
+ default: return this.sub(n,n,n,0);
+ }
+ case 'rgba':
+ return this.sub(right.r, right.g, right.b, right.a);
+ case 'hsla':
+ return this.hsla.sub(right.h, right.s, right.l);
+ }
+ break;
+ case '*':
+ switch (right.nodeName) {
+ case 'unit':
+ return this.multiply(right.val);
+ }
+ break;
+ case '/':
+ switch (right.nodeName) {
+ case 'unit':
+ return this.divide(right.val);
+ }
+ break;
+ }
+ return Node.prototype.operate.call(this, op, right);
+};
+
+/**
+ * Return #nnnnnn, #nnn, or rgba(n,n,n,n) string representation of the color.
+ *
+ * @return {String}
+ * @api public
+ */
+
+RGBA.prototype.toString = function(){
+ function pad(n) {
+ return n < 16
+ ? '0' + n.toString(16)
+ : n.toString(16);
+ }
+
+ // special case for transparent named color
+ if ('transparent' == this.name)
+ return this.name;
+
+ if (1 == this.a) {
+ var r = pad(this.r)
+ , g = pad(this.g)
+ , b = pad(this.b);
+
+ // Compress
+ if (r[0] == r[1] && g[0] == g[1] && b[0] == b[1]) {
+ return '#' + r[0] + g[0] + b[0];
+ } else {
+ return '#' + r + g + b;
+ }
+ } else {
+ return 'rgba('
+ + this.r + ','
+ + this.g + ','
+ + this.b + ','
+ + (+this.a.toFixed(3)) + ')';
+ }
+};
+
+/**
+ * Return a `RGBA` from the given `hsla`.
+ *
+ * @param {HSLA} hsla
+ * @return {RGBA}
+ * @api public
+ */
+
+exports.fromHSLA = function(hsla){
+ var h = hsla.h / 360
+ , s = hsla.s / 100
+ , l = hsla.l / 100
+ , a = hsla.a;
+
+ var m2 = l <= .5 ? l * (s + 1) : l + s - l * s
+ , m1 = l * 2 - m2;
+
+ var r = hue(h + 1/3) * 0xff
+ , g = hue(h) * 0xff
+ , b = hue(h - 1/3) * 0xff;
+
+ function hue(h) {
+ if (h < 0) ++h;
+ if (h > 1) --h;
+ if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;
+ if (h * 2 < 1) return m2;
+ if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;
+ return m1;
+ }
+
+ return new RGBA(r,g,b,a);
+};
+
+/**
+ * Clamp `n` >= 0 and <= 255.
+ *
+ * @param {Number} n
+ * @return {Number}
+ * @api private
+ */
+
+function clamp(n) {
+ return Math.max(0, Math.min(n.toFixed(0), 255));
+}
+
+/**
+ * Clamp alpha `n` >= 0 and <= 1.
+ *
+ * @param {Number} n
+ * @return {Number}
+ * @api private
+ */
+
+function clampAlpha(n) {
+ return Math.max(0, Math.min(n, 1));
+}
diff --git a/node_modules/stylus/lib/nodes/root.js b/node_modules/stylus/lib/nodes/root.js
new file mode 100644
index 00000000..3bfb3c21
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/root.js
@@ -0,0 +1,96 @@
+
+/*!
+ * Stylus - Root
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Root` node.
+ *
+ * @api public
+ */
+
+var Root = module.exports = function Root(){
+ this.nodes = [];
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Root.prototype.__proto__ = Node.prototype;
+
+/**
+ * Push a `node` to this block.
+ *
+ * @param {Node} node
+ * @api public
+ */
+
+Root.prototype.push = function(node){
+ this.nodes.push(node);
+};
+
+/**
+ * Unshift a `node` to this block.
+ *
+ * @param {Node} node
+ * @api public
+ */
+
+Root.prototype.unshift = function(node){
+ this.nodes.unshift(node);
+};
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Root.prototype.clone = function(){
+ var clone = new Root();
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ this.nodes.forEach(function(node){
+ clone.push(node.clone(clone, clone));
+ });
+ return clone;
+};
+
+/**
+ * Return "root".
+ *
+ * @return {String}
+ * @api public
+ */
+
+Root.prototype.toString = function(){
+ return '[Root]';
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Root.prototype.toJSON = function(){
+ return {
+ __type: 'Root',
+ nodes: this.nodes,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/selector.js b/node_modules/stylus/lib/nodes/selector.js
new file mode 100644
index 00000000..db183cc7
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/selector.js
@@ -0,0 +1,94 @@
+
+/*!
+ * Stylus - Selector
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Block = require('./block')
+ , Node = require('./node');
+
+/**
+ * Initialize a new `Selector` with the given `segs`.
+ *
+ * @param {Array} segs
+ * @api public
+ */
+
+var Selector = module.exports = function Selector(segs){
+ Node.call(this);
+ this.inherits = true;
+ this.segments = segs;
+ this.optional = false;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Selector.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return the selector string.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Selector.prototype.toString = function(){
+ return this.segments.join('') + (this.optional ? ' !optional' : '');
+};
+
+/**
+ * Check if this is placeholder selector.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Selector.prototype.__defineGetter__('isPlaceholder', function(){
+ return this.val && ~this.val.substr(0, 2).indexOf('$');
+});
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Selector.prototype.clone = function(parent){
+ var clone = new Selector;
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ clone.inherits = this.inherits;
+ clone.val = this.val;
+ clone.segments = this.segments.map(function(node){ return node.clone(parent, clone); });
+ clone.optional = this.optional;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Selector.prototype.toJSON = function(){
+ return {
+ __type: 'Selector',
+ inherits: this.inherits,
+ segments: this.segments,
+ optional: this.optional,
+ val: this.val,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/string.js b/node_modules/stylus/lib/nodes/string.js
new file mode 100644
index 00000000..1fd2b450
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/string.js
@@ -0,0 +1,147 @@
+/*!
+ * Stylus - String
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node')
+ , sprintf = require('../functions').s
+ , utils = require('../utils')
+ , nodes = require('./');
+
+/**
+ * Initialize a new `String` with the given `val`.
+ *
+ * @param {String} val
+ * @param {String} quote
+ * @api public
+ */
+
+var String = module.exports = function String(val, quote){
+ Node.call(this);
+ this.val = val;
+ this.string = val;
+ this.prefixed = false;
+ if (typeof quote !== 'string') {
+ this.quote = "'";
+ } else {
+ this.quote = quote;
+ }
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+String.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return quoted string.
+ *
+ * @return {String}
+ * @api public
+ */
+
+String.prototype.toString = function(){
+ return this.quote + this.val + this.quote;
+};
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+String.prototype.clone = function(){
+ var clone = new String(this.val, this.quote);
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+String.prototype.toJSON = function(){
+ return {
+ __type: 'String',
+ val: this.val,
+ quote: this.quote,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
+
+/**
+ * Return Boolean based on the length of this string.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+String.prototype.toBoolean = function(){
+ return nodes.Boolean(this.val.length);
+};
+
+/**
+ * Coerce `other` to a string.
+ *
+ * @param {Node} other
+ * @return {String}
+ * @api public
+ */
+
+String.prototype.coerce = function(other){
+ switch (other.nodeName) {
+ case 'string':
+ return other;
+ case 'expression':
+ return new String(other.nodes.map(function(node){
+ return this.coerce(node).val;
+ }, this).join(' '));
+ default:
+ return new String(other.toString());
+ }
+};
+
+/**
+ * Operate on `right` with the given `op`.
+ *
+ * @param {String} op
+ * @param {Node} right
+ * @return {Node}
+ * @api public
+ */
+
+String.prototype.operate = function(op, right){
+ switch (op) {
+ case '%':
+ var expr = new nodes.Expression;
+ expr.push(this);
+
+ // constructargs
+ var args = 'expression' == right.nodeName
+ ? utils.unwrap(right).nodes
+ : [right];
+
+ // apply
+ return sprintf.apply(null, [expr].concat(args));
+ case '+':
+ var expr = new nodes.Expression;
+ expr.push(new String(this.val + this.coerce(right).val));
+ return expr;
+ default:
+ return Node.prototype.operate.call(this, op, right);
+ }
+};
diff --git a/node_modules/stylus/lib/nodes/supports.js b/node_modules/stylus/lib/nodes/supports.js
new file mode 100644
index 00000000..ab058783
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/supports.js
@@ -0,0 +1,75 @@
+/*!
+ * Stylus - supports
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Atrule = require('./atrule');
+
+/**
+ * Initialize a new supports node.
+ *
+ * @param {Expression} condition
+ * @api public
+ */
+
+var Supports = module.exports = function Supports(condition){
+ Atrule.call(this, 'supports');
+ this.condition = condition;
+};
+
+/**
+ * Inherit from `Atrule.prototype`.
+ */
+
+Supports.prototype.__proto__ = Atrule.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Supports.prototype.clone = function(parent){
+ var clone = new Supports;
+ clone.condition = this.condition.clone(parent, clone);
+ clone.block = this.block.clone(parent, clone);
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Supports.prototype.toJSON = function(){
+ return {
+ __type: 'Supports',
+ condition: this.condition,
+ block: this.block,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
+
+/**
+ * Return @supports
+ *
+ * @return {String}
+ * @api public
+ */
+
+Supports.prototype.toString = function(){
+ return '@supports ' + this.condition;
+};
diff --git a/node_modules/stylus/lib/nodes/ternary.js b/node_modules/stylus/lib/nodes/ternary.js
new file mode 100644
index 00000000..2034170a
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/ternary.js
@@ -0,0 +1,71 @@
+
+/*!
+ * Stylus - Ternary
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Ternary` with `cond`, `trueExpr` and `falseExpr`.
+ *
+ * @param {Expression} cond
+ * @param {Expression} trueExpr
+ * @param {Expression} falseExpr
+ * @api public
+ */
+
+var Ternary = module.exports = function Ternary(cond, trueExpr, falseExpr){
+ Node.call(this);
+ this.cond = cond;
+ this.trueExpr = trueExpr;
+ this.falseExpr = falseExpr;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Ternary.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Ternary.prototype.clone = function(parent){
+ var clone = new Ternary();
+ clone.cond = this.cond.clone(parent, clone);
+ clone.trueExpr = this.trueExpr.clone(parent, clone);
+ clone.falseExpr = this.falseExpr.clone(parent, clone);
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Ternary.prototype.toJSON = function(){
+ return {
+ __type: 'Ternary',
+ cond: this.cond,
+ trueExpr: this.trueExpr,
+ falseExpr: this.falseExpr,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/unaryop.js b/node_modules/stylus/lib/nodes/unaryop.js
new file mode 100644
index 00000000..6ac92ab3
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/unaryop.js
@@ -0,0 +1,66 @@
+
+/*!
+ * Stylus - UnaryOp
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `UnaryOp` with `op`, and `expr`.
+ *
+ * @param {String} op
+ * @param {Node} expr
+ * @api public
+ */
+
+var UnaryOp = module.exports = function UnaryOp(op, expr){
+ Node.call(this);
+ this.op = op;
+ this.expr = expr;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+UnaryOp.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+UnaryOp.prototype.clone = function(parent){
+ var clone = new UnaryOp(this.op);
+ clone.expr = this.expr.clone(parent, clone);
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+UnaryOp.prototype.toJSON = function(){
+ return {
+ __type: 'UnaryOp',
+ op: this.op,
+ expr: this.expr,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
diff --git a/node_modules/stylus/lib/nodes/unit.js b/node_modules/stylus/lib/nodes/unit.js
new file mode 100644
index 00000000..2d38d84f
--- /dev/null
+++ b/node_modules/stylus/lib/nodes/unit.js
@@ -0,0 +1,214 @@
+
+/*!
+ * Stylus - Unit
+ * Copyright (c) Automattic <developer.wordpress.com>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node')
+ , nodes = require('./');
+
+/**
+ * Unit conversion table.
+ */
+
+var FACTOR_TABLE = {
+ 'mm': {val: 1, label: 'mm'},
+ 'cm': {val: 10, label: 'mm'},
+ 'in': {val: 25.4, label: 'mm'},
+ 'pt': {val: 25.4/72, label: 'mm'},
+ 'ms': {val: 1, label: 'ms'},
+ 's': {val: 1000, label: 'ms'},
+ 'Hz': {val: 1, label: 'Hz'},
+ 'kHz': {val: 1000, label: 'Hz'}
+};
+
+/**
+ * Initialize a new `Unit` with the given `val` and unit `type`
+ * such as "px", "pt", "in", etc.
+ *
+ * @param {String} val
+ * @param {String} type
+ * @api public
+ */
+
+var Unit = module.exports = function Unit(val, type){
+ Node.call(this);
+ this.val = val;
+ this.type = type;
+};
+
+/**
+ * Inherit from `Node.prototype`.
+ */
+
+Unit.prototype.__proto__ = Node.prototype;
+
+/**
+ * Return Boolean based on the unit value.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Unit.prototype.toBoolean = function(){
+ return nodes.Boolean(this.type
+ ? true
+ : this.val);
+};
+
+/**
+ * Return unit string.
+ *
+ * @return {String}
+ * @api public
+ */
+
+Unit.prototype.toString = function(){
+ return this.val + (this.type || '');
+};
+
+/**
+ * Return a clone of this node.
+ *
+ * @return {Node}
+ * @api public
+ */
+
+Unit.prototype.clone = function(){
+ var clone = new Unit(this.val, this.type);
+ clone.lineno = this.lineno;
+ clone.column = this.column;
+ clone.filename = this.filename;
+ return clone;
+};
+
+/**
+ * Return a JSON representation of this node.
+ *
+ * @return {Object}
+ * @api public
+ */
+
+Unit.prototype.toJSON = function(){
+ return {
+ __type: 'Unit',
+ val: this.val,
+ type: this.type,
+ lineno: this.lineno,
+ column: this.column,
+ filename: this.filename
+ };
+};
+
+/**
+ * Operate on `right` with the given `op`.
+ *
+ * @param {String} op
+ * @param {Node} right
+ * @return {Node}
+ * @api public
+ */
+
+Unit.prototype.operate = function(op, right){
+ var type = this.type || right.first.type;
+
+ // swap color
+ if ('rgba' == right.nodeName || 'hsla' == right.nodeName) {
+ return right.operate(op, this);
+ }
+
+ // operate
+ if (this.shouldCoerce(op)) {
+ right = right.first;
+ // percentages
+ if ('%' != this.type && ('-' == op || '+' == op) && '%' == right.type) {
+ right = new Unit(this.val * (right.val / 100), '%');
+ } else {
+ right = this.coerce(right);
+ }
+
+ switch (op) {
+ case '-':
+ return new Unit(this.val - right.val, type);
+ case '+':
+ // keyframes interpolation
+ type = type || (right.type == '%' && right.type);
+ return new Unit(this.val + right.val, type);
+ case '/':
+ return new Unit(this.val / right.val, type);
+ case '*':
+ return new Unit(this.val * right.val, type);
+ case '%':
+ return new Unit(this.val % right.val, type);
+ case '**':
+ return new Unit(Math.pow(this.val, right.val), type);
+ case '..':
+ case '...':
+ var start = this.val
+ , end = right.val
+ , expr = new nodes.Expression
+ , inclusive = '..' == op;
+ if (start < end) {
+ do {
+ expr.push(new nodes.Unit(start));
+ } while (inclusive ? ++start <= end : ++start < end);
+ } else {
+ do {
+ expr.push(new nodes.Unit(start));
+ } while (inclusive ? --start >= end : --start > end);
+ }
+ return expr;
+ }
+ }
+
+ return Node.prototype.operate.call(this, op, right);
+};
+
+/**
+ * Coerce `other` unit to the same type as `this` unit.
+ *
+ * Supports:
+ *
+ * mm -> cm | in
+ * cm -> mm | in
+ * in -> mm | cm
+ *
+ * ms -> s
+ * s -> ms
+ *
+ * Hz -> kHz
+ * kHz -> Hz
+ *
+ * @param {Unit} other
+ * @return {Unit}
+ * @api public
+ */
+
+Unit.prototype.coerce = function(other){
+ if ('unit' == other.nodeName) {
+ var a = this
+ , b = other
+ , factorA = FACTOR_TABLE[a.type]
+ , factorB = FACTOR_TABLE[b.type];
+
+ if (factorA && factorB && (factorA.label == factorB.label)) {
+ var bVal = b.val * (factorB.val / factorA.val);
+ return new nodes.Unit(bVal, a.type);
+ } else {
+ return new nodes.Unit(b.val, a.type);
+ }
+ } else if ('string' == other.nodeName) {
+ // keyframes interpolation
+ if ('%' == other.val) return new nodes.Unit(0, '%');
+ var val = parseFloat(other.val);
+ if (isNaN(val)) Node.prototype.coerce.call(this, other);
+ return new nodes.Unit(val);
+ } else {
+ return Node.prototype.coerce.call(this, other);
+ }
+};