[Pkg-javascript-commits] [node-css-parse] 01/02: Imported Upstream version 1.7.0

Leo Iannacone l3on-guest at moszumanska.debian.org
Wed Apr 30 19:41:29 UTC 2014


This is an automated email from the git hooks/post-receive script.

l3on-guest pushed a commit to branch master
in repository node-css-parse.

commit 21e8a61ddf8525c11c15685fa33705a8ffa392d7
Author: Leo Iannacone <l3on at ubuntu.com>
Date:   Wed Apr 30 21:17:00 2014 +0200

    Imported Upstream version 1.7.0
---
 .npmignore                         |    6 +
 .travis.yml                        |    4 +
 History.md                         |   92 +
 LICENSE                            |   22 +
 Makefile                           |   11 +
 Readme.md                          |  142 +
 benchmark/index.js                 |   31 +
 benchmark/large.css                | 5713 ++++++++++++++++++++++++++++++++++++
 benchmark/small.css                |  229 ++
 component.json                     |    8 +
 examples/dialog.css                |   92 +
 examples/dialog.js                 |   11 +
 index.js                           |  494 ++++
 package.json                       |   29 +
 test/cases/charset.css             |    2 +
 test/cases/charset.json            |   67 +
 test/cases/colon-space.css         |    4 +
 test/cases/colon-space.json        |   58 +
 test/cases/comment.css             |   10 +
 test/cases/comment.json            |  147 +
 test/cases/comment.url.css         |    7 +
 test/cases/comment.url.json        |  117 +
 test/cases/document.css            |    7 +
 test/cases/document.json           |   90 +
 test/cases/empty.css               |    0
 test/cases/empty.json              |    6 +
 test/cases/escapes.css             |   54 +
 test/cases/escapes.json            | 1556 ++++++++++
 test/cases/host.css                |    5 +
 test/cases/host.json               |   58 +
 test/cases/import.css              |    6 +
 test/cases/import.json             |   82 +
 test/cases/import.messed.css       |    7 +
 test/cases/import.messed.json      |   82 +
 test/cases/invalid.css             |    3 +
 test/cases/invalid.json            |    6 +
 test/cases/keyframes.advanced.css  |   13 +
 test/cases/keyframes.advanced.json |  129 +
 test/cases/keyframes.complex.css   |    8 +
 test/cases/keyframes.complex.json  |  198 ++
 test/cases/keyframes.css           |   13 +
 test/cases/keyframes.json          |  154 +
 test/cases/keyframes.messed.css    |    6 +
 test/cases/keyframes.messed.json   |   94 +
 test/cases/keyframes.vendor.css    |    4 +
 test/cases/keyframes.vendor.json   |   95 +
 test/cases/media.css               |   26 +
 test/cases/media.json              |  305 ++
 test/cases/media.messed.css        |   27 +
 test/cases/media.messed.json       |  245 ++
 test/cases/messed-up.css           |   15 +
 test/cases/messed-up.json          |  144 +
 test/cases/namespace.css           |    2 +
 test/cases/namespace.json          |   37 +
 test/cases/no-semi.css             |    5 +
 test/cases/no-semi.json            |   58 +
 test/cases/paged-media.css         |    9 +
 test/cases/paged-media.json        |  106 +
 test/cases/props.css               |    6 +
 test/cases/props.json              |   74 +
 test/cases/quoted.css              |    3 +
 test/cases/quoted.json             |   42 +
 test/cases/rule.css                |    3 +
 test/cases/rule.json               |   42 +
 test/cases/rules.css               |    6 +
 test/cases/rules.json              |   77 +
 test/cases/supports.css            |    8 +
 test/cases/supports.json           |  105 +
 test/cases/wtf.css                 |    5 +
 test/cases/wtf.json                |   74 +
 test/css-parse.js                  |   24 +
 71 files changed, 11420 insertions(+)

diff --git a/.npmignore b/.npmignore
new file mode 100644
index 0000000..4a3c398
--- /dev/null
+++ b/.npmignore
@@ -0,0 +1,6 @@
+support
+test
+examples
+*.sock
+test.css
+test.js
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..09d3ef3
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+  - 0.8
+  - 0.10
diff --git a/History.md b/History.md
new file mode 100644
index 0000000..2cbb2a7
--- /dev/null
+++ b/History.md
@@ -0,0 +1,92 @@
+
+1.7.0 / 2013-12-21
+==================
+
+ * allow # in property names
+ * report filename in errors if available
+
+1.6.0 / 2013-10-16
+==================
+
+ * add @host support. Closes #54
+ * add benchmarks
+ * add `source` property to `position`
+ * change: relax keyframe selectors and property names
+
+1.5.3 / 2013-09-10
+==================
+
+ * add trim shim function. Closes #45
+ * fix: parser now correctly parses attributes with whitespace before colon
+
+1.5.2 / 2013-07-28
+==================
+
+ * fix another regexp for good old FF
+
+1.5.1 / 2013-07-23
+==================
+
+ * fix // declaration hack. Closes #42
+ * fix comments for several nodes (#34).
+
+1.5.0 / 2013-06-18
+==================
+
+ * add error reporting
+ * fix @document with no vendor prefix
+
+1.4.0 / 2013-05-22
+==================
+
+ * add `position` option support
+ * add .type to all nodes. Closes #18
+ * fix comments within rulesets. Closes #30
+ * fix handling of unterminated comment. Closes #24
+
+1.3.0 / 2013-05-21
+==================
+
+ * add @document parsing. Closes #29
+
+1.2.0 / 2013-03-28
+==================
+
+  * add support for @page at-rules with nested @margin at-rules.
+  * add @namespace support.
+  * add support for new @supports at-rule.
+
+1.1.0 / 2013-03-18
+==================
+
+  * add comment parsing
+
+1.0.4 / 2012-09-17
+==================
+
+  * fix keyframes float percentages
+  * fix an issue with comments containing slashes.
+
+1.0.3 / 2012-09-01
+==================
+
+  * add component support
+  * fix unquoted data uris [rstacruz]
+  * fix keyframe names with no whitespace [rstacruz]
+  * fix excess semicolon support [rstacruz]
+
+1.0.2 / 2012-09-01
+==================
+
+  * fix IE property hack support [rstacruz]
+  * fix quoted strings in declarations [rstacruz]
+
+1.0.1 / 2012-07-26
+==================
+
+  * change "selector" to "selectors" array
+
+1.0.0 / 2010-01-03
+==================
+
+  * Initial release
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..b740930
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+(The MIT License)
+
+Copyright (c) 2013 TJ Holowaychuk <tj at vision-media.ca>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..0600a50
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,11 @@
+
+test:
+	@./node_modules/.bin/mocha \
+		--require should \
+		--reporter spec \
+		--bail
+
+bench:
+	@./node_modules/.bin/matcha
+
+.PHONY: test bench
diff --git a/Readme.md b/Readme.md
new file mode 100644
index 0000000..0f6169e
--- /dev/null
+++ b/Readme.md
@@ -0,0 +1,142 @@
+# css-parse [![Build Status](https://travis-ci.org/visionmedia/css-parse.png)](https://travis-ci.org/visionmedia/css-parse)
+
+  JavaScript CSS parser for nodejs and the browser.
+
+## Installation
+
+  $ npm install css-parse
+
+## Usage
+
+````javascript
+var parse = require('css-parse');
+
+// CSS input string
+var css = "body { \n background-color: #fff;\n }";
+
+var output_obj = parse(css);
+
+// Position and Source parameters
+var output_obj_pos = parse(css, { position: true, source: 'file.css' });
+
+// Print parsed object as CSS string
+console.log(JSON.stringify(output_obj, null, 2));
+
+````
+
+## Example
+
+css:
+
+```css
+body {
+  background: #eee;
+  color: #888;
+}
+```
+
+parse tree:
+
+```json
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "rule",
+        "selectors": [
+          "body"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "#eee"
+          },
+          {
+            "type": "declaration",
+            "property": "color",
+            "value": "#888"
+          }
+        ]
+      }
+    ]
+  }
+}
+```
+
+parse tree with `.position` enabled:
+
+```json
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "rule",
+        "selectors": [
+          "body"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "#eee",
+            "position": {
+              "start": {
+                "line": 3,
+                "column": 3
+              },
+              "end": {
+                "line": 3,
+                "column": 19
+              }
+            }
+          },
+          {
+            "type": "declaration",
+            "property": "color",
+            "value": "#888",
+            "position": {
+              "start": {
+                "line": 4,
+                "column": 3
+              },
+              "end": {
+                "line": 4,
+                "column": 14
+              }
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 2,
+            "column": 1
+          },
+          "end": {
+            "line": 5,
+            "column": 2
+          }
+        }
+      }
+    ]
+  }
+}
+```
+
+If you also pass in `source: 'path/to/original.css'`, that will be set
+on `node.position.source`.
+
+## Performance
+
+  Parsed 15,000 lines of CSS (2mb) in 40ms on my macbook air.
+
+## Related
+ 
+  [css-stringify](https://github.com/visionmedia/css-stringify "CSS-Stringify")  
+  [css-value](https://github.com/visionmedia/css-value "CSS-Value")  
+
+## License
+
+  MIT
diff --git a/benchmark/index.js b/benchmark/index.js
new file mode 100644
index 0000000..2972c10
--- /dev/null
+++ b/benchmark/index.js
@@ -0,0 +1,31 @@
+
+var bytes = require('bytes');
+var parse = require('..');
+var fs = require('fs');
+
+var small = fs.readFileSync('benchmark/small.css', 'utf8');
+var large = fs.readFileSync('benchmark/large.css', 'utf8');
+var huge = Array(8).join(large);
+
+function lines(str) {
+  return str.split(/\n/g).length;
+}
+
+console.log();
+console.log('  small : %s : %s lines', bytes(Buffer.byteLength(small)), lines(small));
+console.log('  large : %s : %s lines', bytes(Buffer.byteLength(large)), lines(large));
+console.log('   huge : %s : %s lines', bytes(Buffer.byteLength(huge)), lines(huge));
+
+suite('css parse', function(){
+  bench('small', function(){
+    parse(small)
+  })
+
+  bench('large', function(){
+    parse(large)
+  })
+
+  bench('huge', function(){
+    parse(huge)
+  })
+})
\ No newline at end of file
diff --git a/benchmark/large.css b/benchmark/large.css
new file mode 100644
index 0000000..c667ec3
--- /dev/null
+++ b/benchmark/large.css
@@ -0,0 +1,5713 @@
+
+#dialog {
+  position: fixed;
+  left: 50%;
+  top: 150px;
+  max-width: 600px;
+  min-width: 250px;
+  border: 1px solid #eee;
+  background: white;
+  z-index: 1000;
+}
+
+#dialog .content {
+  padding: 15px 20px;
+}
+
+#dialog h1 {
+  margin: 0 0 5px 0;
+  font-size: 16px;
+  font-weight: normal;
+}
+
+#dialog p {
+  margin: 0;
+  padding: 0;
+  font-size: .9em;
+}
+
+/* close */
+
+#dialog .close {
+  position: absolute;
+  top: 3px;
+  right: 10px;
+  text-decoration: none;
+  color: #888;
+  font-size: 16px;
+  font-weight: bold;
+  display: none;
+}
+
+#dialog .close em {
+  display: none;
+}
+
+#dialog.closable .close {
+  display: block;
+}
+
+#dialog .close:hover {
+  color: black;
+}
+
+#dialog .close:active {
+  margin-top: 1px;
+}
+
+/* slide */
+
+#dialog.slide {
+  -webkit-transition: opacity 300ms, top 300ms;
+  -moz-transition: opacity 300ms, top 300ms;
+}
+
+#dialog.slide.hide {
+  opacity: 0;
+  top: -500px;
+}
+
+/* fade */
+
+#dialog.fade {
+  -webkit-transition: opacity 300ms;
+  -moz-transition: opacity 300ms;
+}
+
+#dialog.fade.hide {
+  opacity: 0;
+}
+
+/* scale */
+
+#dialog.scale {
+  -webkit-transition: -webkit-transform 300ms;
+  -moz-transition: -moz-transform 300ms;
+  -webkit-transform: scale(1);
+  -moz-transform: scale(1);
+}
+
+#dialog.scale.hide {
+  -webkit-transform: scale(0);
+  -moz-transform: scale(0);
+}
+#overlay {
+  position: fixed;
+  top: 0;
+  left: 0;
+  opacity: 1;
+  width: 100%;
+  height: 100%;
+  background: rgba(0,0,0,.75);
+  transition: opacity 300ms;
+  z-index: 500;
+}
+
+#overlay.hide {
+  pointer-events: none;
+  opacity: 0;
+}
+
+#notifications {
+  position: fixed;
+  top: 10px;
+  right: 15px;
+}
+
+#notifications li {
+  margin-bottom: 5px;
+  list-style: none;
+}
+
+.notification {
+  position: relative;
+  max-width: 600px;
+  min-width: 250px;
+  border: 1px solid #eee;
+  background: white;
+  z-index: 100;
+}
+
+.notification .content {
+  padding: 15px 20px;
+}
+
+.notification .title {
+  margin: 0 0 5px 0;
+  font-size: 16px;
+  font-weight: normal;
+}
+
+.notification p {
+  margin: 0;
+  padding: 0;
+  font-size: .9em;
+}
+
+.notification .close {
+  position: absolute;
+  top: 5px;
+  right: 10px;
+  text-decoration: none;
+  color: #888;
+  display: none;
+}
+
+.notification.closable .close {
+  display: block;
+}
+
+.notification .close:hover {
+  color: black;
+}
+
+.notification .close:active {
+  margin-top: 1px;
+}
+
+/* close */
+
+.notification .close {
+  position: absolute;
+  top: 3px;
+  right: 10px;
+  text-decoration: none;
+  color: #888;
+  font-size: 16px;
+  font-weight: bold;
+  display: none;
+}
+
+/* slide */
+
+.notification.slide {
+  -webkit-transition: opacity 300ms, top 300ms;
+  -moz-transition: opacity 300ms, top 300ms;
+}
+
+.notification.slide.hide {
+  opacity: 0;
+  top: -500px;
+}
+
+/* fade */
+
+.notification.fade {
+  -webkit-transition: opacity 300ms;
+  -moz-transition: opacity 300ms;
+}
+
+.notification.fade.hide {
+  opacity: 0;
+}
+
+/* scale */
+
+.notification.scale {
+  -webkit-transition: -webkit-transform 300ms;
+  -moz-transition: -moz-transform 300ms;
+  -webkit-transform: scale(1);
+  -moz-transform: scale(1);
+}
+
+.notification.scale.hide {
+  -webkit-transform: scale(0);
+  -moz-transform: scale(0);
+}
+.touch {
+  position: absolute;
+  z-index: 1000000;
+  display: block;
+  width: 50px;
+  height: 50px;
+  margin-top: -25px;
+  margin-left: -25px;
+  background: #a0a0a0;
+  border: 1px solid #d9d9d9;
+  opacity: .45;
+  -webkit-border-radius: 50px;
+}
+
+/*! normalize.css 2012-03-11T12:53 UTC - http://github.com/necolas/normalize.css */
+
+/* =============================================================================
+   HTML5 display definitions
+   ========================================================================== */
+
+/*
+ * Corrects block display not defined in IE6/7/8/9 & FF3
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section,
+summary {
+    display: block;
+}
+
+/*
+ * Corrects inline-block display not defined in IE6/7/8/9 & FF3
+ */
+
+audio,
+canvas,
+video {
+    display: inline-block;
+    *display: inline;
+    *zoom: 1;
+}
+
+/*
+ * Prevents modern browsers from displaying 'audio' without controls
+ * Remove excess height in iOS5 devices
+ */
+
+audio:not([controls]) {
+    display: none;
+    height: 0;
+}
+
+/*
+ * Addresses styling for 'hidden' attribute not present in IE7/8/9, FF3, S4
+ * Known issue: no IE6 support
+ */
+
+[hidden] {
+    display: none;
+}
+
+
+/* =============================================================================
+   Base
+   ========================================================================== */
+
+/*
+ * 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units
+ *    http://clagnut.com/blog/348/#c790
+ * 2. Prevents iOS text size adjust after orientation change, without disabling user zoom
+ *    www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/
+ */
+
+html {
+    font-size: 100%; /* 1 */
+    -webkit-text-size-adjust: 100%; /* 2 */
+    -ms-text-size-adjust: 100%; /* 2 */
+}
+
+/*
+ * Addresses font-family inconsistency between 'textarea' and other form elements.
+ */
+
+html,
+button,
+input,
+select,
+textarea {
+    font-family: sans-serif;
+}
+
+/*
+ * Addresses margins handled incorrectly in IE6/7
+ */
+
+body {
+    margin: 0;
+}
+
+
+/* =============================================================================
+   Links
+   ========================================================================== */
+
+/*
+ * Addresses outline displayed oddly in Chrome
+ */
+
+a:focus {
+    outline: thin dotted;
+}
+
+/*
+ * Improves readability when focused and also mouse hovered in all browsers
+ * people.opera.com/patrickl/experiments/keyboard/test
+ */
+
+a:hover,
+a:active {
+    outline: 0;
+}
+
+
+/* =============================================================================
+   Typography
+   ========================================================================== */
+
+/*
+ * Addresses font sizes and margins set differently in IE6/7
+ * Addresses font sizes within 'section' and 'article' in FF4+, Chrome, S5
+ */
+
+h1 {
+    font-size: 2em;
+    margin: 0.67em 0;
+}
+
+h2 {
+    font-size: 1.5em;
+    margin: 0.83em 0;
+}
+
+h3 {
+    font-size: 1.17em;
+    margin: 1em 0;
+}
+
+h4 {
+    font-size: 1em;
+    margin: 1.33em 0;
+}
+
+h5 {
+    font-size: 0.83em;
+    margin: 1.67em 0;
+}
+
+h6 {
+    font-size: 0.75em;
+    margin: 2.33em 0;
+}
+
+/*
+ * Addresses styling not present in IE7/8/9, S5, Chrome
+ */
+
+abbr[title] {
+    border-bottom: 1px dotted;
+}
+
+/*
+ * Addresses style set to 'bolder' in FF3+, S4/5, Chrome
+*/
+
+b,
+strong {
+    font-weight: bold;
+}
+
+blockquote {
+    margin: 1em 40px;
+}
+
+/*
+ * Addresses styling not present in S5, Chrome
+ */
+
+dfn {
+    font-style: italic;
+}
+
+/*
+ * Addresses styling not present in IE6/7/8/9
+ */
+
+mark {
+    background: #ff0;
+    color: #000;
+}
+
+/*
+ * Addresses margins set differently in IE6/7
+ */
+
+p,
+pre {
+    margin: 1em 0;
+}
+
+/*
+ * Corrects font family set oddly in IE6, S4/5, Chrome
+ * en.wikipedia.org/wiki/User:Davidgothberg/Test59
+ */
+
+pre,
+code,
+kbd,
+samp {
+    font-family: monospace, serif;
+    _font-family: 'courier new', monospace;
+    font-size: 1em;
+}
+
+/*
+ * Improves readability of pre-formatted text in all browsers
+ */
+
+pre {
+    white-space: pre;
+    white-space: pre-wrap;
+    word-wrap: break-word;
+}
+
+/*
+ * 1. Addresses CSS quotes not supported in IE6/7
+ * 2. Addresses quote property not supported in S4
+ */
+
+/* 1 */
+
+q {
+    quotes: none;
+}
+
+/* 2 */
+
+q:before,
+q:after {
+    content: '';
+    content: none;
+}
+
+small {
+    font-size: 75%;
+}
+
+/*
+ * Prevents sub and sup affecting line-height in all browsers
+ * gist.github.com/413930
+ */
+
+sub,
+sup {
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline;
+}
+
+sup {
+    top: -0.5em;
+}
+
+sub {
+    bottom: -0.25em;
+}
+
+
+/* =============================================================================
+   Lists
+   ========================================================================== */
+
+/*
+ * Addresses margins set differently in IE6/7
+ */
+
+dl,
+menu,
+ol,
+ul {
+    margin: 1em 0;
+}
+
+dd {
+    margin: 0 0 0 40px;
+}
+
+/*
+ * Addresses paddings set differently in IE6/7
+ */
+
+menu,
+ol,
+ul {
+    padding: 0 0 0 40px;
+}
+
+/*
+ * Corrects list images handled incorrectly in IE7
+ */
+
+nav ul,
+nav ol {
+    list-style: none;
+    list-style-image: none;
+}
+
+
+/* =============================================================================
+   Embedded content
+   ========================================================================== */
+
+/*
+ * 1. Removes border when inside 'a' element in IE6/7/8/9, FF3
+ * 2. Improves image quality when scaled in IE7
+ *    code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/
+ */
+
+img {
+    border: 0; /* 1 */
+    -ms-interpolation-mode: bicubic; /* 2 */
+}
+
+/*
+ * Corrects overflow displayed oddly in IE9
+ */
+
+svg:not(:root) {
+    overflow: hidden;
+}
+
+
+/* =============================================================================
+   Figures
+   ========================================================================== */
+
+/*
+ * Addresses margin not present in IE6/7/8/9, S5, O11
+ */
+
+figure {
+    margin: 0;
+}
+
+
+/* =============================================================================
+   Forms
+   ========================================================================== */
+
+/*
+ * Corrects margin displayed oddly in IE6/7
+ */
+
+form {
+    margin: 0;
+}
+
+/*
+ * Define consistent border, margin, and padding
+ */
+
+fieldset {
+    border: 1px solid #c0c0c0;
+    margin: 0 2px;
+    padding: 0.35em 0.625em 0.75em;
+}
+
+/*
+ * 1. Corrects color not being inherited in IE6/7/8/9
+ * 2. Corrects text not wrapping in FF3
+ * 3. Corrects alignment displayed oddly in IE6/7
+ */
+
+legend {
+    border: 0; /* 1 */
+    padding: 0;
+    white-space: normal; /* 2 */
+    *margin-left: -7px; /* 3 */
+}
+
+/*
+ * 1. Corrects font size not being inherited in all browsers
+ * 2. Addresses margins set differently in IE6/7, FF3+, S5, Chrome
+ * 3. Improves appearance and consistency in all browsers
+ */
+
+button,
+input,
+select,
+textarea {
+    font-size: 100%; /* 1 */
+    margin: 0; /* 2 */
+    vertical-align: baseline; /* 3 */
+    *vertical-align: middle; /* 3 */
+}
+
+/*
+ * Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet
+ */
+
+button,
+input {
+    line-height: normal; /* 1 */
+}
+
+/*
+ * 1. Improves usability and consistency of cursor style between image-type 'input' and others
+ * 2. Corrects inability to style clickable 'input' types in iOS
+ * 3. Removes inner spacing in IE7 without affecting normal text inputs
+ *    Known issue: inner spacing remains in IE6
+ */
+
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+    cursor: pointer; /* 1 */
+    -webkit-appearance: button; /* 2 */
+    *overflow: visible;  /* 3 */
+}
+
+/*
+ * Re-set default cursor for disabled elements
+ */
+
+button[disabled],
+input[disabled] {
+    cursor: default;
+}
+
+/*
+ * 1. Addresses box sizing set to content-box in IE8/9
+ * 2. Removes excess padding in IE8/9
+ * 3. Removes excess padding in IE7
+      Known issue: excess padding remains in IE6
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+    box-sizing: border-box; /* 1 */
+    padding: 0; /* 2 */
+    *height: 13px; /* 3 */
+    *width: 13px; /* 3 */
+}
+
+/*
+ * 1. Addresses appearance set to searchfield in S5, Chrome
+ * 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof)
+ */
+
+input[type="search"] {
+    -webkit-appearance: textfield; /* 1 */
+    -moz-box-sizing: content-box;
+    -webkit-box-sizing: content-box; /* 2 */
+    box-sizing: content-box;
+}
+
+/*
+ * Removes inner padding and search cancel button in S5, Chrome on OS X
+ */
+
+input[type="search"]::-webkit-search-decoration,
+input[type="search"]::-webkit-search-cancel-button {
+    -webkit-appearance: none;
+}
+
+/*
+ * Removes inner padding and border in FF3+
+ * www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+    border: 0;
+    padding: 0;
+}
+
+/*
+ * 1. Removes default vertical scrollbar in IE6/7/8/9
+ * 2. Improves readability and alignment in all browsers
+ */
+
+textarea {
+    overflow: auto; /* 1 */
+    vertical-align: top; /* 2 */
+}
+
+
+/* =============================================================================
+   Tables
+   ========================================================================== */
+
+/*
+ * Remove most spacing between table cells
+ */
+
+table {
+    border-collapse: collapse;
+    border-spacing: 0;
+}
+
+
+
+.tip {
+  font-size: 11px;
+  position: absolute;
+  padding: 5px;
+  z-index: 1000;
+}
+
+.tip-inner {
+  background-color: rgba(0,0,0,.75);
+  color: #fff;
+  max-width: 200px;
+  padding: 8px 10px 7px 10px;
+  text-align: center;
+}
+
+.tip-inner {
+  border-radius: 3px;
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+}
+  
+.tip-arrow {
+  position: absolute;
+  width: 0;
+  height: 0;
+  line-height: 0;
+  border: 5px dashed rgba(0,0,0,.75);
+}
+  
+.tip-arrow-south { border-bottom-color: rgba(0,0,0,.75) }
+.tip-arrow-north { border-top-color: rgba(0,0,0,.75) }
+.tip-arrow-west { border-left-color: rgba(0,0,0,.75) }
+.tip-arrow-east { border-right-color: rgba(0,0,0,.75) }
+  
+.tip-south .tip-arrow {
+  top: 0px;
+  left: 50%;
+  margin-left: -5px;
+  border-bottom-style: solid;
+  border-top: none;
+  border-left-color: transparent;
+  border-right-color: transparent
+}
+
+.tip-north .tip-arrow {
+  bottom: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-top-style: solid;
+  border-bottom: none;
+  border-left-color: transparent;
+  border-right-color: transparent
+}
+
+.tip-west .tip-arrow,
+.tip-north-west .tip-arrow,
+.tip-south-west .tip-arrow {
+  right: 0;
+  top: 50%;
+  margin-top: -5px;
+  border-left-style: solid;
+  border-right: none;
+  border-top-color: transparent;
+  border-bottom-color: transparent
+}
+
+.tip-east .tip-arrow,
+.tip-north-east .tip-arrow,
+.tip-south-east .tip-arrow {
+  left: 0;
+  top: 50%;
+  margin-top: -5px;
+  border-right-style: solid;
+  border-left: none;
+  border-top-color: transparent;
+  border-bottom-color: transparent
+}
+
+.tip-north-west .tip-arrow,
+.tip-north-east .tip-arrow {
+  top: 25%;
+}
+
+.tip-south-west .tip-arrow,
+.tip-south-east .tip-arrow {
+  top: 75%;
+}
+
+/* effects */
+
+.tip.fade {
+  transition: opacity 100ms;
+  -moz-transition: opacity 100ms;
+  -webkit-transition: opacity 100ms;
+}
+
+.tip-hide {
+  opacity: 0;
+}
+
+
+
+
+
+.dropdown-link {
+  padding: 5px 30px 5px 12px;
+  border: 1px solid rgba(0,0,0,0.2);
+  display: inline-block;
+  cursor: pointer
+}
+
+.dropdown-link:hover {
+  background-color: #f1faff;
+}
+
+ul.dropdowni li.current,
+ul.dropdown-menu li.current {
+  background-color: #eee;
+}
+
+ul.menu.dropdown-menu {
+  margin-top: -1px;
+}
+
+.menu {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 100;
+  margin: 0;
+  padding: 0;
+  background: white;
+  border: 1px solid rgba(0,0,0,0.2);
+}
+
+.menu li {
+  list-style: none;
+}
+
+.menu li a {
+  display: block;
+  padding: 5px 30px 5px 12px;
+  text-decoration: none;
+  border-top: 1px solid #eee;
+  color: #2e2e2e;
+  outline: none;
+}
+
+.menu li:first-child a {
+  border-top: none;
+}
+
+.menu li a:hover,
+.menu li.selected a {
+  background: #f1faff;
+}
+
+
+ at -webkit-keyframes blink {
+  0% {
+    opacity: 1;
+  }
+
+  49.99% {
+    opacity: 1;
+  }
+
+  50% {
+    opacity: 0;
+  }
+
+  100% {
+    opacity: 0;
+  }
+}
+.mr-editor {
+  background: white;
+  position: relative;
+  border: 1px solid #999;
+  display: inline-block;
+  width: 400px;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  -o-user-select: none;
+  user-select: none;
+}
+.mr-render-target {
+  position: relative;
+  white-space: pre-wrap;
+  word-wrap: break-word;
+  width: 100%;
+  z-index: 0;
+}
+.mr-caret-head {
+  -webkit-animation-name: blink;
+  -webkit-animation-duration: 0.8s;
+  -webkit-animation-iteration-count: infinite;
+  position: absolute;
+  width: 1px;
+  background: black;
+  visibility: hidden;
+}
+.mr-editor.focused .mr-caret-head {
+  visibility: visible;
+}
+.mr-caret-body {
+  z-index: -1;
+  position: absolute;
+  background: Highlight;
+}
+.mr-input-trap {
+  white-space: pre-wrap;
+  position: absolute;
+  font: inherit;
+  margin: 0;
+  padding: 0;
+  border: none;
+  outline: none;
+  display: block;
+  resize: none;
+  left: 0;
+  right: 0;
+  outline: none;
+  background: none;
+  overflow: hidden;
+}
+.mr-ime-knockout {
+  z-index: 0;
+  background: white;
+}
+
+
+
+.popover .tip-inner {
+  padding: 0;
+  border: 2px solid #1c1c1c;
+  background: white;
+  color: inherit;
+}
+
+.popover-title {
+  display: block;
+  width: 100%;
+  text-align: left;
+  font-weight: bold;
+  padding: 10px;
+}
+
+.popover-content {
+  padding: 10px;
+  padding-top: 0;
+}
+
+
+
+.color-picker canvas {
+  border: 1px solid #888;
+}
+
+.color-picker canvas.main:hover {
+  cursor: crosshair;
+}
+
+.color-picker canvas.spectrum:hover {
+  cursor: row-resize;
+}
+
+.color-picker canvas:active {
+  cursor: none;
+}
+
+
+canvas.sketch {
+  cursor: crosshair;
+}
+
+
+.gist {
+  color: #000;
+}
+
+.gist-syntax pre {
+  margin: 0;
+  padding: 0;
+  text-align: left;
+}
+
+.gist-syntax table {
+  margin-top: 0;
+}
+
+.gist-syntax td {
+  margin: 0;
+  padding: 0;
+}
+
+.gist-syntax .linenos {
+  margin-top: 0;
+  margin-bottom: 0;
+  margin-right: 5px;
+  padding: 0 2px;
+  font-size: 11px;
+  border-right: 1px solid #F3F3F3;
+  background: #FAFAFA;
+  color: #B1B1B1;
+}
+
+.gist-syntax .code {
+  padding: 5px;
+  font-size: 12px;
+}
+
+.gist-syntax .linenodiv {
+  padding: 0 10px;
+}
+
+.gist-syntax .linenodiv pre {
+  text-align: center;
+}
+
+  .gist div {
+    padding: 0;
+    margin: 0;
+  }
+
+  .gist .gist-file {
+    border: 1px solid #dedede; /* gray */
+    font-family: Monaco, "Courier New", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", monospace;
+    margin-bottom: 1em;
+  }
+
+    .gist .gist-file .gist-meta {
+      overflow: hidden;
+      font-size: 85%;
+      padding: .5em;
+      color: #666;
+      background-color: #eaeaea;
+    }
+
+      .gist .gist-file .gist-meta a {
+        color: #369;
+      }
+
+      .gist .gist-file .gist-meta a:visited {
+        color: #737;
+      }
+
+    .gist .gist-file .gist-data {
+      overflow: auto;
+      word-wrap: normal;
+      background-color: #f8f8ff;
+      border-bottom: 1px solid #ddd;
+      font-size: 100%;
+    }
+
+      .gist .gist-file .gist-data pre {
+        font-family: 'Bitstream Vera Sans Mono', 'Courier', monospace;
+        background: transparent !important;
+        margin: 0 !important;
+        border: none !important;
+        padding: .25em .5em .5em .5em !important;
+      }
+
+        .gist .gist-file .gist-data .gist-highlight {
+          background: transparent !important;
+        }
+
+        .gist .gist-file .gist-data .gist-line-numbers {
+          background-color: #ececec;
+          color: #aaa;
+          border-right: 1px solid #ddd;
+          text-align: right;
+        }
+
+          .gist .gist-file .gist-data .gist-line-numbers span {
+            clear: right;
+            display: block;
+          }
+
+.gist-syntax  { background: #ffffff; }
+.gist-syntax .c { color: #999988; font-style: italic } /* Comment */
+.gist-syntax .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+.gist-syntax .k { color: #000000; font-weight: bold } /* Keyword */
+.gist-syntax .o { color: #000000; font-weight: bold } /* Operator */
+.gist-syntax .cm { color: #999988; font-style: italic } /* Comment.Multiline */
+.gist-syntax .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
+.gist-syntax .c1 { color: #999988; font-style: italic } /* Comment.Single */
+.gist-syntax .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
+.gist-syntax .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
+.gist-syntax .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
+.gist-syntax .ge { color: #000000; font-style: italic } /* Generic.Emph */
+.gist-syntax .gr { color: #aa0000 } /* Generic.Error */
+.gist-syntax .gh { color: #999999 } /* Generic.Heading */
+.gist-syntax .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
+.gist-syntax .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
+.gist-syntax .go { color: #888888 } /* Generic.Output */
+.gist-syntax .gp { color: #555555 } /* Generic.Prompt */
+.gist-syntax .gs { font-weight: bold } /* Generic.Strong */
+.gist-syntax .gu { color: #aaaaaa } /* Generic.Subheading */
+.gist-syntax .gt { color: #aa0000 } /* Generic.Traceback */
+.gist-syntax .kc { color: #000000; font-weight: bold } /* Keyword.Constant */
+.gist-syntax .kd { color: #000000; font-weight: bold } /* Keyword.Declaration */
+.gist-syntax .kp { color: #000000; font-weight: bold } /* Keyword.Pseudo */
+.gist-syntax .kr { color: #000000; font-weight: bold } /* Keyword.Reserved */
+.gist-syntax .kt { color: #445588; font-weight: bold } /* Keyword.Type */
+.gist-syntax .m { color: #009999 } /* Literal.Number */
+.gist-syntax .s { color: #d14 } /* Literal.String */
+.gist-syntax .na { color: #008080 } /* Name.Attribute */
+.gist-syntax .nb { color: #0086B3 } /* Name.Builtin */
+.gist-syntax .nc { color: #445588; font-weight: bold } /* Name.Class */
+.gist-syntax .no { color: #008080 } /* Name.Constant */
+.gist-syntax .ni { color: #800080 } /* Name.Entity */
+.gist-syntax .ne { color: #990000; font-weight: bold } /* Name.Exception */
+.gist-syntax .nf { color: #990000; font-weight: bold } /* Name.Function */
+.gist-syntax .nn { color: #555555 } /* Name.Namespace */
+.gist-syntax .nt { color: #000080 } /* Name.Tag */
+.gist-syntax .nv { color: #008080 } /* Name.Variable */
+.gist-syntax .ow { color: #000000; font-weight: bold } /* Operator.Word */
+.gist-syntax .w { color: #bbbbbb } /* Text.Whitespace */
+.gist-syntax .mf { color: #009999 } /* Literal.Number.Float */
+.gist-syntax .mh { color: #009999 } /* Literal.Number.Hex */
+.gist-syntax .mi { color: #009999 } /* Literal.Number.Integer */
+.gist-syntax .mo { color: #009999 } /* Literal.Number.Oct */
+.gist-syntax .sb { color: #d14 } /* Literal.String.Backtick */
+.gist-syntax .sc { color: #d14 } /* Literal.String.Char */
+.gist-syntax .sd { color: #d14 } /* Literal.String.Doc */
+.gist-syntax .s2 { color: #d14 } /* Literal.String.Double */
+.gist-syntax .se { color: #d14 } /* Literal.String.Escape */
+.gist-syntax .sh { color: #d14 } /* Literal.String.Heredoc */
+.gist-syntax .si { color: #d14 } /* Literal.String.Interpol */
+.gist-syntax .sx { color: #d14 } /* Literal.String.Other */
+.gist-syntax .sr { color: #009926 } /* Literal.String.Regex */
+.gist-syntax .s1 { color: #d14 } /* Literal.String.Single */
+.gist-syntax .ss { color: #990073 } /* Literal.String.Symbol */
+.gist-syntax .bp { color: #999999 } /* Name.Builtin.Pseudo */
+.gist-syntax .vc { color: #008080 } /* Name.Variable.Class */
+.gist-syntax .vg { color: #008080 } /* Name.Variable.Global */
+.gist-syntax .vi { color: #008080 } /* Name.Variable.Instance */
+.gist-syntax .il { color: #009999 } /* Literal.Number.Integer.Long */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+.confirmation-notification .title {
+  display: block;
+  padding: 10px 0 0 10px;
+}
+
+.confirmation-notification .content {
+  padding: 0;
+}
+
+.confirmation-notification-message {
+  padding: 10px;
+}
+
+.confirmation-notification-actions {
+  border-top: 1px solid #eee;
+  padding: 5px;
+  text-align: right;
+  background: #fafafa;
+  box-shadow: inset 0 1px 0 white;
+}
+
+
+
+
+
+
+
+.pie {
+  color: #EC4E89;
+  background: #bbb;
+  border: 2px solid white;
+}
+
+
+.pie {
+  color: #EC4E89;
+  background: #bbb;
+  border: 2px solid white;
+}
+
+
+.noticon {
+  color: white;
+  background: #ED372A;
+}
+
+
+* {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  -webkit-font-smoothing: subpixel-antialiased;
+}
+body {
+  background: url("/core/bg.jpg");
+  text-align: center;
+  font: normal 14px "proxima-nova", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+}
+h1,
+h2 {
+  font-weight: 700;
+}
+h3,
+h4,
+h5,
+h6,
+a {
+  font-weight: 600;
+}
+p {
+  line-height: 1.5;
+  font-weight: 400;
+  -webkit-font-smoothing: antialiased;
+}
+a {
+  color: #1f7dca;
+  text-decoration: none;
+}
+a:focus {
+  outline: none;
+}
+input[type=submit]:focus,
+input[type=button]:focus {
+  outline: none;
+}
+button::-moz-focus-inner,
+input[type=button]::-moz-focus-inner,
+input[type=submit]::-moz-focus-inner {
+  border: 0;
+}
+.right {
+  float: right;
+}
+.box,
+.quick-create,
+#dialog {
+  border: 1px solid #cdcdcd;
+  -webkit-border-radius: 5px;
+  border-radius: 5px;
+  -webkit-box-shadow: 0 3px 3px rgba(51,51,51,0.2);
+  box-shadow: 0 3px 3px rgba(51,51,51,0.2);
+}
+.box-top,
+.quick-create .top,
+#dialog .title {
+  background: #f2f2f2;
+  position: relative;
+  display: block;
+  padding: 11px 13px;
+  -webkit-border-top-left-radius: 5px;
+  border-top-left-radius: 5px;
+  -webkit-border-top-right-radius: 5px;
+  border-top-right-radius: 5px;
+}
+.actions {
+  background: #351b61;
+  padding: 10px 25px;
+  font-size: 12px;
+  color: #fff;
+}
+.actions a {
+  margin: 0 10px;
+  color: #fff;
+  text-decoration: none;
+  text-transform: uppercase;
+  font-size: 11px;
+}
+.actions a:last-child {
+  margin-right: 0;
+}
+.actions a.active {
+  border-bottom: 1px solid rgba(255,255,255,0.3);
+}
+.tip-inner {
+  background-color: rgba(0,0,0,0.6);
+  -webkit-border-radius: 2px;
+  border-radius: 2px;
+  color: #eee;
+  font: normal 400 11px "proxima-nova", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+  padding: 7px 10px;
+}
+.tip-arrow {
+  border-color: rgba(0,0,0,0.6);
+}
+.badge {
+  background-color: #cf004f;
+  border: solid 2px #fff;
+  -webkit-box-shadow: 0px 2px 2px #999;
+  box-shadow: 0px 2px 2px #999;
+  color: #fff;
+  font-size: 11px;
+  font-weight: normal;
+  line-height: 16px;
+  position: absolute;
+  top: 12px;
+  right: 18px;
+  width: 20px;
+  height: 20px;
+  -webkit-border-radius: 20px;
+  border-radius: 20px;
+  text-shadow: none;
+  z-index: 0;
+}
+.badge.hidden {
+  opacity: 0;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
+  filter: alpha(opacity=0);
+}
+.dropdown-link {
+  border: 0;
+  padding: 0 12px;
+  text-align: center;
+  color: #1f7dca;
+  font-size: 12px;
+  font-weight: 700;
+  position: relative;
+}
+.dropdown-link:hover {
+  background-color: inherit;
+  color: #1964a2;
+}
+.dropdown-link::after {
+  font-family: 'icons';
+  content: '\e75c';
+  position: absolute;
+  right: -5px;
+}
+.dropdown-link.opened::after {
+  content: '\e75f';
+}
+ul.dropdown-menu {
+  -webkit-border-radius: 5px;
+  border-radius: 5px;
+  -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.2);
+  box-shadow: 0 1px 1px rgba(0,0,0,0.2);
+}
+ul.dropdown-menu li a {
+  font-size: 13px;
+  border: 0;
+  color: #535353;
+  font-weight: 400;
+  height: 33px;
+  line-height: 33px;
+  padding: 0 15px;
+  text-align: left;
+}
+ul.dropdown-menu li a:hover,
+ul.dropdown-menu li a:focus {
+  background-color: #f2f2f2;
+  font-weight: 600;
+}
+ul.dropdown-menu li:first-child,
+ul.dropdown-menu li:first-child a {
+  -webkit-border-radius: 4px 4px 0 0;
+  border-radius: 4px 4px 0 0;
+}
+ul.dropdown-menu li:last-child,
+ul.dropdown-menu li:last-child a {
+  -webkit-border-radius: 0 0 4px 4px;
+  border-radius: 0 0 4px 4px;
+}
+ul.dropdown li.current a,
+ul.dropdown-menu li.current a,
+li.selected a {
+  background-color: #fff;
+  color: #cdcdcd;
+  font-weight: normal;
+  cursor: default;
+}
+ul.dropdown li.current a:hover,
+ul.dropdown-menu li.current a:hover,
+li.selected a:hover {
+  font-weight: normal;
+}
+#bar {
+  height: 54px;
+  -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.1);
+  box-shadow: 0 1px 1px rgba(0,0,0,0.1);
+  text-shadow: 0 1px 0 #fff;
+  position: relative;
+  background: rgba(248,249,250,0.8);
+}
+#bar .inner {
+  max-width: 980px;
+  min-width: 320px;
+  margin: auto;
+  border-bottom: 1px solid #fff;
+}
+#bar .inner > div {
+  float: left;
+  height: 54px;
+}
+#bar .inner .right {
+  float: right;
+}
+#bar .search {
+  display: none;
+  padding: 10px 0 50px 0;
+}
+#bar .search input {
+  width: 250px;
+  padding-right: 30px;
+  margin: 0;
+  background: #fff url("/bar/search.png") no-repeat right;
+  -webkit-box-shadow: 0 1px 1px #fff;
+  box-shadow: 0 1px 1px #fff;
+}
+#bar .create a {
+  color: #535353;
+  text-transform: uppercase;
+  line-height: 54px;
+  vertical-align: middle;
+  display: inline-block;
+}
+#bar .logo {
+  padding-left: 12px;
+  padding-right: 40px;
+}
+#bar .logo a {
+  background: url("/core/logo.png") no-repeat 0 7px;
+  -webkit-background-size: 69px 40px;
+  -moz-background-size: 69px 40px;
+  background-size: 69px 40px;
+  display: block;
+  text-indent: -5000px;
+  width: 130px;
+  height: 54px;
+}
+ at media only screen and (-webkit-min-device-pixel-ratio: 2) {
+  #bar .logo  a {
+    background-image: url("/core/logo at 2x.png");
+  }
+}
+#bar .right {
+  text-align: right;
+  vertical-align: middle;
+  border-right: 1px solid #e3e3e4;
+  position: relative;
+}
+#bar .right > div {
+  border-left: 1px solid #fff;
+  height: 54px;
+  display: inline-block;
+  vertical-align: top;
+}
+#bar .right > div:last-child {
+  border-right: 1px solid #fff;
+}
+#bar .right > div > a {
+  border-left: 1px solid #e3e3e4;
+  height: 54px;
+  line-height: 54px;
+  vertical-align: middle;
+  text-decoration: none;
+  color: #535353;
+  text-align: center;
+  display: inline-block;
+}
+#bar .right > div > a:hover {
+  background-color: #fdfdfd;
+}
+#bar .right .count a {
+  font-size: 28px;
+  padding: 0 20px;
+  text-shadow: 0 1px 0 #fff;
+  font-weight: 600;
+  color: #535353;
+}
+#bar .right .me {
+  position: relative;
+}
+#bar .right .me .avatar {
+  position: relative;
+  top: 2px;
+  display: inline-block;
+  border: 1px solid #ccc;
+  -webkit-border-radius: 28px;
+  border-radius: 28px;
+  height: 30px;
+  width: 30px;
+  margin: 10px;
+  line-height: 0;
+  -webkit-box-shadow: 0 1px 1px #fff;
+  box-shadow: 0 1px 1px #fff;
+  vertical-align: top;
+  position: relative;
+}
+#bar .right .me .avatar img {
+  width: 28px;
+  -webkit-border-radius: 28px;
+  border-radius: 28px;
+}
+#bar .right .me .avatar a.warning {
+  position: absolute;
+  bottom: -5px;
+  color: #ffa500;
+  font-size: 15px;
+  right: -5px;
+}
+#bar .right .me .username {
+  font-size: 14px;
+  font-weight: 600;
+  margin: 10px 10px 10px 0;
+  display: inline-block;
+  text-shadow: 0 1px 0 #fff;
+  max-width: 75px;
+  height: 30px;
+  line-height: 30px;
+  white-space: nowrap;
+  overflow: hidden;
+  -o-text-overflow: ellipsis;
+  text-overflow: ellipsis;
+}
+#bar .dropdown {
+  position: absolute;
+  right: 0;
+  width: 120px;
+  display: inline-block;
+  top: -530px;
+  -webkit-transform: translateY(-10px);
+  -moz-transform: translateY(-10px);
+  -o-transform: translateY(-10px);
+  -ms-transform: translateY(-10px);
+  transform: translateY(-10px);
+  opacity: 0;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
+  filter: alpha(opacity=0);
+  -webkit-transition: opacity 500ms ease-out, -webkit-transform 300ms ease-out;
+  -moz-transition: opacity 500ms ease-out, -webkit-transform 300ms ease-out;
+  -o-transition: opacity 500ms ease-out, -webkit-transform 300ms ease-out;
+  -ms-transition: opacity 500ms ease-out, -webkit-transform 300ms ease-out;
+  transition: opacity 500ms ease-out, -webkit-transform 300ms ease-out;
+  -moz-transition: opacity 500ms ease-out, -moz-transform 300ms ease-out;
+  -ms-transition: opacity 500ms ease-out, -ms-transform 300ms ease-out;
+}
+#bar .dropdown .arrow {
+  width: 0;
+  height: 0;
+  border-left: 8px solid transparent;
+  border-right: 8px solid transparent;
+  border-bottom: 8px solid #999;
+  margin-right: 5px;
+}
+#bar .dropdown .menu {
+  margin-top: 0;
+  -webkit-box-shadow: 0 0 5px rgba(102,102,102,0.3);
+  box-shadow: 0 0 5px rgba(102,102,102,0.3);
+  position: relative;
+  border-color: #999;
+  border-width: 2px;
+  top: 5px;
+}
+#bar .me.active > a {
+  background: #fff;
+}
+#bar .me.active .dropdown {
+  top: 40px;
+  -webkit-transform: translateY(0);
+  -moz-transform: translateY(0);
+  -o-transform: translateY(0);
+  -ms-transform: translateY(0);
+  transform: translateY(0);
+  opacity: 1;
+  -ms-filter: none;
+  filter: none;
+}
+.account-confirm-tip a {
+  color: #ccc;
+  text-decoration: underline;
+}
+.account-confirm-tip .sent,
+.account-confirm-tip .sending,
+.account-confirm-tip a {
+  display: block;
+}
+.account-confirm-tip .sent {
+  color: #ff0;
+}
+.account-confirm-tip .sending {
+  font-style: oblique;
+  color: #ccc;
+}
+ at media only screen and (max-width: 767px) {
+  #bar .search input {
+    width: 220px;
+  }
+  #bar .right .count a {
+    padding-left: 10px;
+    padding-right: 10px;
+    font-size: 14px;
+  }
+}
+ at media only screen and (max-width: 560px) {
+  #bar .right .count {
+    display: none;
+  }
+  #bar .right .me .username {
+    display: none;
+  }
+}
+ at media only screen and (max-width: 479px) {
+  #bar .logo a {
+    display: none;
+  }
+  #bar .search input {
+    width: 220px;
+  }
+}
+.input {
+  position: relative;
+  text-align: left;
+}
+.input-popup {
+  font-size: 90%;
+  position: absolute;
+  background: rgba(255,255,255,0.975);
+  border: 1px solid #d4d4d4;
+  border-bottom: none;
+  -webkit-border-radius: 3px 3px 0 0;
+  border-radius: 3px 3px 0 0;
+  -webkit-box-shadow: 0 -1px 2px rgba(0,0,0,0.1), 0 1px 1px rgba(0,0,0,0.05);
+  box-shadow: 0 -1px 2px rgba(0,0,0,0.1), 0 1px 1px rgba(0,0,0,0.05);
+  margin: 0;
+  padding: 0;
+  list-style: none;
+}
+.input-popup li {
+  margin: 0;
+  padding: 0 8px;
+  height: 28px;
+  line-height: 28px;
+  color: #444;
+}
+.input-popup li span.status-icon {
+  float: right;
+  position: relative;
+  top: 8px;
+}
+.input-popup li img {
+  width: 20px;
+  float: left;
+  position: relative;
+  top: 3px;
+  -webkit-border-radius: 10px;
+  border-radius: 10px;
+  margin-right: 10px;
+}
+.input-popup li:first-child {
+  -webkit-border-radius: 2px 2px 0 0;
+  border-radius: 2px 2px 0 0;
+}
+.input-popup li.selected {
+  background: #92cdf3;
+  color: #fff;
+}
+.input .mr-paragraph-render-target .token {
+  display: inline-block;
+  border: 1px solid rgba(0,0,0,0.08);
+  background: rgba(0,0,0,0.04);
+  color: #3f78b0;
+  font-weight: bold;
+  text-shadow: 0 1px 0 #fff;
+  padding: 0 8px;
+  -webkit-border-radius: 18px;
+  border-radius: 18px;
+  cursor: pointer;
+  font-size: 90%;
+}
+.conversation .sketch-pad {
+  display: none;
+  border-top: 1px solid #eee;
+  position: relative;
+}
+.conversation .sketch-pad input {
+  margin: 0;
+  width: 200px;
+  border: none;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  font-size: 13px;
+}
+.conversation .sketch-pad .color {
+  display: block;
+  float: right;
+  width: 20px;
+  height: 20px;
+  border: 1px solid #eee;
+  background: #000;
+  margin-top: 10px;
+  margin-right: 10px;
+}
+.conversation .sketch-pad .cancel,
+.conversation .sketch-pad .save {
+  display: block;
+  float: right;
+  margin: 12px;
+}
+.conversation .sketch-pad canvas {
+  border-top: 1px solid #eee;
+}
+.conversation .sketch-pad.show {
+  display: block;
+}
+.conversation .sketch-pad.drag:after {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  display: block;
+  margin-left: -65px;
+  margin-top: -10px;
+  content: 'Drop to add image';
+  background: rgba(0,0,0,0.1);
+  padding: 5px;
+  -webkit-border-radius: 5px;
+  border-radius: 5px;
+}
+.conversation .sketch-pad .expand {
+  position: absolute;
+  top: 50px;
+  right: 10px;
+  color: #808080;
+  opacity: 0.4;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
+  filter: alpha(opacity=40);
+}
+.conversation .sketch-pad .expand:hover {
+  opacity: 0.75;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=75);
+  filter: alpha(opacity=75);
+}
+.popover .tip-inner {
+  max-width: 300px;
+}
+.conversation .viewers {
+  padding: 5px 8px 3px;
+  border-top: 1px solid #ceccd9;
+  border-left: 1px solid #c8c8c8;
+  border-right: 1px solid #c8c8c8;
+  background: #f7f6f9;
+  height: 38px;
+}
+.conversation .viewers .user {
+  display: inline-block;
+  height: 38px;
+  margin-right: 5px;
+  position: relative;
+}
+.conversation .viewers .user .icon {
+  position: absolute;
+  bottom: 0;
+  right: -10px;
+  z-index: 10;
+}
+.conversation .viewers .avatar {
+  width: 26px;
+  height: 26px;
+}
+.conversation .viewers .avatar img {
+  width: 24px;
+  height: 24px;
+}
+.conversation .viewers .suggest {
+  float: right;
+  width: 30%;
+  height: 26px;
+  line-height: 26px;
+  text-align: right;
+  padding-right: 4px;
+}
+.conversation .viewers .suggest a {
+  color: #351b61;
+  text-transform: uppercase;
+  font-weight: 700;
+  font-size: 12px;
+  letter-spacing: 1px;
+  text-shadow: 0 1px 0 #fff;
+}
+.conversation .viewers .suggest a:hover {
+  color: #2a164e;
+}
+.conversation .messages .file {
+  position: relative;
+}
+.conversation .messages .file .close {
+  position: absolute;
+  top: 15px;
+  right: 15px;
+}
+.conversation .card {
+  margin: 15px 5px;
+  border: 1px solid #d9d9d9;
+  background: #f6f6f6;
+  -webkit-border-radius: 2px;
+  border-radius: 2px;
+  position: relative;
+}
+.conversation .card .bar {
+  padding: 10px;
+  font-weight: bold;
+}
+.conversation .card .view {
+  position: absolute;
+  bottom: 10px;
+  right: 15px;
+}
+.conversation .card [class*=icon] {
+  display: none;
+}
+.conversation .card.uploading {
+  padding-top: 50px;
+}
+.conversation .card canvas {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  margin-left: -25px;
+  margin-top: -25px;
+}
+.conversation .card-content {
+  text-align: center;
+}
+.conversation .card-content img {
+  margin: 0 auto;
+}
+.conversation {
+  margin: 0 auto 20px;
+  width: 438px;
+  text-align: left;
+  -webkit-transition: width 300ms;
+  -moz-transition: width 300ms;
+  -o-transition: width 300ms;
+  -ms-transition: width 300ms;
+  transition: width 300ms;
+}
+.conversation .tip {
+  font-size: 13px;
+  padding: 10px 0;
+  border-bottom: 1px dotted #eee;
+  text-indent: 15px;
+}
+.conversation .messages {
+  margin: 0;
+  padding: 0;
+}
+.conversation .messages li {
+  font-size: 13px;
+  list-style: none;
+  padding: 8px 10px;
+  zoom: 1;
+}
+.conversation .messages li:before,
+.conversation .messages li:after {
+  content: "";
+  display: table;
+}
+.conversation .messages li:after {
+  clear: both;
+}
+.conversation .messages li.hint {
+  padding: 20px 0 14px;
+  margin-bottom: 1px;
+  font-size: 11px;
+  text-align: center;
+  font-family: Helvetica, Arial;
+  background: #fff url("/conversations/dots.png") repeat-x bottom;
+  margin-bottom: 1px;
+}
+.conversation .messages li.join,
+.conversation .messages li.leave {
+  padding-top: 11px;
+  padding-bottom: 11px;
+  background-color: #f7f7f7;
+  border-bottom: 1px solid #ededed;
+}
+.conversation .messages a {
+  color: #1f7dca;
+  text-decoration: none;
+}
+.conversation .messages li.missed {
+  background: #fffdef;
+}
+.conversation .messages li.missed.first {
+  background: #fffdef url("/conversations/dots.png") repeat-x top;
+}
+.conversation .messages li.missed .unread {
+  color: #d7cb00;
+  font-size: 11px;
+  font-family: arial;
+  position: absolute;
+  top: -11px;
+  left: 50%;
+  margin-left: -50px;
+  background: #fff;
+}
+.conversation .messages li.message,
+.conversation .messages li.join,
+.conversation .messages li.leave,
+.conversation .messages li.file {
+  position: relative;
+}
+.conversation .messages li.message .text,
+.conversation .messages li.join .text,
+.conversation .messages li.leave .text,
+.conversation .messages li.file .text,
+.conversation .messages li.message .file,
+.conversation .messages li.join .file,
+.conversation .messages li.leave .file,
+.conversation .messages li.file .file {
+  line-height: 22px;
+  vertical-align: middle;
+  margin-right: 10px;
+  margin-left: 32px;
+  word-wrap: break-word;
+}
+.conversation .messages li.message .avatar,
+.conversation .messages li.join .avatar,
+.conversation .messages li.leave .avatar,
+.conversation .messages li.file .avatar {
+  position: absolute;
+}
+.conversation .content {
+  background: #fff;
+  margin-top: -10px;
+  overflow-x: hidden;
+  overflow-y: auto;
+  border-left: 1px solid #c8c8c8;
+  border-right: 1px solid #c8c8c8;
+}
+.conversation .compose {
+  position: relative;
+  -webkit-box-shadow: inset 0 1px 0 #fff;
+  box-shadow: inset 0 1px 0 #fff;
+  border-top: 1px solid #c7c7c7;
+  background: #f2f2f2;
+  border-left: 1px solid #c8c8c8;
+  border-right: 1px solid #c8c8c8;
+  border-bottom: 1px solid #c8c8c8;
+  border-bottom-left-radius: 2px;
+  border-bottom-right-radius: 2px;
+  zoom: 1;
+}
+.conversation .compose:before,
+.conversation .compose:after {
+  content: "";
+  display: table;
+}
+.conversation .compose:after {
+  clear: both;
+}
+.conversation .input {
+  float: right;
+  margin: 5px;
+}
+.conversation .input .mr-editor {
+  -webkit-box-sizing: content-box;
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
+  width: 376px;
+  margin: 0;
+  min-height: 46px;
+  background: #fff;
+  max-height: 150px;
+  overflow-y: auto;
+  overflow-x: hidden;
+}
+.conversation .avatar {
+  display: inline-block;
+  border: 1px solid #ccc;
+  width: 22px;
+  height: 22px;
+  -webkit-border-radius: 20px;
+  border-radius: 20px;
+}
+.conversation .avatar img {
+  width: 20px;
+  height: 20px;
+  -webkit-border-radius: 20px;
+  border-radius: 20px;
+}
+.conversation .compose-actions {
+  position: absolute;
+  background-color: #e6e6e6;
+  -webkit-box-shadow: inset -1px 0 2px #d2d2d2;
+  box-shadow: inset -1px 0 2px #d2d2d2;
+  border-right: 1px solid #cdcdcd;
+  display: inline-block;
+  width: 32px;
+  float: left;
+  height: 100%;
+  border-bottom-left-radius: 2px;
+  text-align: center;
+}
+.conversation .compose-actions a {
+  display: inline-block;
+  padding-left: 4px;
+  padding-top: 5px;
+  font-size: 18px;
+  color: #7b7b7b;
+  text-shadow: 0 1px 1px #fff;
+}
+.conversation .compose-actions a:hover {
+  color: #626262;
+}
+.conversation .title {
+  background: transparent;
+  color: #333;
+  position: relative;
+  z-index: 20;
+  margin-left: -1px;
+}
+.conversation .title:before,
+.conversation .title:after {
+  display: block;
+  margin-right: -1px;
+  content: " ";
+}
+.conversation .title:before {
+  background: #f2f2f2;
+  border: 1px solid rgba(197,197,197,0.6);
+  border-top: 1px solid rgba(197,197,197,0.2);
+  border-top-left-radius: 6px;
+  border-top-right-radius: 6px;
+  border-bottom: none;
+  -webkit-box-shadow: 0 1px 0 #fff inset;
+  box-shadow: 0 1px 0 #fff inset;
+  height: 40px;
+}
+.conversation .title:after {
+  background: url("/conversations/wave-gray.svg");
+  background-position: -27px top;
+  border: 1px solid rgba(197,197,197,0.6);
+  border-width: 0 1px;
+  height: 9px;
+}
+.conversation .title span {
+  position: absolute;
+  top: 15px;
+  left: 15px;
+  margin-right: -1px;
+  color: #535353;
+  font-weight: bold;
+  font-size: 14px;
+  text-shadow: 0 1px 0 #fff;
+}
+.conversation .title .right {
+  float: none;
+  position: absolute;
+  top: 15px;
+  right: 10px;
+}
+.conversation .title a {
+  display: block;
+  float: left;
+  margin-left: 5px;
+  color: #6e6e6e;
+}
+.conversation.focus .title:before {
+  background-color: #69bef5;
+  border-color: rgba(89,164,215,0.6);
+  border-top-color: rgba(255,255,255,0.8);
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+.conversation.focus .title:after {
+  background-image: url("/conversations/wave-blue.svg");
+  border-color: rgba(89,164,215,0.6);
+}
+.conversation.focus .title a,
+.conversation.focus .title span {
+  text-shadow: none;
+  color: #fff;
+}
+.conversation.focus .title span {
+  font-weight: 600;
+  text-shadow: 0 1px 0 #448fca;
+}
+.conversation .time {
+  border-top: 1px dotted #eee;
+  height: 1px;
+  margin: 10px 0;
+  padding: 0 !important;
+}
+.conversation .time span {
+  position: relative;
+  top: -11px;
+  left: 50%;
+  margin-left: -20px;
+  font-size: 10px;
+  font-weight: bold;
+}
+.conversation .message .text a {
+  color: #12c;
+  text-decoration: underline;
+}
+.conversation .message .text a:visited {
+  color: #609;
+}
+.conversation input[type='file'] {
+  position: relative;
+  top: -15px;
+  opacity: 0;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
+  filter: alpha(opacity=0);
+}
+#dialog.sketch-dialog {
+  max-width: none;
+}
+.quick-create {
+  background-color: #fff;
+  width: 380px;
+  text-align: center;
+}
+.quick-create .top {
+  padding: 19px 0;
+}
+.quick-create .top .input-wrap {
+  position: relative;
+  display: inline-block;
+}
+.quick-create .top .input,
+.quick-create .top .input-wrap {
+  width: 344px;
+}
+.quick-create .top .input {
+  background: #fff;
+  margin: 0;
+  font-size: 12px;
+}
+.quick-create .top span.optional.focused {
+  color: #eee;
+}
+.quick-create .top span.optional {
+  font-size: 11px;
+  position: absolute;
+  top: 11px;
+  right: 10px;
+  text-align: right;
+  font-style: oblique;
+  color: #666;
+  white-space: nowrap;
+}
+.quick-create ul.buttons {
+  margin: 0;
+  padding: 19px;
+  list-style-type: none;
+}
+.quick-create ul.buttons a {
+  color: #538bb4;
+  display: block;
+  margin-bottom: 9px;
+  background-color: #f2f2f2;
+  -webkit-transition: background-color 100ms ease-in;
+  -moz-transition: background-color 100ms ease-in;
+  -o-transition: background-color 100ms ease-in;
+  -ms-transition: background-color 100ms ease-in;
+  transition: background-color 100ms ease-in;
+  font-size: 14px;
+  -webkit-border-radius: 3px;
+  border-radius: 3px;
+  -webkit-box-shadow: 0 1px 0 #ddd;
+  box-shadow: 0 1px 0 #ddd;
+  padding: 18px 0;
+}
+.quick-create ul.buttons a:hover {
+  background-color: #ededed;
+}
+.ring-container {
+  position: relative;
+}
+.ring-container .ring-item {
+  height: 110px;
+  width: 76px;
+  position: absolute;
+  z-index: 0;
+}
+.ring-container .ring-item.focused {
+  z-index: 1000 !important;
+}
+.ring-container .ring-item .ring-item-placeholder {
+  width: 76px;
+  height: 76px;
+  border: 1px solid rgba(0,0,0,0.3);
+  -webkit-border-radius: 38px;
+  border-radius: 38px;
+  -webkit-box-shadow: 0 2px 3px rgba(0,0,0,0.2);
+  box-shadow: 0 2px 3px rgba(0,0,0,0.2);
+  background-color: #fff;
+  padding: 2px;
+  position: absolute;
+  z-index: 100;
+}
+.ring-container .ring-item .ring-item-placeholder .ring-bright {
+  width: 70px;
+  height: 25px;
+  position: absolute;
+  left: 18px;
+  top: 9px;
+  overflow: hidden;
+  -webkit-transform: rotate(45deg);
+  -moz-transform: rotate(45deg);
+  -o-transform: rotate(45deg);
+  -ms-transform: rotate(45deg);
+  transform: rotate(45deg);
+}
+.ring-container .ring-item .ring-item-placeholder .ring-bright:before {
+  height: 70px;
+  display: block;
+  -webkit-border-radius: 35px;
+  border-radius: 35px;
+  background-color: rgba(255,255,255,0.1);
+  content: " ";
+}
+.ring-container .ring-item .ring-item-placeholder:hover {
+  cursor: pointer;
+}
+.ring-container .ring-item .ring-item-placeholder:hover img {
+  opacity: 0.6;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=60);
+  filter: alpha(opacity=60);
+}
+.ring-container .ring-item .ring-item-placeholder:hover.closable .ring-item-cross {
+  display: block;
+}
+.ring-container .ring-item .ring-item-placeholder img {
+  width: 70px;
+  height: 70px;
+  -webkit-border-radius: 35px;
+  border-radius: 35px;
+}
+.ring-container .ring-item .ring-item-placeholder .ring-item-cross {
+  display: none;
+  padding: 2px 5px;
+  text-align: center;
+  position: absolute;
+  right: -4px;
+  top: -16px;
+  color: #aaa;
+  font-weight: bold;
+  font-size: 14px;
+}
+.ring-container .ring-item .ring-item-placeholder .ring-item-cross:hover {
+  cursor: pointer;
+  color: #535353;
+}
+.ring-container .ring-item .ring-item-container {
+  text-align: center;
+  margin-top: 76px;
+  height: 35px;
+  line-height: 35px;
+}
+.ring-container .ring-item .ring-item-shadow {
+  position: absolute;
+  left: 5px;
+  top: 7px;
+  z-index: 0;
+  width: 54px;
+  height: 54px;
+  -webkit-box-shadow: 14px 15px 6px rgba(0,0,0,0.7);
+  box-shadow: 14px 15px 6px rgba(0,0,0,0.7);
+  -webkit-border-radius: 27px;
+  border-radius: 27px;
+}
+.create-ring,
+.create-quick {
+  width: 400px;
+  margin: 0 auto;
+}
+.create-quick {
+  height: 320px;
+}
+.create-quick .quick-create {
+  margin: 0 auto;
+}
+.create-ring {
+  margin-top: 50px;
+  height: 130px;
+}
+.create-ring .ring-container .ring-item-placeholder {
+  text-align: center;
+}
+.create-ring .ring-container .ring-item-placeholder i {
+  height: 70px;
+  -webkit-border-radius: 35px;
+  border-radius: 35px;
+  line-height: 70px;
+  display: block;
+  font-size: 32px;
+  color: #fff;
+}
+.create-ring .ring-container .ring-item-placeholder i:before {
+  width: auto;
+  margin: 0;
+}
+.create-ring .ring-container .ring-item-placeholder i.icon-googleplus-rect {
+  background-color: #d44937;
+}
+.create-ring .ring-container .ring-item-placeholder i.icon-facebook {
+  background-color: #6479ac;
+}
+.create-ring .ring-container .ring-item-placeholder i.icon-twitter-bird {
+  background-color: #3bbdf0;
+}
+.create-ring .ring-container .ring-item-placeholder .share-options-friend,
+.create-ring .ring-container .ring-item-placeholder .share-options-net {
+  position: absolute;
+  top: 0;
+  width: 74px;
+  height: 74px;
+  line-height: 16px;
+  text-transform: uppercase;
+  padding: 22px 0px;
+  text-align: center;
+  font-size: 12px;
+  display: none;
+}
+.create-ring .ring-container .ring-item-placeholder .share-options-net {
+  line-height: 32px;
+}
+.create-ring .ring-container .ring-item-placeholder:hover i {
+  opacity: 0.2;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=20);
+  filter: alpha(opacity=20);
+}
+.create-ring .ring-container .ring-item-placeholder:hover .share-options-friend,
+.create-ring .ring-container .ring-item-placeholder:hover .share-options-net {
+  display: block;
+}
+.status-icon {
+  display: inline-block;
+  width: 12px;
+  height: 12px;
+  -webkit-transition: background 200ms ease-out;
+  -moz-transition: background 200ms ease-out;
+  -o-transition: background 200ms ease-out;
+  -ms-transition: background 200ms ease-out;
+  transition: background 200ms ease-out;
+  position: relative;
+  vertical-align: middle;
+}
+.status-icon:after,
+.status-icon:before {
+  content: ' ';
+  -webkit-transition: background 200ms ease-out;
+  -moz-transition: background 200ms ease-out;
+  -o-transition: background 200ms ease-out;
+  -ms-transition: background 200ms ease-out;
+  transition: background 200ms ease-out;
+  display: inline-block;
+  height: 6px;
+  width: 6px;
+  position: absolute;
+}
+.status-icon:after {
+  bottom: 0;
+  right: 0;
+}
+.status-icon:before {
+  top: 0;
+  left: 0;
+}
+.status-icon.offline {
+  background: #d5d5d5;
+}
+.status-icon.offline:after,
+.status-icon.offline:before {
+  background: #9f9f9f;
+}
+.status-icon.online {
+  background: #c5db8b;
+}
+.status-icon.online:after,
+.status-icon.online:before {
+  background: #8aa34a;
+}
+.connections-list p.none {
+  display: none;
+  padding: 10px;
+  text-align: center;
+}
+.connections-list ul {
+  margin: 0;
+  padding: 0;
+}
+.connections-list ul li {
+  list-style-type: none;
+  text-align: left;
+  padding: 10px;
+  border: 1px solid #cdcdcd;
+  border-top-width: 0;
+  border-bottom-color: #eee;
+  background: #fff;
+  font-size: 13px;
+  line-height: 20px;
+  vertical-align: middle;
+}
+.connections-list ul li:first-child {
+  -webkit-border-top-left-radius: 3px;
+  border-top-left-radius: 3px;
+  -webkit-border-top-right-radius: 3px;
+  border-top-right-radius: 3px;
+  border-top-width: 1px;
+  border-top-color: #cdcdcd;
+}
+.connections-list ul li:last-child {
+  -webkit-border-bottom-left-radius: 3px;
+  border-bottom-left-radius: 3px;
+  -webkit-border-bottom-right-radius: 3px;
+  border-bottom-right-radius: 3px;
+  border-bottom-color: #cdcdcd;
+}
+.connections-list ul span.status-icon {
+  float: right;
+  position: relative;
+  top: 4px;
+}
+.connections-list ul img {
+  width: 20px;
+  float: left;
+  -webkit-border-radius: 10px;
+  border-radius: 10px;
+  margin-right: 10px;
+}
+.connections-list[count="0"] p.none {
+  display: block;
+}
+#dashboard {
+  width: 980px;
+  margin: auto;
+  overflow: hidden;
+}
+#connections-list {
+  width: 240px;
+  float: left;
+}
+#my-items {
+  width: 701px;
+  float: right;
+}
+#dev {
+  position: fixed;
+  bottom: 10px;
+  right: 0;
+  background: rgba(0,0,0,0.5);
+  -webkit-border-top-left-radius: 5px;
+  border-top-left-radius: 5px;
+  -webkit-border-bottom-left-radius: 5px;
+  border-bottom-left-radius: 5px;
+  padding: 8px 10px;
+  -webkit-transform: translateX(250px);
+  -moz-transform: translateX(250px);
+  -o-transform: translateX(250px);
+  -ms-transform: translateX(250px);
+  transform: translateX(250px);
+  -webkit-transition: -webkit-transform 300ms;
+  -moz-transition: -webkit-transform 300ms;
+  -o-transition: -webkit-transform 300ms;
+  -ms-transition: -webkit-transform 300ms;
+  transition: -webkit-transform 300ms;
+  color: #fff;
+  -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.4);
+  box-shadow: inset 0 0 5px rgba(0,0,0,0.4);
+  font-family: "Helvetica Neue", Helvetica;
+}
+#dev.show,
+#dev:hover {
+  -webkit-transform: translateX(0);
+  -moz-transform: translateX(0);
+  -o-transform: translateX(0);
+  -ms-transform: translateX(0);
+  transform: translateX(0);
+}
+#open-dev {
+  display: block;
+  position: relative;
+  left: -8px;
+  top: 8px;
+  height: 100%;
+  float: left;
+  -webkit-transform: rotate(90deg);
+  -moz-transform: rotate(90deg);
+  -o-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+#dev a {
+  color: #fff;
+  text-decoration: none;
+  font-size: 12px;
+  font-weight: normal;
+}
+#dev ul {
+  float: right;
+  margin: 0;
+  padding: 0;
+}
+#dev ul li {
+  margin: 0 8px;
+  padding: 0;
+  list-style: none;
+  display: inline-block;
+}
+#dev ul li input {
+  margin: 0;
+  font-size: 12px;
+  background: rgba(0,0,0,0.2);
+  border: 1px solid #ddd;
+  -webkit-box-shadow: inset 0 0 5px #000;
+  box-shadow: inset 0 0 5px #000;
+  border: none !important;
+  -webkit-border-radius: 6px;
+  border-radius: 6px;
+  color: #fff;
+}
+ at font-face {
+  font-family: 'icons';
+  src: url("/icons/font/icons.eot");
+  src: url("/icons/font/icons.eot?#iefix") format('embedded-opentype'), url("/icons/font/icons.woff") format('woff'), url("/icons/font/icons.ttf") format('truetype'), url("/icons/font/icons.svg#icons") format('svg');
+  font-weight: normal;
+  font-style: normal;
+}
+i.icon,
+[class^="icon-"]:before,
+[class*=" icon-"]:before {
+  font-family: 'icons';
+  font-style: normal;
+  font-weight: normal;
+  speak: none;
+  display: inline-block;
+  text-decoration: inherit;
+  width: 1em;
+  margin-right: 0.2em;
+  text-align: center;
+  cursor: default;
+  line-height: 1em;
+}
+ at charset "UTF-8";
+
+
+.icon-plus:before { content: '\2b'; } /* '+' */
+.icon-minus:before { content: '\2d'; } /* '-' */
+.icon-keyboard:before { content: '\2328'; } /* '⌨' */
+.icon-hourglass:before { content: '\23f3'; } /* '⏳' */
+.icon-cloud:before { content: '\2601'; } /* '☁' */
+.icon-star:before { content: '\2605'; } /* '★' */
+.icon-star-empty:before { content: '\2606'; } /* '☆' */
+.icon-th-list:before { content: '\2630'; } /* '☰' */
+.icon-moon:before { content: '\263d'; } /* '☽' */
+.icon-heart-empty:before { content: '\2661'; } /* '♡' */
+.icon-heart:before { content: '\2665'; } /* '♥' */
+.icon-music:before { content: '\266a'; } /* '♪' */
+.icon-th-1-1:before { content: '\e802'; } /* '' */
+.icon-cog-1-1-1-1-1:before { content: '\e800'; } /* '' */
+.icon-cog:before { content: '\2699'; } /* '⚙' */
+.icon-attention:before { content: '\26a0'; } /* '⚠' */
+.icon-flash:before { content: '\26a1'; } /* '⚡' */
+.icon-mail:before { content: '\2709'; } /* '✉' */
+.icon-pencil:before { content: '\270e'; } /* '✎' */
+.icon-ok:before { content: '\2713'; } /* '✓' */
+.icon-cancel:before { content: '\2715'; } /* '✕' */
+.icon-help:before { content: '\2753'; } /* '❓' */
+.icon-quote-left-alt:before { content: '\275b'; } /* '❛' */
+.icon-quote-right-alt:before { content: '\275c'; } /* '❜' */
+.icon-plus-circle:before { content: '\2795'; } /* '➕' */
+.icon-minus-circle:before { content: '\2796'; } /* '➖' */
+.icon-direction:before { content: '\27a2'; } /* '➢' */
+.icon-up-thin:before { content: '\2b06'; } /* '⬆' */
+.icon-down-thin:before { content: '\2b07'; } /* '⬇' */
+.icon-resize-vertical:before { content: '\2b0c'; } /* '⬌' */
+.icon-resize-horizontal:before { content: '\2b0d'; } /* '⬍' */
+.icon-user-add:before { content: '\e700'; } /* '' */
+.icon-help-circle:before { content: '\e704'; } /* '' */
+.icon-info-circle:before { content: '\e705'; } /* '' */
+.icon-print:before { content: '\e716'; } /* '' */
+.icon-comment:before { content: '\e718'; } /* '' */
+.icon-chat:before { content: '\e720'; } /* '' */
+.icon-location:before { content: '\e724'; } /* '' */
+.icon-doc:before { content: '\e730'; } /* '' */
+.icon-docs:before { content: '\e736'; } /* '' */
+.icon-resize-full:before { content: '\e744'; } /* '' */
+.icon-resize-small:before { content: '\e746'; } /* '' */
+.icon-down-circle2:before { content: '\e758'; } /* '' */
+.icon-left-circle2:before { content: '\e759'; } /* '' */
+.icon-right-circle2:before { content: '\e75a'; } /* '' */
+.icon-up-circle2:before { content: '\e75b'; } /* '' */
+.icon-down-open:before { content: '\e75c'; } /* '' */
+.icon-left-open:before { content: '\e75d'; } /* '' */
+.icon-right-open:before { content: '\e75e'; } /* '' */
+.icon-up-open:before { content: '\e75f'; } /* '' */
+.icon-back-in-time:before { content: '\e771'; } /* '' */
+.icon-bag:before { content: '\e78a'; } /* '' */
+.icon-dot-3:before { content: '\e78d'; } /* '' */
+.icon-move:before { content: '\f047'; } /* '' */
+.icon-facebook:before { content: '\f300'; } /* '' */
+.icon-twitter-bird:before { content: '\f303'; } /* '' */
+.icon-github:before { content: '\f308'; } /* '' */
+.icon-googleplus-rect:before { content: '\f309'; } /* '' */
+.icon-mic:before { content: '\1f3a4'; } /* '\1f3a4' */
+.icon-user:before { content: '\1f464'; } /* '\1f464' */
+.icon-users:before { content: '\1f465'; } /* '\1f465' */
+.icon-monitor:before { content: '\1f4bb'; } /* '\1f4bb' */
+.icon-folder-open:before { content: '\1f4c2'; } /* '\1f4c2' */
+.icon-attach:before { content: '\1f4ce'; } /* '\1f4ce' */
+.icon-mobile:before { content: '\1f4f1'; } /* '\1f4f1' */
+.icon-camera:before { content: '\1f4f7'; } /* '\1f4f7' */
+.icon-light-up:before { content: '\1f506'; } /* '\1f506' */
+.icon-search:before { content: '\1f50d'; } /* '\1f50d' */
+.icon-lock:before { content: '\1f512'; } /* '\1f512' */
+.icon-lock-open:before { content: '\1f513'; } /* '\1f513' */
+.icon-link:before { content: '\1f517'; } /* '\1f517' */
+.icon-clock:before { content: '\1f554'; } /* '\1f554' */
+.button,
+button,
+input[type=submit],
+input[type=button],
+.buttonset input[type=radio] ~ label,
+.buttonset input[type=checkbox] ~ label {
+  display: inline-block;
+  color: #fff;
+  letter-spacing: 1px;
+  -webkit-border-radius: 2px;
+  border-radius: 2px;
+  background-color: #1f7dca;
+  border-bottom: 1px solid #1c70b6;
+  border-right: none;
+  border-left: none;
+  border-top: none;
+  font: normal 12px "proxima-nova", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+  outline: none;
+  height: 36px;
+  line-height: 36px;
+  padding: 0 20px;
+  vertical-align: top;
+  text-shadow: none;
+  -webkit-font-smoothing: subpixel-antialiased;
+}
+.button:hover,
+button:hover,
+input[type=submit]:hover,
+input[type=button]:hover,
+.buttonset input[type=radio] ~ label:hover,
+.buttonset input[type=checkbox] ~ label:hover,
+.button.hover,
+button.hover,
+input[type=submit].hover,
+input[type=button].hover,
+.buttonset input[type=radio] ~ label.hover,
+.buttonset input[type=checkbox] ~ label.hover {
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #1d73ba), color-stop(1, #1f7dca));
+  background: -webkit-linear-gradient(top, #1d73ba 0%, #1f7dca 100%);
+  background: -moz-linear-gradient(top, #1d73ba 0%, #1f7dca 100%);
+  background: -o-linear-gradient(top, #1d73ba 0%, #1f7dca 100%);
+  background: -ms-linear-gradient(top, #1d73ba 0%, #1f7dca 100%);
+  background: linear-gradient(top, #1d73ba 0%, #1f7dca 100%);
+}
+.button:active,
+button:active,
+input[type=submit]:active,
+input[type=button]:active,
+.buttonset input[type=radio] ~ label:active,
+.buttonset input[type=checkbox] ~ label:active,
+.button.active,
+button.active,
+input[type=submit].active,
+input[type=button].active,
+.buttonset input[type=radio] ~ label.active,
+.buttonset input[type=checkbox] ~ label.active {
+  -webkit-box-shadow: inset 0 0 3px #103e65;
+  box-shadow: inset 0 0 3px #103e65;
+}
+.button:focus,
+button:focus,
+input[type=submit]:focus,
+input[type=button]:focus,
+.buttonset input[type=radio] ~ label:focus,
+.buttonset input[type=checkbox] ~ label:focus {
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #3f98e2), color-stop(1, #1f7dca));
+  background: -webkit-linear-gradient(top, #3f98e2 0%, #1f7dca 100%);
+  background: -moz-linear-gradient(top, #3f98e2 0%, #1f7dca 100%);
+  background: -o-linear-gradient(top, #3f98e2 0%, #1f7dca 100%);
+  background: -ms-linear-gradient(top, #3f98e2 0%, #1f7dca 100%);
+  background: linear-gradient(top, #3f98e2 0%, #1f7dca 100%);
+  -webkit-box-shadow: 0 0 5px #c3dff6;
+  box-shadow: 0 0 5px #c3dff6;
+}
+.button[disabled],
+button[disabled],
+input[type=submit][disabled],
+input[type=button][disabled],
+.buttonset input[type=radio] ~ label[disabled],
+.buttonset input[type=checkbox] ~ label[disabled] {
+  background: #cdcdcd;
+  color: #f2f2f2;
+  border-bottom: 1px solid #b8b8b8;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  text-shadow: 0 1px 0 #999;
+  cursor: wait;
+}
+.button[disabled]:hover,
+button[disabled]:hover,
+input[type=submit][disabled]:hover,
+input[type=button][disabled]:hover,
+.buttonset input[type=radio] ~ label[disabled]:hover,
+.buttonset input[type=checkbox] ~ label[disabled]:hover,
+.button[disabled].hover,
+button[disabled].hover,
+input[type=submit][disabled].hover,
+input[type=button][disabled].hover,
+.buttonset input[type=radio] ~ label[disabled].hover,
+.buttonset input[type=checkbox] ~ label[disabled].hover {
+  background: #cdcdcd;
+  color: #f2f2f2;
+  border-bottom: 1px solid #b8b8b8;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  text-shadow: 0 1px 0 #999;
+  cursor: wait;
+}
+.button.small,
+button.small,
+input[type=submit].small,
+input[type=button].small,
+.buttonset input[type=radio] ~ label.small,
+.buttonset input[type=checkbox] ~ label.small {
+  padding: 5px 10px;
+  font-size: 10px;
+  height: 26px;
+  line-height: 18px;
+  text-transform: uppercase;
+  font-weight: 600;
+}
+.button.gray,
+button.gray,
+input[type=submit].gray,
+input[type=button].gray,
+.buttonset input[type=radio] ~ label.gray,
+.buttonset input[type=checkbox] ~ label.gray,
+.buttonset input[type=radio] ~ label,
+.buttonset input[type=checkbox] ~ label {
+  background-color: #e6e6e6;
+  border-bottom: 1px solid #cfcfcf;
+  color: #1f7dca;
+}
+.button.gray:hover,
+button.gray:hover,
+input[type=submit].gray:hover,
+input[type=button].gray:hover,
+.buttonset input[type=radio] ~ label.gray:hover,
+.buttonset input[type=checkbox] ~ label.gray:hover,
+.buttonset input[type=radio] ~ label,
+.buttonset input[type=checkbox] ~ label,
+.button.gray.hover,
+button.gray.hover,
+input[type=submit].gray.hover,
+input[type=button].gray.hover,
+.buttonset input[type=radio] ~ label.gray.hover,
+.buttonset input[type=checkbox] ~ label.gray.hover,
+.buttonset input[type=radio] ~ label,
+.buttonset input[type=checkbox] ~ label,
+.buttonset input[type=radio] ~ label:hover,
+.buttonset input[type=checkbox] ~ label:hover {
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #d4d4d4), color-stop(1, #e6e6e6));
+  background: -webkit-linear-gradient(top, #d4d4d4 0%, #e6e6e6 100%);
+  background: -moz-linear-gradient(top, #d4d4d4 0%, #e6e6e6 100%);
+  background: -o-linear-gradient(top, #d4d4d4 0%, #e6e6e6 100%);
+  background: -ms-linear-gradient(top, #d4d4d4 0%, #e6e6e6 100%);
+  background: linear-gradient(top, #d4d4d4 0%, #e6e6e6 100%);
+}
+.button.gray:active,
+button.gray:active,
+input[type=submit].gray:active,
+input[type=button].gray:active,
+.buttonset input[type=radio] ~ label.gray:active,
+.buttonset input[type=checkbox] ~ label.gray:active,
+.buttonset input[type=radio] ~ label,
+.buttonset input[type=checkbox] ~ label,
+.button.gray.active,
+button.gray.active,
+input[type=submit].gray.active,
+input[type=button].gray.active,
+.buttonset input[type=radio] ~ label.gray.active,
+.buttonset input[type=checkbox] ~ label.gray.active,
+.buttonset input[type=radio] ~ label,
+.buttonset input[type=checkbox] ~ label {
+  -webkit-box-shadow: inset 0 0 3px #737373;
+  box-shadow: inset 0 0 3px #737373;
+}
+.button.gray:focus,
+button.gray:focus,
+input[type=submit].gray:focus,
+input[type=button].gray:focus,
+.buttonset input[type=radio] ~ label.gray:focus,
+.buttonset input[type=checkbox] ~ label.gray:focus,
+.buttonset input[type=radio] ~ label,
+.buttonset input[type=checkbox] ~ label {
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #ebebeb), color-stop(1, #e6e6e6));
+  background: -webkit-linear-gradient(top, #ebebeb 0%, #e6e6e6 100%);
+  background: -moz-linear-gradient(top, #ebebeb 0%, #e6e6e6 100%);
+  background: -o-linear-gradient(top, #ebebeb 0%, #e6e6e6 100%);
+  background: -ms-linear-gradient(top, #ebebeb 0%, #e6e6e6 100%);
+  background: linear-gradient(top, #ebebeb 0%, #e6e6e6 100%);
+  -webkit-box-shadow: 0 0 5px #f9f9f9;
+  box-shadow: 0 0 5px #f9f9f9;
+}
+.button.green,
+button.green,
+input[type=submit].green,
+input[type=button].green,
+.buttonset input[type=radio] ~ label.green,
+.buttonset input[type=checkbox] ~ label.green {
+  background-color: #73ca4b;
+  border-bottom: 1px solid #64c139;
+}
+.button.green:hover,
+button.green:hover,
+input[type=submit].green:hover,
+input[type=button].green:hover,
+.buttonset input[type=radio] ~ label.green:hover,
+.buttonset input[type=checkbox] ~ label.green:hover,
+.button.green.hover,
+button.green.hover,
+input[type=submit].green.hover,
+input[type=button].green.hover,
+.buttonset input[type=radio] ~ label.green.hover,
+.buttonset input[type=checkbox] ~ label.green.hover {
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #66c53a), color-stop(1, #73ca4b));
+  background: -webkit-linear-gradient(top, #66c53a 0%, #73ca4b 100%);
+  background: -moz-linear-gradient(top, #66c53a 0%, #73ca4b 100%);
+  background: -o-linear-gradient(top, #66c53a 0%, #73ca4b 100%);
+  background: -ms-linear-gradient(top, #66c53a 0%, #73ca4b 100%);
+  background: linear-gradient(top, #66c53a 0%, #73ca4b 100%);
+}
+.button.green:active,
+button.green:active,
+input[type=submit].green:active,
+input[type=button].green:active,
+.buttonset input[type=radio] ~ label.green:active,
+.buttonset input[type=checkbox] ~ label.green:active,
+.button.green.active,
+button.green.active,
+input[type=submit].green.active,
+input[type=button].green.active,
+.buttonset input[type=radio] ~ label.green.active,
+.buttonset input[type=checkbox] ~ label.green.active {
+  -webkit-box-shadow: inset 0 0 3px #376b20;
+  box-shadow: inset 0 0 3px #376b20;
+}
+.button.green:focus,
+button.green:focus,
+input[type=submit].green:focus,
+input[type=button].green:focus,
+.buttonset input[type=radio] ~ label.green:focus,
+.buttonset input[type=checkbox] ~ label.green:focus {
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #8fd56f), color-stop(1, #73ca4b));
+  background: -webkit-linear-gradient(top, #8fd56f 0%, #73ca4b 100%);
+  background: -moz-linear-gradient(top, #8fd56f 0%, #73ca4b 100%);
+  background: -o-linear-gradient(top, #8fd56f 0%, #73ca4b 100%);
+  background: -ms-linear-gradient(top, #8fd56f 0%, #73ca4b 100%);
+  background: linear-gradient(top, #8fd56f 0%, #73ca4b 100%);
+  -webkit-box-shadow: 0 0 5px #dcf2d2;
+  box-shadow: 0 0 5px #dcf2d2;
+}
+.button.twitter,
+button.twitter,
+input[type=submit].twitter,
+input[type=button].twitter,
+.buttonset input[type=radio] ~ label.twitter,
+.buttonset input[type=checkbox] ~ label.twitter {
+  background-color: #65d6f2;
+  border-bottom: 1px solid #45ceef;
+}
+.button.twitter:hover,
+button.twitter:hover,
+input[type=submit].twitter:hover,
+input[type=button].twitter:hover,
+.buttonset input[type=radio] ~ label.twitter:hover,
+.buttonset input[type=checkbox] ~ label.twitter:hover,
+.button.twitter.hover,
+button.twitter.hover,
+input[type=submit].twitter.hover,
+input[type=button].twitter.hover,
+.buttonset input[type=radio] ~ label.twitter.hover,
+.buttonset input[type=checkbox] ~ label.twitter.hover {
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #4ccff0), color-stop(1, #65d6f2));
+  background: -webkit-linear-gradient(top, #4ccff0 0%, #65d6f2 100%);
+  background: -moz-linear-gradient(top, #4ccff0 0%, #65d6f2 100%);
+  background: -o-linear-gradient(top, #4ccff0 0%, #65d6f2 100%);
+  background: -ms-linear-gradient(top, #4ccff0 0%, #65d6f2 100%);
+  background: linear-gradient(top, #4ccff0 0%, #65d6f2 100%);
+}
+.button.twitter:active,
+button.twitter:active,
+input[type=submit].twitter:active,
+input[type=button].twitter:active,
+.buttonset input[type=radio] ~ label.twitter:active,
+.buttonset input[type=checkbox] ~ label.twitter:active,
+.button.twitter.active,
+button.twitter.active,
+input[type=submit].twitter.active,
+input[type=button].twitter.active,
+.buttonset input[type=radio] ~ label.twitter.active,
+.buttonset input[type=checkbox] ~ label.twitter.active {
+  -webkit-box-shadow: inset 0 0 3px #0d819e;
+  box-shadow: inset 0 0 3px #0d819e;
+}
+.button.twitter:focus,
+button.twitter:focus,
+input[type=submit].twitter:focus,
+input[type=button].twitter:focus,
+.buttonset input[type=radio] ~ label.twitter:focus,
+.buttonset input[type=checkbox] ~ label.twitter:focus {
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #84def5), color-stop(1, #65d6f2));
+  background: -webkit-linear-gradient(top, #84def5 0%, #65d6f2 100%);
+  background: -moz-linear-gradient(top, #84def5 0%, #65d6f2 100%);
+  background: -o-linear-gradient(top, #84def5 0%, #65d6f2 100%);
+  background: -ms-linear-gradient(top, #84def5 0%, #65d6f2 100%);
+  background: linear-gradient(top, #84def5 0%, #65d6f2 100%);
+  -webkit-box-shadow: 0 0 5px #d8f5fc;
+  box-shadow: 0 0 5px #d8f5fc;
+}
+.button.facebook,
+button.facebook,
+input[type=submit].facebook,
+input[type=button].facebook,
+.buttonset input[type=radio] ~ label.facebook,
+.buttonset input[type=checkbox] ~ label.facebook {
+  background-color: #3c5a98;
+  border-bottom: 1px solid #365189;
+}
+.button.facebook:hover,
+button.facebook:hover,
+input[type=submit].facebook:hover,
+input[type=button].facebook:hover,
+.buttonset input[type=radio] ~ label.facebook:hover,
+.buttonset input[type=checkbox] ~ label.facebook:hover,
+.button.facebook.hover,
+button.facebook.hover,
+input[type=submit].facebook.hover,
+input[type=button].facebook.hover,
+.buttonset input[type=radio] ~ label.facebook.hover,
+.buttonset input[type=checkbox] ~ label.facebook.hover {
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #37538c), color-stop(1, #3c5a98));
+  background: -webkit-linear-gradient(top, #37538c 0%, #3c5a98 100%);
+  background: -moz-linear-gradient(top, #37538c 0%, #3c5a98 100%);
+  background: -o-linear-gradient(top, #37538c 0%, #3c5a98 100%);
+  background: -ms-linear-gradient(top, #37538c 0%, #3c5a98 100%);
+  background: linear-gradient(top, #37538c 0%, #3c5a98 100%);
+}
+.button.facebook:active,
+button.facebook:active,
+input[type=submit].facebook:active,
+input[type=button].facebook:active,
+.buttonset input[type=radio] ~ label.facebook:active,
+.buttonset input[type=checkbox] ~ label.facebook:active,
+.button.facebook.active,
+button.facebook.active,
+input[type=submit].facebook.active,
+input[type=button].facebook.active,
+.buttonset input[type=radio] ~ label.facebook.active,
+.buttonset input[type=checkbox] ~ label.facebook.active {
+  -webkit-box-shadow: inset 0 0 3px #1e2d4c;
+  box-shadow: inset 0 0 3px #1e2d4c;
+}
+.button.facebook:focus,
+button.facebook:focus,
+input[type=submit].facebook:focus,
+input[type=button].facebook:focus,
+.buttonset input[type=radio] ~ label.facebook:focus,
+.buttonset input[type=checkbox] ~ label.facebook:focus {
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #5476bc), color-stop(1, #3c5a98));
+  background: -webkit-linear-gradient(top, #5476bc 0%, #3c5a98 100%);
+  background: -moz-linear-gradient(top, #5476bc 0%, #3c5a98 100%);
+  background: -o-linear-gradient(top, #5476bc 0%, #3c5a98 100%);
+  background: -ms-linear-gradient(top, #5476bc 0%, #3c5a98 100%);
+  background: linear-gradient(top, #5476bc 0%, #3c5a98 100%);
+  -webkit-box-shadow: 0 0 5px #cad4ea;
+  box-shadow: 0 0 5px #cad4ea;
+}
+.button.google,
+button.google,
+input[type=submit].google,
+input[type=button].google,
+.buttonset input[type=radio] ~ label.google,
+.buttonset input[type=checkbox] ~ label.google {
+  background-color: #fe9245;
+  border-bottom: 1px solid #fe7f25;
+}
+.button.google:hover,
+button.google:hover,
+input[type=submit].google:hover,
+input[type=button].google:hover,
+.buttonset input[type=radio] ~ label.google:hover,
+.buttonset input[type=checkbox] ~ label.google:hover,
+.button.google.hover,
+button.google.hover,
+input[type=submit].google.hover,
+input[type=button].google.hover,
+.buttonset input[type=radio] ~ label.google.hover,
+.buttonset input[type=checkbox] ~ label.google.hover {
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fe832b), color-stop(1, #fe9245));
+  background: -webkit-linear-gradient(top, #fe832b 0%, #fe9245 100%);
+  background: -moz-linear-gradient(top, #fe832b 0%, #fe9245 100%);
+  background: -o-linear-gradient(top, #fe832b 0%, #fe9245 100%);
+  background: -ms-linear-gradient(top, #fe832b 0%, #fe9245 100%);
+  background: linear-gradient(top, #fe832b 0%, #fe9245 100%);
+}
+.button.google:active,
+button.google:active,
+input[type=submit].google:active,
+input[type=button].google:active,
+.buttonset input[type=radio] ~ label.google:active,
+.buttonset input[type=checkbox] ~ label.google:active,
+.button.google.active,
+button.google.active,
+input[type=submit].google.active,
+input[type=button].google.active,
+.buttonset input[type=radio] ~ label.google.active,
+.buttonset input[type=checkbox] ~ label.google.active {
+  -webkit-box-shadow: inset 0 0 3px #a14301;
+  box-shadow: inset 0 0 3px #a14301;
+}
+.button.google:focus,
+button.google:focus,
+input[type=submit].google:focus,
+input[type=button].google:focus,
+.buttonset input[type=radio] ~ label.google:focus,
+.buttonset input[type=checkbox] ~ label.google:focus {
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fea86a), color-stop(1, #fe9245));
+  background: -webkit-linear-gradient(top, #fea86a 0%, #fe9245 100%);
+  background: -moz-linear-gradient(top, #fea86a 0%, #fe9245 100%);
+  background: -o-linear-gradient(top, #fea86a 0%, #fe9245 100%);
+  background: -ms-linear-gradient(top, #fea86a 0%, #fe9245 100%);
+  background: linear-gradient(top, #fea86a 0%, #fe9245 100%);
+  -webkit-box-shadow: 0 0 5px #ffe4d1;
+  box-shadow: 0 0 5px #ffe4d1;
+}
+.buttonset input[type=radio],
+.buttonset input[type=checkbox] {
+  display: none;
+}
+.buttonset input[type=radio] ~ label,
+.buttonset input[type=checkbox] ~ label {
+  -webkit-border-radius: 0px;
+  border-radius: 0px;
+  -webkit-box-shadow: 1px 0 0px rgba(255,255,255,0.5) inset;
+  box-shadow: 1px 0 0px rgba(255,255,255,0.5) inset;
+  border-right: 1px solid rgba(0,0,0,0.08);
+}
+.buttonset input[type=radio] ~ label:nth-child(2),
+.buttonset input[type=checkbox] ~ label:nth-child(2) {
+  -webkit-border-radius: 2px 0 0 2px;
+  border-radius: 2px 0 0 2px;
+}
+.buttonset input[type=radio] ~ label:last-child,
+.buttonset input[type=checkbox] ~ label:last-child {
+  -webkit-border-radius: 0px 2px 2px 0;
+  border-radius: 0px 2px 2px 0;
+  border-right-color: rgba(0,0,0,0.05);
+}
+.buttonset input[type=radio]:checked + label,
+.buttonset input[type=checkbox]:checked + label {
+  -webkit-box-shadow: -1px 0 1px rgba(255,255,255,0.8), 0 0 50px rgba(0,0,0,0.03) inset, 0 0 20px rgba(0,0,0,0.05) inset, 0 2px 3px rgba(0,0,0,0.08) inset;
+  box-shadow: -1px 0 1px rgba(255,255,255,0.8), 0 0 50px rgba(0,0,0,0.03) inset, 0 0 20px rgba(0,0,0,0.05) inset, 0 2px 3px rgba(0,0,0,0.08) inset;
+  border-right-color: rgba(0,0,0,0.15);
+}
+.buttonset input[type=radio]:checked + label + label,
+.buttonset input[type=checkbox]:checked + label + label {
+  padding: 100px;
+}
+.popover .tip-inner {
+  -webkit-border-radius: 5px;
+  border-radius: 5px;
+  background-color: rgba(0,0,0,0.4);
+  border: none;
+  padding: 3px;
+}
+.popover .tip-inner .popover-wrapper {
+  -webkit-border-radius: 3px;
+  border-radius: 3px;
+  background-color: #fff;
+}
+.popover .tip-inner .popover-wrapper .popover-title {
+  font-size: 14px;
+  padding: 17px 17px 0;
+  color: #535353;
+}
+.popover .tip-inner .popover-wrapper .popover-content {
+  padding: 5px 17px 17px 17px;
+  text-align: left;
+  color: #666;
+}
+.popover .tip-inner .popover-wrapper .popover-content p,
+.popover .tip-inner .popover-wrapper .popover-content ul {
+  font-size: 13px;
+  line-height: 16px;
+  margin: 5px 0;
+}
+.popover .tip-inner .popover-wrapper .popover-content .popover-buttons {
+  margin: 20px -17px -17px;
+  padding: 5px 10px;
+  border-top: 1px solid #c9c9c9;
+  background-color: #eee;
+  text-align: right;
+  border-bottom-left-radius: 3px;
+  border-bottom-right-radius: 3px;
+}
+.table-list table {
+  margin: 0;
+}
+.table-list table thead tr:hover {
+  background-color: inherit;
+}
+.table-list table thead tr th,
+.table-list table thead tr th div {
+  -webkit-font-smoothing: antialiased;
+}
+.table-list table thead tr th,
+.table-list table thead tr td {
+  font-weight: 600;
+  padding-top: 0;
+  padding-bottom: 0;
+  height: 34px;
+  line-height: 34px;
+  position: relative;
+}
+.table-list table thead tr th.sorter,
+.table-list table thead tr td.sorter {
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  cursor: pointer;
+}
+.table-list table thead tr th.sorter div:after,
+.table-list table thead tr td.sorter div:after {
+  position: absolute;
+  margin-left: 6px;
+  margin-top: 1px;
+  content: "\2B06";
+  font-size: 9px;
+  color: transparent;
+}
+.table-list table thead tr th.sorter.sorted-asc div:after,
+.table-list table thead tr td.sorter.sorted-asc div:after {
+  content: "\2B06";
+  font-size: 9px;
+  color: #fff;
+}
+.table-list table thead tr th.sorter.sorted-desc div:after,
+.table-list table thead tr td.sorter.sorted-desc div:after {
+  content: "\2B07";
+  font-size: 9px;
+  color: #fff;
+}
+.table-list table tbody tr {
+  border-bottom: 1px solid #dcdcdc;
+  border-top: 0;
+  background-color: #fbfbfb;
+}
+.table-list table tbody tr td,
+.table-list table tbody tr th {
+  padding: 0;
+  height: 53px;
+  line-height: 53px;
+  font-weight: 600;
+  color: #333;
+  -webkit-box-shadow: 0 2px 0 #fff inset;
+  box-shadow: 0 2px 0 #fff inset;
+  font-size: 14px;
+}
+.table-list table tbody tr td a,
+.table-list table tbody tr th a {
+  font-weight: 600;
+  color: #333;
+}
+.table-list table tbody tr td a:hover,
+.table-list table tbody tr th a:hover {
+  text-decoration: underline;
+}
+.table-list table tbody tr td:hover,
+.table-list table tbody tr th:hover {
+  cursor: pointer;
+}
+.table-list table tbody tr:hover {
+  background: #f0f0f0;
+}
+.table-list table tbody tr:active,
+.table-list table tbody tr.current-row {
+  background: #f0f0f0 !important;
+}
+.table-list table tbody tr:last-child {
+  border: 0;
+}
+.gui {
+  text-align: left;
+}
+.gui h1 {
+  text-align: center;
+}
+.gui h2 {
+  color: $grey;
+  text-align: center;
+  text-shadow: 0 1px #fff;
+}
+.gui .box {
+  width: 540px;
+  padding: 20px;
+  border: 1px solid rgba(0,0,0,0.1);
+  background-color: #fff;
+  margin: 10px auto 80px;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+.gui .edit-row {
+  background-color: #f0f0f0;
+  padding: 5px;
+}
+.gui .edit-row input {
+  padding: 4px;
+  margin-right: 10px;
+  display: inline-block;
+}
+.gui .edit-row label {
+  display: inline-block;
+  width: 50px;
+  margin-left: -50px;
+  color: #999;
+  position: relative;
+  right: -174px;
+  text-align: right;
+}
+.gui .core-colors h2 {
+  font-weight: normal;
+  text-shadow: none;
+}
+.gui .core-colors .color-blue {
+  color: #1f7dca;
+}
+.gui .core-colors .color-gray {
+  color: #535353;
+}
+.gui .core-colors .color-red {
+  color: #c82c3c;
+}
+.gui .core-colors .color-purple {
+  color: #351b61;
+}
+.gui .core-colors .color-pink {
+  color: #cf004f;
+}
+.gui .core-colors .color-green {
+  color: #43b20d;
+}
+.gui .core-colors .color-light-gray {
+  color: #f2f2f2;
+  background-color: #bbb;
+}
+.gui .core-colors .color-mid-gray {
+  color: #cdcdcd;
+}
+.gui .core-colors .color-light-green {
+  color: #73d044;
+}
+.gui .core-colors .color-highlight {
+  color: #f0f0f0;
+  background-color: #bbb;
+}
+.gui .core-form {
+  padding-bottom: 65px;
+}
+.gui .core-form label {
+  margin-left: 15px;
+}
+.gui .core-form .buttons input,
+.gui .core-form .buttons button {
+  margin-left: 10px;
+}
+.gui button {
+  margin-right: 10px;
+}
+.gui .button {
+  margin-right: 10px;
+}
+.gui .button .icon-twitter-bird {
+  margin-right: 8px;
+}
+.gui .text-stroke-instance {
+  text-shadow: 1px 1px 1px #f00, -1px 1px 1px #f00, 1px -1px 1px #f00, -1px -1px 1px #f00, 1px 0 1px #f00, -1px 0 1px #f00, 0 1px 1px #f00, 0 -1px 1px #f00;
+}
+.gui .text-border-instance {
+  -webkit-text-stroke: 2px #f00;
+}
+.gui .text-border-instance::before {
+  position: absolute;
+  -webkit-text-stroke: 0px;
+  content: attr(data-text);
+  color: inherit;
+}
+.gui .buttonset {
+  padding: 10px 16px;
+}
+.gui .buttonset.icons-example label {
+  padding: 0px 5px;
+  width: 90px;
+  text-align: center;
+}
+.gui .buttonset.icons-example label:nth-child(2):before {
+  font-family: 'icons';
+  content: '\2630';
+  margin-right: 5px;
+}
+.gui .buttonset.icons-example label:nth-child(4):before {
+  font-family: 'icons';
+  content: '\e802';
+  margin-right: 5px;
+}
+.gui .menu-team {
+  background-color: #f0f0f0;
+  padding: 5px;
+}
+.gui #popover span {
+  background-color: #fff0f0;
+  color: #a00;
+  padding: 5px;
+  border: 1px solid rgba(255,100,100,0.1);
+}
+.gui #list {
+  background-color: #e9e9e9;
+}
+.gui #status-icon p {
+  font-size: 12px;
+}
+.gui #status-icon p span {
+  margin-left: 10px;
+}
+.gui #spinner .spinner-container {
+  width: 100px;
+  height: 100px;
+  padding: 5px;
+  background-color: #535353;
+  border: 1px solid #000;
+  color: #fff;
+  -webkit-border-radius: 5px;
+  border-radius: 5px;
+}
+.gui #ring {
+  text-align: left;
+  position: relative;
+}
+.gui #ring input {
+  padding: 4px;
+  margin-right: 10px;
+}
+.gui #ring input#ring-name {
+  width: 80px;
+}
+.gui #ring input#ring-img {
+  width: 250px;
+}
+.gui #ring-add {
+  background-color: #f0f0f0;
+  padding: 5px;
+  overflow: hidden;
+}
+.gui #ring-add button {
+  float: right;
+}
+.gui #ring-items ul {
+  list-style: none;
+  margin: 0;
+  padding: 0;
+}
+.gui #ring-items ul li {
+  background: #eee;
+  overflow: hidden;
+  padding: 3px;
+}
+.gui #ring-items ul li a {
+  float: right;
+  font-size: 11px;
+  display: inline-block;
+  padding: 3px 0;
+}
+.gui #ring-items ul li:nth-child(even) {
+  background: #fff;
+}
+.gui #ring-people {
+  padding-top: 40px;
+  width: 520px;
+  height: 300px;
+  background-color: #fff;
+}
+#message-input .mr-editor {
+  height: 150px;
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+#message-input .mr-editor #quick-create .quick-create {
+  margin: auto;
+}
+.my-items {
+  text-align: left;
+  margin: 0 auto;
+  font-size: 14px;
+  -webkit-font-smoothing: antialiased;
+  color: #535353;
+  -webkit-box-shadow: 0 0 0 1px rgba(255,255,255,0.3);
+  box-shadow: 0 0 0 1px rgba(255,255,255,0.3);
+}
+.my-items .my-items-header {
+  -webkit-border-radius: 3px 3px 0 0;
+  border-radius: 3px 3px 0 0;
+  border: 1px solid #cdcdcd;
+  border-bottom: 0;
+  -webkit-box-shadow: 0 0 1px #fff;
+  box-shadow: 0 0 1px #fff;
+  background-color: #f2f2f2;
+  height: 56px;
+}
+.my-items .my-items-header .title {
+  float: left;
+  width: 100px;
+  font-size: 14px;
+  color: #333;
+  font-weight: 700;
+  padding-left: 20px;
+  height: 55px;
+  line-height: 55px;
+  border: 0;
+}
+.my-items .my-items-header ul.items-menu {
+  float: right;
+  margin-top: 10px;
+  right: 10px;
+  height: 31px;
+  line-height: 31px;
+  list-style: none;
+  font-weight: 700;
+  font-size: 12px;
+}
+.my-items .my-items-header ul.items-menu li {
+  display: inline;
+  list-style: none;
+  float: right;
+  padding: 0 20px;
+}
+.my-items .my-items-header ul.items-menu li a {
+  font-weight: 700;
+  font-size: 12px;
+}
+.my-items .my-items-header ul.items-menu li .buttonset label {
+  padding: 0;
+  text-align: center;
+}
+.my-items .my-items-header ul.items-menu li .buttonset label a,
+.my-items .my-items-header ul.items-menu li .buttonset label span {
+  display: inline-block;
+  height: 36px;
+  padding: 0 18px;
+  font-weight: normal;
+}
+.my-items .my-items-header ul.items-menu li .buttonset label:nth-child(2) span:before,
+.my-items .my-items-header ul.items-menu li .buttonset label:nth-child(2) a:before {
+  font-family: 'icons';
+  content: '\e802';
+  margin-right: 5px;
+}
+.my-items .my-items-header ul.items-menu li .buttonset label:nth-child(4) span:before,
+.my-items .my-items-header ul.items-menu li .buttonset label:nth-child(4) a:before {
+  font-family: 'icons';
+  content: '\2630';
+  margin-right: 5px;
+}
+.my-items .table-list table thead tr th:nth-child(1) {
+  width: 275px;
+}
+.my-items .table-list table thead tr th:nth-child(1) div {
+  padding-left: 22px;
+}
+.my-items .table-list table thead tr th:nth-child(2) {
+  width: 110px;
+  padding-left: 0;
+}
+.my-items .table-list table thead tr th:nth-child(3) {
+  width: 150px;
+}
+.my-items .table-list table thead tr th:nth-child(3) div {
+  width: 125px;
+  padding-left: 22px;
+}
+.table-list table thead tr th.sorter.sorter-desc div:after {
+  content: "\2B07";
+  color: #fff;
+}
+.table-list table thead tr th.sorter.sorter-asc div:after {
+  content: "\2B06";
+  color: #fff;
+}
+.my-items .my-items-body {
+  -webkit-border-radius: 0 0 3px 3px;
+  border-radius: 0 0 3px 3px;
+  -webkit-box-shadow: 0 0 1px #fff;
+  box-shadow: 0 0 1px #fff;
+  background-color: #f2f2f2;
+}
+.my-items .dropdown-link {
+  padding: 0;
+  border: 0;
+  color: #fff;
+  font-weight: 600;
+  text-align: right;
+}
+.my-items .dropdown-link:after {
+  font-size: 11px;
+  position: initial;
+  content: attr(has-filter);
+  text-transform: capitalize;
+}
+.my-items[current-view=grid] .dropdown-link {
+  text-align: left;
+}
+ul.grid-dropdown {
+  width: 110px;
+  text-transform: capitalize;
+}
+.my-items .item-box.unread:before,
+.my-items table tbody tr.unread td:nth-child(4) div:before {
+  z-index: 100;
+  display: block;
+  width: 30px;
+  height: 30px;
+  right: -18px;
+  top: -18px;
+  position: absolute;
+  border: 1px solid #d8c600;
+  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, rgba(232,209,59,0.92)), color-stop(1, rgba(255,230,64,0.92)));
+  background: -webkit-linear-gradient(bottom, rgba(232,209,59,0.92) 0%, rgba(255,230,64,0.92) 100%);
+  background: -moz-linear-gradient(bottom, rgba(232,209,59,0.92) 0%, rgba(255,230,64,0.92) 100%);
+  background: -o-linear-gradient(bottom, rgba(232,209,59,0.92) 0%, rgba(255,230,64,0.92) 100%);
+  background: -ms-linear-gradient(bottom, rgba(232,209,59,0.92) 0%, rgba(255,230,64,0.92) 100%);
+  background: linear-gradient(bottom, rgba(232,209,59,0.92) 0%, rgba(255,230,64,0.92) 100%);
+  -webkit-transform: rotate(45deg);
+  -moz-transform: rotate(45deg);
+  -o-transform: rotate(45deg);
+  -ms-transform: rotate(45deg);
+  transform: rotate(45deg);
+  content: " ";
+}
+.my-items .item-box.unread:after,
+.my-items table tbody tr.unread td:nth-child(4) div:after {
+  z-index: 200;
+  position: absolute;
+  right: 0;
+  top: 0;
+  width: 15px;
+  height: 17px;
+  border-right: 1px solid #d8c600;
+  border-top: 1px solid #d8c600;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.7);
+  box-shadow: inset 0 1px 0 rgba(255,255,255,0.7);
+  content: " ";
+}
+.my-items .item-box .front:before {
+  top: -19px !important;
+}
+.my-items .item-box .front:after {
+  right: -1px !important;
+  top: -1px !important;
+}
+.my-items-body table tbody tr,
+.my-items-body table tbody tr:last-child,
+.my-items-body table tbody tr.current-row {
+  border: 1px solid #dcdcdc;
+}
+.my-items-body table tbody tr td span.row-actions {
+  float: right;
+}
+.my-items-body table tbody tr td span.row-actions a {
+  padding: 0 15px;
+  color: #1f7dca;
+}
+.my-items-body table tbody tr td span.row-actions a.delete {
+  color: #c82c3c;
+}
+.my-items-body table tbody tr td div {
+  padding-left: 22px;
+  white-space: nowrap;
+  overflow: hidden;
+  -o-text-overflow: ellipsis;
+  text-overflow: ellipsis;
+}
+.my-items-body table tbody tr td img {
+  display: block;
+}
+.my-items-body table tbody tr td:nth-child(1) {
+  width: 355px;
+}
+.my-items-body table tbody tr td:nth-child(1) div {
+  width: 330px;
+}
+.my-items-body table tbody tr td:nth-child(2) {
+  width: 40px;
+  padding: 0;
+}
+.my-items-body table tbody tr td:nth-child(3) {
+  width: 180px;
+  font-size: 12px;
+}
+.my-items-body table tbody tr td:nth-child(3) div {
+  width: 155px;
+}
+.my-items-body table tbody tr td:nth-child(4) div {
+  font-size: 12px;
+  position: relative;
+  left: 1px;
+  top: -1px;
+  overflow: hidden;
+}
+.my-items[current-view=grid] .my-items-body {
+  padding-left: 1px;
+}
+.items-grid-container {
+  zoom: 1;
+}
+.items-grid-container:before,
+.items-grid-container:after {
+  content: "";
+  display: table;
+}
+.items-grid-container:after {
+  clear: both;
+}
+.items-grid-container {
+  -webkit-box-shadow: 0 0 1px rgba(0,0,0,0.5) inset;
+  box-shadow: 0 0 1px rgba(0,0,0,0.5) inset;
+  padding: 0 0 1px;
+}
+.items-grid-container .item-box {
+  position: relative;
+  width: 175px;
+  height: 160px;
+  float: left;
+  overflow: hidden;
+}
+.items-grid-container .item-box:hover {
+  -webkit-transition-delay: 1s;
+  -moz-transition-delay: 1s;
+  -o-transition-delay: 1s;
+  -ms-transition-delay: 1s;
+  transition-delay: 1s;
+  z-index: 1000;
+  width: 174px;
+  margin-right: 1px;
+  -webkit-box-shadow: 1px 2px 3px rgba(0,0,0,0.3), -2px 0 1px rgba(0,0,0,0.1), 0 1px 2px rgba(0,0,0,0.2), 0 1px 1px rgba(0,0,0,0.2);
+  box-shadow: 1px 2px 3px rgba(0,0,0,0.3), -2px 0 1px rgba(0,0,0,0.1), 0 1px 2px rgba(0,0,0,0.2), 0 1px 1px rgba(0,0,0,0.2);
+  cursor: pointer;
+}
+.items-grid-container .item-box:hover .back {
+  -webkit-transition-delay: 1s;
+  -moz-transition-delay: 1s;
+  -o-transition-delay: 1s;
+  -ms-transition-delay: 1s;
+  transition-delay: 1s;
+  left: 0;
+  top: 1px;
+}
+.items-grid-container .item-box .front,
+.items-grid-container .item-box .back {
+  width: 175px;
+  height: 160px;
+  padding: 6px;
+  position: absolute;
+}
+.items-grid-container .item-box .front {
+  background-color: #fbfbfb;
+}
+.items-grid-container .item-box .front .item-preview {
+  margin-bottom: 5px;
+  overflow: hidden;
+  width: 161px;
+  height: 100px;
+  border: 1px solid #cdcdcd;
+}
+.items-grid-container .item-box .front .item-conversation {
+  border: 0;
+}
+.items-grid-container .item-box .front .item-preview.item-inset {
+  border: 1px solid #cdcdcd;
+  -webkit-box-shadow: 0 0 1px rgba(0,0,0,0.1) inset, 0 -1px 0 #e8e8e8 inset;
+  box-shadow: 0 0 1px rgba(0,0,0,0.1) inset, 0 -1px 0 #e8e8e8 inset;
+  background-color: #ddd;
+}
+.items-grid-container .item-box .front .item-preview.item-inset img {
+  width: 160px;
+}
+.items-grid-container .item-box .front .item-title {
+  margin-left: 5px;
+  font-size: 13px;
+  padding: 7px 0 2px 0;
+  line-height: 13px;
+  font-weight: 700;
+  color: #333;
+  white-space: nowrap;
+  overflow: hidden;
+  -o-text-overflow: ellipsis;
+  text-overflow: ellipsis;
+}
+.items-grid-container .item-box .front .item-title a {
+  color: #333;
+}
+.items-grid-container .item-box .front .item-date {
+  font-weight: 600;
+  margin-left: 5px;
+  font-size: 11px;
+  color: #7d7d7d;
+}
+.items-grid-container .item-box.type-conversation .front {
+  background-color: #fbfbfb;
+  background-image: url("/my-items/images/wave-gray-myitems-grid.svg");
+  background-repeat: repeat-x;
+  background-position: 6px 151px;
+}
+.items-grid-container .item-box .front .item-preview.item-conversation img {
+  float: left;
+  -webkit-box-shadow: 0 2px 2px rgba(0,0,0,0.2);
+  box-shadow: 0 2px 2px rgba(0,0,0,0.2);
+}
+.items-grid-container .item-box .front .item-preview.item-conversation.item-size-1 img,
+.items-grid-container .item-box .front .item-preview.item-conversation.item-size-2 img {
+  width: 76px;
+  height: 76px;
+  -webkit-border-radius: 38px;
+  border-radius: 38px;
+  margin: 12px 2px;
+}
+.items-grid-container .item-box .front .item-preview.item-conversation.item-size-1 img {
+  margin: 12px 42px;
+}
+.items-grid-container .item-box .front .item-preview.item-conversation.item-size-3 img,
+.items-grid-container .item-box .front .item-preview.item-conversation.item-size-4 img {
+  width: 49px;
+  height: 49px;
+  margin: 25px 2px;
+  -webkit-border-radius: 24px;
+  border-radius: 24px;
+}
+.items-grid-container .item-box .front .item-preview.item-conversation.item-size-4 img,
+.items-grid-container .item-box .front .item-preview.item-conversation.item-size-5 img,
+.items-grid-container .item-box .front .item-preview.item-conversation.item-size-6 img {
+  width: 46px;
+  height: 46px;
+  -webkit-border-radius: 23px;
+  border-radius: 23px;
+  margin: 2px 0px 2px 23px;
+}
+.items-grid-container .item-box .front .item-preview.item-conversation.item-size-6 img {
+  margin: 2px 3px;
+}
+.items-grid-container .item-box .back {
+  border-top: 1px solid #fff;
+  left: -1000px;
+  background-color: #f0f0f0;
+}
+.items-grid-container .item-box {
+  -webkit-box-shadow: -1px 1px 0 #dcdcdc;
+  box-shadow: -1px 1px 0 #dcdcdc;
+}
+.items-grid-container .item-box .front {
+  -webkit-box-shadow: -1px 1px 0 #dcdcdc inset;
+  box-shadow: -1px 1px 0 #dcdcdc inset;
+}
+#login-container {
+  width: 365px;
+  text-align: left;
+  margin: 0 auto;
+  color: #535353;
+}
+#login-container a {
+  color: #1f7dca;
+}
+#login {
+  background: #fff;
+  border: 1px solid #c9c9c9;
+  -webkit-border-radius: 3px;
+  border-radius: 3px;
+  padding: 30px;
+  width: 100%;
+  -webkit-box-shadow: 0 0 0 1px rgba(255,255,255,0.3);
+  box-shadow: 0 0 0 1px rgba(255,255,255,0.3);
+  float: left;
+  position: relative;
+  z-index: 10;
+}
+#login h1 {
+  color: #1f7dca;
+  font-weight: bold;
+  font-size: 26px;
+  margin: 0 0 15px 0;
+}
+#login h2 {
+  color: #222;
+  font-size: 18px;
+  background: url("/login/images/login.png") 100% 0 no-repeat;
+  padding-bottom: 10px;
+  margin-right: -8px;
+}
+#login p.status {
+  margin: 0;
+}
+#login p.status.initial {
+  color: #808080;
+}
+#login p.actions {
+  margin: 20px 0 0 0;
+}
+#login p.actions input {
+  float: right;
+}
+#login + p {
+  float: left;
+  clear: both;
+  font-size: 12px;
+  margin-left: 80px;
+}
+#login ul {
+  margin: 0;
+  padding: 0;
+}
+#login ul li {
+  margin: 20px 0;
+  font-size: 12px;
+  list-style: none;
+}
+#login-container #login a {
+  color: #424242;
+}
+#policy {
+  font-size: 14px;
+}
+#login-text {
+  text-align: center;
+  clear: both;
+  font-size: 12px;
+  padding-top: 12px;
+}
+#onboarding {
+  background-color: #fff;
+  margin: 0 auto;
+  -webkit-border-radius: 3px;
+  border-radius: 3px;
+  border: solid 1px #c9c9c9;
+  width: 525px;
+}
+#onboarding .header {
+  padding: 15px 15px 15px 25px;
+}
+#onboarding h3 {
+  color: #333;
+  float: left;
+  font-weight: bold;
+  margin: 0;
+  line-height: 42px;
+}
+#onboarding .steps {
+  cursor: default;
+  width: 100%;
+  height: 40px;
+  font-size: 1.2em;
+  font-weight: bold;
+  text-align: right;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+#onboarding .steps > div {
+  display: inline-block;
+  color: #fff;
+  width: 40px;
+  height: 40px;
+  position: relative;
+}
+#onboarding .circle {
+  overflow: hidden;
+  width: 24px;
+  height: 24px;
+  -webkit-border-radius: 12px;
+  border-radius: 12px;
+  margin: 8px;
+  text-align: center;
+  position: relative;
+}
+#onboarding .active {
+  margin-right: 4px;
+}
+#onboarding .active .circle {
+  background-color: #ffdc2d;
+}
+#onboarding .inactive .circle {
+  background-color: #8b8b8b;
+  z-index: 2;
+}
+#onboarding .completed .circle {
+  background-color: #7eac41;
+}
+#onboarding .completed .circle .num {
+  padding-left: 2px;
+}
+#onboarding .inactive .overlay {
+  background-color: #cecece;
+  width: 24px;
+  height: 24px;
+  -webkit-border-radius: 12px;
+  border-radius: 12px;
+  position: absolute;
+  top: -7px;
+  left: 12px;
+  z-index: 1;
+}
+#onboarding .num {
+  padding-top: 2px;
+  position: relative;
+  z-index: 2;
+  font-size: 16px;
+}
+#onboarding .ray {
+  width: 100%;
+  height: 100%;
+  position: absolute;
+  top: 0;
+  left: 0;
+}
+#onboarding .ray div {
+  background-color: #ffdc2d;
+  width: 4px;
+  height: 6px;
+  margin: 0 auto;
+}
+#onboarding .ray.ne {
+  -webkit-transform: rotate(45deg);
+  -moz-transform: rotate(45deg);
+  -o-transform: rotate(45deg);
+  -ms-transform: rotate(45deg);
+  transform: rotate(45deg);
+}
+#onboarding .ray.e {
+  -webkit-transform: rotate(90deg);
+  -moz-transform: rotate(90deg);
+  -o-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+#onboarding .ray.se {
+  -webkit-transform: rotate(135deg);
+  -moz-transform: rotate(135deg);
+  -o-transform: rotate(135deg);
+  -ms-transform: rotate(135deg);
+  transform: rotate(135deg);
+}
+#onboarding .ray.s {
+  -webkit-transform: rotate(180deg);
+  -moz-transform: rotate(180deg);
+  -o-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  transform: rotate(180deg);
+}
+#onboarding .ray.sw {
+  -webkit-transform: rotate(225deg);
+  -moz-transform: rotate(225deg);
+  -o-transform: rotate(225deg);
+  -ms-transform: rotate(225deg);
+  transform: rotate(225deg);
+}
+#onboarding .ray.w {
+  -webkit-transform: rotate(270deg);
+  -moz-transform: rotate(270deg);
+  -o-transform: rotate(270deg);
+  -ms-transform: rotate(270deg);
+  transform: rotate(270deg);
+}
+#onboarding .ray.nw {
+  -webkit-transform: rotate(315deg);
+  -moz-transform: rotate(315deg);
+  -o-transform: rotate(315deg);
+  -ms-transform: rotate(315deg);
+  transform: rotate(315deg);
+}
+#onboarding .dots {
+  color: #333;
+  font-weight: normal;
+  letter-spacing: 1px;
+  padding: 4px;
+  position: relative;
+  top: -4px;
+}
+#onboarding .dots.completed {
+  color: #7eac41;
+}
+#onboarding .dots.active {
+  color: #ffdc2d;
+}
+#onboarding .content {
+  line-height: 18px;
+  text-align: left;
+}
+#onboarding .content.page-welcome {
+  background-color: #2da4d8;
+  -webkit-border-bottom-left-radius: 2px;
+  border-bottom-left-radius: 2px;
+  -webkit-border-bottom-right-radius: 2px;
+  border-bottom-right-radius: 2px;
+  margin: 1px;
+  color: #fff;
+}
+#onboarding .content.page-welcome video {
+  background-color: rgba(0,0,0,0.5);
+  display: block;
+  width: 100%;
+}
+#onboarding .content.page-welcome > div {
+  padding: 15px 30px;
+}
+#onboarding .content.page-welcome .start-tour {
+  text-align: center;
+  padding-top: 0;
+}
+#onboarding .content.page-welcome .start-tour h4 {
+  color: #fff;
+  font-size: 16px;
+  line-height: 24px;
+  text-shadow: 0px 1px 0px #444;
+}
+#onboarding .content.page-welcome .start-tour .button {
+  margin-left: 15px;
+}
+#onboarding .content.page-connect {
+  background-color: #f9f9f9;
+  padding-bottom: 12px;
+}
+#onboarding .content.page-connect .map {
+  background-image: url("/map?zoom=15&width=500");
+  -webkit-background-size: 100%;
+  -moz-background-size: 100%;
+  background-size: 100%;
+  height: 190px;
+  width: 500px;
+  margin: 0 auto;
+  border: solid 1px #c9c9c9;
+  border-top: none;
+  text-align: center;
+  position: relative;
+}
+#onboarding .content.page-connect .map > .button {
+  -webkit-box-shadow: 0px 0px 15px 10px #fff;
+  box-shadow: 0px 0px 15px 10px #fff;
+  margin: 70px 15px;
+  padding: 0 10px;
+  position: relative;
+  text-align: left;
+  width: 120px;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+#onboarding .content.page-connect .map > .button .icon-facebook {
+  margin-right: 5px;
+}
+#onboarding .content.page-connect .map > .button .icon-twitter-bird {
+  margin-right: 12px;
+}
+#onboarding .content.page-connect .map > .button .icon-googleplus-rect {
+  margin-right: 13px;
+}
+#onboarding .content.page-connect .map > .matches {
+  background-color: rgba(44,44,44,0.8);
+  color: #fff;
+  opacity: 0;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
+  filter: alpha(opacity=0);
+  width: 100%;
+  height: 48px;
+  position: absolute;
+  padding-top: 12px;
+  bottom: 0;
+  left: 0;
+  -webkit-transition: opacity 300ms ease-in;
+  -moz-transition: opacity 300ms ease-in;
+  -o-transition: opacity 300ms ease-in;
+  -ms-transition: opacity 300ms ease-in;
+  transition: opacity 300ms ease-in;
+}
+#onboarding .content.page-connect .map > .matches.show {
+  opacity: 1;
+  -ms-filter: none;
+  filter: none;
+}
+#onboarding .content.page-connect .map > .matches .count {
+  font-weight: bold;
+}
+#onboarding .content.page-connect .map .done {
+  color: #fff;
+  opacity: 0;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
+  filter: alpha(opacity=0);
+  float: right;
+}
+#onboarding .content.page-connect .map .auth.google,
+#onboarding .content.page-connect .map .auth.google:hover {
+  -webkit-box-shadow: 0px 0px 25px 15px #fff4ec;
+  box-shadow: 0px 0px 25px 15px #fff4ec;
+  background-color: #fead73;
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fe9c56), color-stop(1, #fead73));
+  background: -webkit-linear-gradient(top, #fe9c56 0%, #fead73 100%);
+  background: -moz-linear-gradient(top, #fe9c56 0%, #fead73 100%);
+  background: -o-linear-gradient(top, #fe9c56 0%, #fead73 100%);
+  background: -ms-linear-gradient(top, #fe9c56 0%, #fead73 100%);
+  background: linear-gradient(top, #fe9c56 0%, #fead73 100%);
+}
+#onboarding .content.page-connect .map .auth .done {
+  opacity: 1;
+  -ms-filter: none;
+  filter: none;
+}
+#onboarding .bottom {
+  background-color: #f0f0f0;
+  height: 50px;
+  border-top: solid 1px #c9c9c9;
+  -webkit-border-bottom-left-radius: 4px;
+  border-bottom-left-radius: 4px;
+  -webkit-border-bottom-right-radius: 4px;
+  border-bottom-right-radius: 4px;
+  padding: 10px;
+}
+#onboarding .bottom a {
+  text-decoration: none;
+}
+#onboarding .bottom .back {
+  background: none;
+  border: none;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  color: #4c4c4c;
+  float: left;
+  font-size: 12px;
+  font-weight: 700;
+  line-height: 28px;
+  margin-left: 6px;
+}
+#onboarding .bottom .next {
+  float: right;
+}
+#onboarding .bottom.page-welcome,
+#onboarding .bottom.page-tour {
+  display: none;
+}
+#onboarding .content.page-friends {
+  background-color: #f9f9f9;
+  border-top: solid 1px #dcdcdc;
+  height: 300px;
+  overflow-y: auto;
+}
+#onboarding .content.page-friends table.matches {
+  margin-top: 0;
+  text-align: left;
+}
+#onboarding .content.page-friends table.matches tr:last-child {
+  border-bottom: 1px solid #eee;
+}
+#onboarding .content.page-friends table.matches td {
+  padding: 10px 0;
+}
+#onboarding .content.page-friends table.matches td:nth-child(1) {
+  width: 10%;
+  text-align: center;
+}
+#onboarding .content.page-friends table.matches td:nth-child(2) {
+  width: 10%;
+  text-align: center;
+}
+#onboarding .content.page-friends table.matches td:nth-child(3) {
+  width: 30%;
+}
+#onboarding .content.page-friends table.matches td:nth-child(4) {
+  width: 50%;
+}
+#onboarding .content.page-friends table.matches .avatar img {
+  -webkit-border-radius: 10px;
+  border-radius: 10px;
+  width: 20px;
+  height: 20px;
+}
+#onboarding .content.page-invite {
+  background-color: #f9f9f9;
+  border-top: solid 1px #dcdcdc;
+  padding: 40px;
+}
+#onboarding .content.page-invite h3,
+#onboarding .content.page-invite h4 {
+  display: block;
+  width: 100%;
+}
+#onboarding .content.page-invite h4 {
+  color: #868686;
+  margin: 0;
+}
+#onboarding .content.page-invite form div {
+  display: inline-block;
+  vertical-align: baseline;
+}
+#onboarding .content.page-invite input {
+  width: 40%;
+  margin-right: 8px;
+  vertical-align: baseline;
+}
+#onboarding .content.page-invite button {
+  margin: 8px;
+  vertical-align: baseline;
+}
+#onboarding .content.page-invite button span {
+  padding-right: 2px;
+}
+#onboarding .content.page-invite .tweet span {
+  padding-right: 6px;
+}
+.popover.tour .popover-title span {
+  padding-top: 2px;
+  float: right;
+  font-size: 0.75em;
+}
+.popover.tour ul {
+  list-style: none;
+  padding-left: 0;
+}
+.popover.tour li {
+  padding-bottom: 8px;
+}
+.popover.tour-1 .tip-inner {
+  width: 250px;
+  max-width: 250px;
+}
+.popover.tour-2 .tip-inner {
+  width: 225px;
+  max-width: 225px;
+}
+.popover.tour-3 .tip-inner {
+  width: 300px;
+  max-width: 300px;
+}
+.popover.tour-4 .tip-inner {
+  width: 235px;
+  max-width: 235px;
+}
+#next-page,
+#prev-page {
+  font-size: 25px;
+  background: #79c5f6;
+  padding: 10px 0;
+  color: #fff;
+  text-decoration: none;
+  -webkit-box-shadow: inset 0 0 3px #09578a;
+  box-shadow: inset 0 0 3px #09578a;
+  text-align: center;
+  margin-top: -25px;
+  opacity: 1;
+  -ms-filter: none;
+  filter: none;
+  -webkit-transition: opacity 300ms;
+  -moz-transition: opacity 300ms;
+  -o-transition: opacity 300ms;
+  -ms-transition: opacity 300ms;
+  transition: opacity 300ms;
+}
+#next-page:hover,
+#prev-page:hover {
+  background: #86cbf7;
+}
+#next-page:active,
+#prev-page:active {
+  background: #57b6f4;
+}
+#next-page.hide,
+#prev-page.hide {
+  opacity: 0;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
+  filter: alpha(opacity=0);
+}
+#next-page {
+  position: fixed;
+  top: 50%;
+  right: -5px;
+  -webkit-border-top-left-radius: 5px;
+  border-top-left-radius: 5px;
+  -webkit-border-bottom-left-radius: 5px;
+  border-bottom-left-radius: 5px;
+  padding-left: 5px;
+}
+#next-page:hover {
+  right: -3px;
+}
+#next-page:active {
+  right: -5px;
+}
+#prev-page {
+  position: fixed;
+  top: 50%;
+  left: -5px;
+  -webkit-border-top-right-radius: 5px;
+  border-top-right-radius: 5px;
+  -webkit-border-bottom-right-radius: 5px;
+  border-bottom-right-radius: 5px;
+  padding-left: 5px;
+}
+#prev-page:hover {
+  left: -3px;
+}
+#prev-page:active {
+  left: -5px;
+}
+#pages-content {
+  overflow-x: hidden;
+  width: 1000%;
+  -webkit-transition: margin-left 300ms ease-out;
+  -moz-transition: margin-left 300ms ease-out;
+  -o-transition: margin-left 300ms ease-out;
+  -ms-transition: margin-left 300ms ease-out;
+  transition: margin-left 300ms ease-out;
+}
+.page {
+  float: left;
+  margin: 0 2px;
+}
+.center {
+  margin: 50px auto;
+  width: 180px;
+}
+#policy-container {
+  width: 550px;
+  text-align: left;
+  margin: 0 auto;
+  color: #808080;
+}
+#policy {
+  background: #fff;
+  border: 1px solid #c9c9c9;
+  -webkit-border-radius: 3px;
+  border-radius: 3px;
+  padding: 30px;
+  width: 100%;
+  -webkit-box-shadow: 0 0 0 1px rgba(255,255,255,0.3);
+  box-shadow: 0 0 0 1px rgba(255,255,255,0.3);
+  float: left;
+  position: relative;
+  z-index: 10;
+  margin-bottom: 100px;
+}
+.progress-bar {
+  position: relative;
+  background: -webkit-gradient(linear, left bottom, left top, color-stop(0.4, #f2f2f2), color-stop(1, #f2f2f2));
+  background: -webkit-linear-gradient(bottom, #f2f2f2 40%, #f2f2f2 100%);
+  background: -moz-linear-gradient(bottom, #f2f2f2 40%, #f2f2f2 100%);
+  background: -o-linear-gradient(bottom, #f2f2f2 40%, #f2f2f2 100%);
+  background: -ms-linear-gradient(bottom, #f2f2f2 40%, #f2f2f2 100%);
+  background: linear-gradient(bottom, #f2f2f2 40%, #f2f2f2 100%);
+  height: 40px;
+  line-height: 34px;
+  -webkit-border-radius: 40px;
+  border-radius: 40px;
+  padding: 2px;
+  border: 1px solid #cdcdcd;
+  -webkit-box-shadow: inset 0 0 3px #cdcdcd;
+  box-shadow: inset 0 0 3px #cdcdcd;
+}
+.progress-current {
+  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00a0cb), color-stop(0.9, #40d9fa), color-stop(0.3, #40d9fa));
+  background: -webkit-linear-gradient(bottom, #00a0cb 0%, #40d9fa 90%, #40d9fa 30%);
+  background: -moz-linear-gradient(bottom, #00a0cb 0%, #40d9fa 90%, #40d9fa 30%);
+  background: -o-linear-gradient(bottom, #00a0cb 0%, #40d9fa 90%, #40d9fa 30%);
+  background: -ms-linear-gradient(bottom, #00a0cb 0%, #40d9fa 90%, #40d9fa 30%);
+  background: linear-gradient(bottom, #00a0cb 0%, #40d9fa 90%, #40d9fa 30%);
+  position: absolute;
+  -webkit-border-radius: 50px;
+  border-radius: 50px;
+  top: 2px;
+  left: 2px;
+  text-align: right;
+  color: #fff;
+  padding-right: 20px;
+  line-height: 34px;
+  -webkit-transition: width 500ms ease-out;
+  -moz-transition: width 500ms ease-out;
+  -o-transition: width 500ms ease-out;
+  -ms-transition: width 500ms ease-out;
+  transition: width 500ms ease-out;
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  -webkit-box-shadow: inset 0 0 2px rgba(0,0,0,0.3);
+  box-shadow: inset 0 0 2px rgba(0,0,0,0.3);
+}
+.progress-current em {
+  text-shadow: -1px -1px 0 rgba(0,0,0,0.2);
+  font-style: normal;
+}
+.progress-total {
+  color: #cdcdcd;
+  text-align: right;
+  padding-right: 20px;
+}
+.progress-total em {
+  font-style: normal;
+  text-shadow: 1px 1px 0 #fff;
+}
+.progress-bar.small {
+  font-size: 12px;
+  line-height: 20px;
+  -webkit-border-radius: 20px;
+  border-radius: 20px;
+}
+.progress-bar.small .progress-current {
+  padding-right: 10px;
+  height: 20px;
+}
+.progress-bar.small .progress-total {
+  padding-right: 10px;
+}
+.progress-bar.tiny {
+  height: 16px;
+  font-size: 10px;
+  line-height: 5px;
+  -webkit-border-radius: 15px;
+  border-radius: 15px;
+}
+.progress-bar.tiny em {
+  display: none;
+}
+.progress-bar.tiny .progress-current {
+  padding-right: 5px;
+  height: 10px;
+  line-height: 0;
+}
+.progress-bar.tiny .progress-total {
+  padding-right: 5px;
+}
+#settings-container {
+  width: 700px;
+  text-align: left;
+  margin: 0 auto;
+  font-size: 14px;
+  -webkit-font-smoothing: antialiased;
+  color: #535353;
+}
+#settings {
+  background: #fff;
+  border: 1px solid #cdcdcd;
+  -webkit-border-radius: 3px;
+  border-radius: 3px;
+  width: 100%;
+  -webkit-box-shadow: 0 0 0 1px rgba(255,255,255,0.3);
+  box-shadow: 0 0 0 1px rgba(255,255,255,0.3);
+  float: left;
+  position: relative;
+  z-index: 10;
+  margin-bottom: 50px;
+}
+#settings h2 {
+  margin: 0;
+  -webkit-border-top-left-radius: 3px;
+  border-top-left-radius: 3px;
+  -webkit-border-top-right-radius: 3px;
+  border-top-right-radius: 3px;
+  background: #f2f2f2;
+  font-size: 14px;
+  color: #333;
+  padding: 20px;
+  border-bottom: 1px solid #cdcdcd;
+}
+#settings .tabs {
+  text-transform: uppercase;
+  margin: 0;
+  padding: 0;
+  background: #e6e6e6;
+  border-bottom: 1px solid #cdcdcd;
+  -webkit-box-shadow: inset 0 1px 2px #dcdcdc;
+  box-shadow: inset 0 1px 2px #dcdcdc;
+}
+#settings .tabs li {
+  display: inline-block;
+  list-style: none;
+}
+#settings .tabs li.active a {
+  background: #f2f2f2;
+  border-left: 1px solid #cdcdcd;
+  border-right: 1px solid #cdcdcd;
+  padding-top: 11px;
+  -webkit-box-shadow: inset 0 1px 0 #fff;
+  box-shadow: inset 0 1px 0 #fff;
+  border-top: none;
+  color: #333;
+}
+#settings .tabs a {
+  display: inline-block;
+  border: 1px solid transparent;
+  border-bottom: none;
+  text-decoration: none;
+  color: #1f7dca;
+  font-size: 12px;
+  font-weight: 700;
+  padding: 10px 20px;
+  text-shadow: 0 1px 0 #fff;
+}
+#settings .tabs a:hover {
+  color: #1964a2;
+}
+#settings .tabs li:first-child a {
+  border-left: 0;
+}
+#settings .content {
+  padding: 20px 40px;
+}
+#notification-wrapper {
+  text-align: center;
+}
+#notification-settings {
+  margin: 0 auto;
+  text-align: left;
+  width: 60%;
+}
+#notification-settings p a.update-account {
+  padding: 0px;
+}
+#notification-settings table td,
+#notification-settings table th {
+  padding: 8px 0;
+}
+#notification-settings table th.email,
+#notification-settings table th.phone {
+  text-indent: -9999999em;
+}
+#notification-settings table td:nth-child(2),
+#notification-settings table td:nth-child(3) {
+  width: 30px;
+  text-align: center;
+}
+#account-type {
+  text-align: center;
+}
+#account-type h3 {
+  font-size: 28px;
+  margin: 20px 0 0 0;
+}
+#account-type h5 {
+  font-size: 14px;
+  margin: 2px 0 20px 0;
+}
+#account-type .links {
+  margin-top: 20px;
+}
+#account-type .links a {
+  text-decoration: none;
+  text-transform: uppercase;
+  color: #1f7dca;
+  font-size: 11px;
+  margin: 0 5px;
+}
+#account-type .links span.or {
+  font-style: italic;
+}
+table.bonus thead tr td {
+  font-size: 12px;
+  font-weight: normal;
+  text-align: left;
+}
+table.bonus thead tr td.earned {
+  padding-left: 40px;
+}
+table.bonus tbody {
+  border: 1px solid #eee;
+}
+table.bonus tbody tr {
+  height: 45px;
+  line-height: 45px;
+}
+table.bonus tbody tr td {
+  padding: 0;
+  text-align: left;
+}
+table.bonus tbody tr td.image {
+  width: 10%;
+  text-align: center;
+}
+table.bonus tbody tr td.image img {
+  position: relative;
+  top: 6px;
+}
+table.bonus tbody tr td.type {
+  width: 40%;
+  font-weight: bold;
+}
+table.bonus tbody tr td.desc {
+  width: 30%;
+}
+table.bonus tbody tr td.pts {
+  width: 20%;
+  font-weight: bold;
+}
+table.bonus tbody tr.even {
+  background-color: #f5fbff;
+}
+#information-wrapper {
+  text-align: center;
+}
+#information-wrapper input {
+  display: inline-block;
+}
+#information-settings {
+  text-align: left;
+}
+#information-settings .two p {
+  display: inline-block;
+  width: 48%;
+}
+#information-settings .two p:first-child {
+  margin-right: 4%;
+}
+#information-settings .two a {
+  font-size: 14px;
+}
+#information-settings .information {
+  margin: 0 15px 0 150px;
+}
+#information-settings .msg-placeholder {
+  margin-left: 150px;
+}
+#information-settings #avatar-wrapper {
+  cursor: pointer;
+  position: relative;
+  float: left;
+  margin-right: 20px;
+  width: 130px;
+  text-align: center;
+}
+#information-settings #avatar-wrapper p.upload {
+  display: none;
+  position: absolute;
+  top: 40px;
+  left: 40px;
+}
+#information-settings #avatar-wrapper .img-placeholder {
+  width: 100px;
+  height: 100px;
+  margin: 12px auto 0;
+  border: 1px solid #cdcdcd;
+  -webkit-border-radius: 50px;
+  border-radius: 50px;
+  display: inline-block;
+  -webkit-box-shadow: 0 2px 3px rgba(0,0,0,0.2);
+  box-shadow: 0 2px 3px rgba(0,0,0,0.2);
+}
+#information-settings #avatar-wrapper .img-placeholder img {
+  width: 96px;
+  height: 97px;
+  -webkit-border-radius: 50px;
+  border-radius: 50px;
+}
+#information-settings .email .confirm span {
+  font-weight: bold;
+}
+#change-avatar a {
+  font-size: 12px;
+}
+#change-avatar input {
+  position: absolute;
+  top: 0;
+  left: 0;
+  border: solid transparent;
+  opacity: 0;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
+  filter: alpha(opacity=0);
+  width: 125px;
+}
+#avatar-overlay {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+}
+#avatar {
+  border: 1px solid #fff;
+}
+#avatar.over {
+  border: 1px dotted #ddd;
+}
+#avatar.over p.upload {
+  display: block;
+}
+#password-wrapper {
+  text-align: center;
+}
+#password-settings {
+  margin: 0 auto;
+  text-align: left;
+  width: 60%;
+}
+#upgrade-wrapper {
+  text-align: center;
+}
+#upgrade-wrapper h3,
+#upgrade-wrapper h5 {
+  font-size: 28px;
+  margin: 20px 0 0 0;
+}
+#upgrade-wrapper h5 {
+  font-size: 14px;
+  margin: 2px 0 0;
+}
+#upgrade-wrapper #upgrade-accounts {
+  background-color: #e6e6e6;
+  margin: 33px -40px 0;
+  height: 370px;
+  overflow: hidden;
+}
+#upgrade-wrapper #upgrade-accounts hr {
+  background: url("/settings/wave-top.svg") repeat-x left top;
+  margin: 0px;
+  padding: 0px;
+  border: 0px;
+  height: 20px;
+  position: absolute;
+  width: 100%;
+  z-index: 100;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types {
+  -webkit-transition: all 500ms ease-in;
+  -moz-transition: all 500ms ease-in;
+  -o-transition: all 500ms ease-in;
+  -ms-transition: all 500ms ease-in;
+  transition: all 500ms ease-in;
+  background-color: #6e63a0;
+  padding: 25px 0;
+  position: relative;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul {
+  height: 257px;
+  overflow: hidden;
+  margin: 0;
+  padding: 0 0 0 16px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul li {
+  float: left;
+  list-style: none;
+  margin: 27px 17px 0px;
+  padding: 0;
+  overflow: hidden;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul li .card {
+  margin: 0 1px 5px;
+  width: 186px;
+  height: 223px;
+  -webkit-border-radius: 8px;
+  border-radius: 8px;
+  color: #fff;
+  position: relative;
+  border: 1px solid rgba(0,0,0,0.2);
+  -webkit-box-shadow: 0 1px 0 rgba(255,255,255,0.8) inset, 0 1px 3px rgba(0,0,0,0.8);
+  box-shadow: 0 1px 0 rgba(255,255,255,0.8) inset, 0 1px 3px rgba(0,0,0,0.8);
+  background-color: #463b86;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul li .card:hover {
+  background-color: #51459c;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul li .card .favorite {
+  -webkit-box-shadow: -1px 1px 2px rgba(0,0,0,0.3);
+  box-shadow: -1px 1px 2px rgba(0,0,0,0.3);
+  background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #d9d105), color-stop(1, #f9f10c));
+  background-image: -webkit-linear-gradient(bottom, #d9d105 0%, #f9f10c 100%);
+  background-image: -moz-linear-gradient(bottom, #d9d105 0%, #f9f10c 100%);
+  background-image: -o-linear-gradient(bottom, #d9d105 0%, #f9f10c 100%);
+  background-image: -ms-linear-gradient(bottom, #d9d105 0%, #f9f10c 100%);
+  background-image: linear-gradient(bottom, #d9d105 0%, #f9f10c 100%);
+  background-color: #fdff35;
+  color: #000;
+  text-shadow: 1px 0 1px rgba(255,255,255,0.6);
+  width: 100px;
+  height: 30px;
+  line-height: 37px;
+  font-size: 12px;
+  font-weight: 700;
+  position: absolute;
+  right: -34px;
+  top: 3px;
+  -webkit-transform: rotate(45deg);
+  -moz-transform: rotate(45deg);
+  -o-transform: rotate(45deg);
+  -ms-transform: rotate(45deg);
+  transform: rotate(45deg);
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul li .card span {
+  color: #2e2260;
+  font-size: 22px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul li .card span.lt {
+  position: absolute;
+  top: 0;
+  left: 10px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul li .card span.br {
+  position: absolute;
+  bottom: 0;
+  right: 10px;
+  -webkit-transform: rotate(180deg);
+  -moz-transform: rotate(180deg);
+  -o-transform: rotate(180deg);
+  -ms-transform: rotate(180deg);
+  transform: rotate(180deg);
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul li .card h3 {
+  font-size: 20px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul li .card .items {
+  margin-top: 27px;
+  font-size: 52px;
+  line-height: 56px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul li .card .cost {
+  text-shadow: 2px 2px 1px #fff, -2px 2px 1px #fff, 2px -2px 1px #fff, -2px -2px 1px #fff, 2px 0 1px #fff, -2px 0 1px #fff, 0 2px 1px #fff, 0 -2px 1px #fff;
+  color: #2a78c4;
+  font-size: 24px;
+  margin-top: 10px;
+  font-weight: bold;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul li .card .current-plan {
+  position: absolute;
+  width: 184px;
+  bottom: 8px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul li .card.pair {
+  -webkit-box-shadow: 0 1px 0 rgba(255,255,255,0.8), 0 1px 0 rgba(0,0,0,0.2) inset;
+  box-shadow: 0 1px 0 rgba(255,255,255,0.8), 0 1px 0 rgba(0,0,0,0.2) inset;
+  background-color: #535353;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul li .card.pair span {
+  color: #fff;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul li.non-free {
+  cursor: pointer;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul li.non-free:active {
+  position: relative;
+  top: 1px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types ul li.non-free:active .card {
+  -webkit-box-shadow: 0 1px 0 rgba(255,255,255,0.5), 0 1px 0 rgba(0,0,0,0.2) inset !important;
+  box-shadow: 0 1px 0 rgba(255,255,255,0.5), 0 1px 0 rgba(0,0,0,0.2) inset !important;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types.hide {
+  margin-top: -329px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types p.change-plan {
+  color: #fff;
+  bottom: 37px;
+  font-weight: 600;
+  font-size: 12px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types p.change-plan span.right-arrow {
+  padding-left: 20px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-types p.change-plan span.left-arrow {
+  padding-right: 20px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-description {
+  width: 100%;
+  height: 200px;
+  background-color: #e6e6e6;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-description h4 {
+  font-weight: 400;
+  font-size: 1.4em;
+  text-align: left;
+  margin: 3px 0 5px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-description h4 span {
+  color: #4085c9;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-description hr {
+  background: url("/settings/wave-bottom.svg") repeat-x 40px top;
+  background-color: transparent;
+  border: 0;
+  height: 20px;
+  position: relative;
+  top: -20px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-description .content {
+  padding: 0px 54px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-description .content p {
+  text-align: justify;
+  color: #757575;
+  margin: 0px 0px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-description .content strong {
+  color: #222;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-description .content form fieldset {
+  background-color: #fff;
+  border: 1px solid #ccc;
+  -webkit-border-radius: 5px;
+  border-radius: 5px;
+  -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.1);
+  box-shadow: 0 1px 2px rgba(0,0,0,0.1);
+  margin: 10px 0;
+  padding: 3px 15px;
+  float: left;
+  width: 100%;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-description .content form fieldset input {
+  width: 350px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-description .content form fieldset input.card-name {
+  width: 195px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-description .content form fieldset input.card-expiration {
+  margin-left: 24px;
+  width: 150px;
+}
+#upgrade-wrapper #upgrade-accounts .upgrades-description .content form fieldset input.card-code {
+  margin-left: 24px;
+  width: 150px;
+}
+#upgrade-wrapper p.all-price {
+  margin: 0 -40px -20px;
+  background-color: #e6e6e6;
+  height: 54px;
+  text-align: left;
+  line-height: 70px;
+  padding-left: 20px;
+  font-weight: bold;
+  font-size: 12px;
+  color: #a1a1a1;
+  text-shadow: 0 1px 0 #fff;
+}
+#signup-container {
+  width: 550px;
+  text-align: left;
+  margin: 0 auto;
+  color: #535353;
+}
+#signup-container a {
+  color: #1f7dca;
+}
+#create-account {
+  background: #fff;
+  border: 1px solid #c9c9c9;
+  -webkit-border-radius: 3px;
+  border-radius: 3px;
+  padding: 30px;
+  width: 66%;
+  -webkit-box-shadow: 0 0 0 1px rgba(255,255,255,0.3);
+  box-shadow: 0 0 0 1px rgba(255,255,255,0.3);
+  float: left;
+  position: relative;
+  z-index: 10;
+}
+#create-account p.note span {
+  float: right;
+}
+#signup-container #create-account a {
+  color: #424242;
+}
+#create-account h1 {
+  color: #1f7dca;
+  font-weight: bold;
+  font-size: 26px;
+  margin: 0 0 15px 0;
+}
+#policy-text {
+  font-size: 12px;
+}
+#signup-box {
+  margin-top: 20px;
+  width: 33%;
+  float: left;
+  background: #f5f5f5;
+  -webkit-box-shadow: 0 0 1px 1px #d4d4d4, inset 0 0 1px 1px #fff;
+  box-shadow: 0 0 1px 1px #d4d4d4, inset 0 0 1px 1px #fff;
+  -webkit-border-top-right-radius: 3px;
+  border-top-right-radius: 3px;
+  -webkit-border-bottom-right-radius: 3px;
+  border-bottom-right-radius: 3px;
+  padding: 10px 20px;
+  position: relative;
+  left: -200px;
+  -webkit-transition: left 800ms cubic-bezier(0.47, 0, 0, 1.1);
+  -moz-transition: left 800ms cubic-bezier(0.47, 0, 0, 1.1);
+  -o-transition: left 800ms cubic-bezier(0.47, 0, 0, 1.1);
+  -ms-transition: left 800ms cubic-bezier(0.47, 0, 0, 1.1);
+  transition: left 800ms cubic-bezier(0.47, 0, 0, 1.1);
+}
+#signup-box.show {
+  left: -2px;
+}
+#signup-box h2 {
+  color: #222;
+  font-size: 18px;
+  background: url("/signup/signup.png") 100% 0 no-repeat;
+  padding-bottom: 10px;
+  margin-right: -8px;
+}
+#signup-box ul {
+  margin: 0;
+  padding: 0;
+}
+#signup-box ul li {
+  margin: 20px 0;
+  font-size: 12px;
+  list-style: none;
+}
+#signup-text {
+  width: 66%;
+  text-align: center;
+  clear: both;
+  font-size: 12px;
+  padding-top: 12px;
+}
+#create-account input[name=email] {
+  -webkit-transition: width 300ms ease-out;
+  -moz-transition: width 300ms ease-out;
+  -o-transition: width 300ms ease-out;
+  -ms-transition: width 300ms ease-out;
+  transition: width 300ms ease-out;
+}
+#create-account input[name=email].has-gravatar {
+  width: 85%;
+}
+#create-account input[name=email] ~ .error {
+  -webkit-transition: right 300ms ease-out;
+  -moz-transition: right 300ms ease-out;
+  -o-transition: right 300ms ease-out;
+  -ms-transition: right 300ms ease-out;
+  transition: right 300ms ease-out;
+}
+#create-account input[name=email].has-gravatar ~ .error {
+  right: 55px;
+}
+#create-account .gravatar {
+  opacity: 0;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
+  filter: alpha(opacity=0);
+  -webkit-transition: opacity 300ms;
+  -moz-transition: opacity 300ms;
+  -o-transition: opacity 300ms;
+  -ms-transition: opacity 300ms;
+  transition: opacity 300ms;
+  position: absolute;
+  top: 11px;
+  right: 0;
+  -webkit-border-radius: 20px;
+  border-radius: 20px;
+}
+#create-account .gravatar.show {
+  opacity: 1;
+  -ms-filter: none;
+  filter: none;
+}
+#terms-container {
+  width: 550px;
+  text-align: left;
+  margin: 0 auto;
+  color: #535353;
+}
+#terms {
+  background: #fff;
+  border: 1px solid #c9c9c9;
+  -webkit-border-radius: 3px;
+  border-radius: 3px;
+  padding: 30px;
+  width: 100%;
+  -webkit-box-shadow: 0 0 0 1px rgba(255,255,255,0.3);
+  box-shadow: 0 0 0 1px rgba(255,255,255,0.3);
+  float: left;
+  position: relative;
+  z-index: 10;
+  margin-bottom: 100px;
+}
+table {
+  margin-top: 20px;
+  width: 100%;
+}
+thead {
+  font-weight: bold;
+  color: #2a2a2a;
+}
+tr {
+  border-bottom: 1px solid #eee;
+}
+tr:last-child {
+  border-bottom: none;
+}
+td,
+th {
+  padding: 14px 0;
+}
+table.highlight tr:hover {
+  background: #f0f0f0;
+}
+.pager {
+  margin: 0;
+  padding: 0;
+}
+.pager li {
+  display: inline-block;
+  margin: 0 5px;
+}
+.pager li.page a {
+  text-indent: 101%;
+  white-space: nowrap;
+  overflow: hidden;
+  background: #cecece;
+  -webkit-border-radius: 18px;
+  border-radius: 18px;
+  border-top: 1px solid #aaa;
+  border-bottom: 1px solid #fff;
+  -webkit-transition: background 200ms;
+  -moz-transition: background 200ms;
+  -o-transition: background 200ms;
+  -ms-transition: background 200ms;
+  transition: background 200ms;
+}
+.pager li.page a:hover {
+  background: #abed7f;
+}
+.pager li.active a {
+  background: #abed7f;
+  border-top: 1px solid transparent;
+  border-bottom: 1px solid #aaa;
+}
+.pager li a {
+  display: inline-block;
+  text-decoration: none;
+  font-size: 18px;
+  width: 18px;
+  height: 18px;
+  line-height: 12px;
+  color: #8f8f8f !important;
+}
+.pager li a:hover {
+  color: #565656 !important;
+}
+textarea,
+.input-field,
+input[type=text],
+input[type=password],
+.mr-editor {
+  margin: 12px 0;
+  width: 100%;
+  padding: 8px;
+  font-weight: 100;
+  font-size: 14px;
+  -webkit-font-smoothing: antialiased;
+  border: 1px solid #d4d4d4;
+  -webkit-box-shadow: inset 0 1px 5px 0 #f4f4f4;
+  box-shadow: inset 0 1px 5px 0 #f4f4f4;
+  outline: none;
+  background-color: transparent;
+  color: #888;
+}
+textarea:focus,
+.input-field:focus,
+input[type=text]:focus,
+input[type=password]:focus,
+.mr-editor:focus,
+textarea.focused,
+.input-field.focused,
+input[type=text].focused,
+input[type=password].focused,
+.mr-editor.focused {
+  border-color: #91c0e5;
+  color: #363636;
+}
+textarea:focus::-webkit-input-placeholder,
+.input-field:focus::-webkit-input-placeholder,
+input[type=text]:focus::-webkit-input-placeholder,
+input[type=password]:focus::-webkit-input-placeholder,
+.mr-editor:focus::-webkit-input-placeholder,
+textarea.focused::-webkit-input-placeholder,
+.input-field.focused::-webkit-input-placeholder,
+input[type=text].focused::-webkit-input-placeholder,
+input[type=password].focused::-webkit-input-placeholder,
+.mr-editor.focused::-webkit-input-placeholder {
+  color: #cdcdcd;
+}
+textarea:focus:-ms-input-placeholder,
+.input-field:focus:-ms-input-placeholder,
+input[type=text]:focus:-ms-input-placeholder,
+input[type=password]:focus:-ms-input-placeholder,
+.mr-editor:focus:-ms-input-placeholder,
+textarea.focused:-ms-input-placeholder,
+.input-field.focused:-ms-input-placeholder,
+input[type=text].focused:-ms-input-placeholder,
+input[type=password].focused:-ms-input-placeholder,
+.mr-editor.focused:-ms-input-placeholder {
+  color: #cdcdcd;
+}
+textarea.error,
+.input-field.error,
+input[type=text].error,
+input[type=password].error,
+.mr-editor.error {
+  border-color: #f4999d;
+  -webkit-box-shadow: inset 0 1px 5px 0 #fbd6d8;
+  box-shadow: inset 0 1px 5px 0 #fbd6d8;
+}
+textarea.suggestion,
+.input-field.suggestion,
+input[type=text].suggestion,
+input[type=password].suggestion,
+.mr-editor.suggestion {
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  border: 1px solid transparent;
+  color: #d4d4d4;
+  z-index: -20;
+}
+textarea.mr-input-trap,
+.input-field.mr-input-trap,
+input[type=text].mr-input-trap,
+input[type=password].mr-input-trap,
+.mr-editor.mr-input-trap {
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+.input {
+  margin: 12px 0;
+}
+.input .mr-editor {
+  margin: 0;
+}
+.input-field,
+input[type=text],
+input[type=password] {
+  height: 36px;
+  line-height: 17px;
+  vertical-align: top;
+}
+.email-field,
+input[name=email],
+input[name=email-suggestion] {
+  position: relative;
+}
+.email-field,
+input[name=email] {
+  z-index: 100;
+}
+input[name=email-suggestion] {
+  margin-top: -48px;
+  display: block;
+  border-color: transparent;
+}
+form p {
+  margin: 0;
+  position: relative;
+}
+form span.error {
+  position: absolute;
+  top: 23px;
+  right: 10px;
+  color: #c82c3c;
+  font-size: 12px;
+  text-align: right;
+  height: 14px;
+  line-height: 14px;
+}
+form .msg-placeholder {
+  height: 21px;
+}
+form .msg-placeholder .fade {
+  -webkit-transition: all 300ms ease-in;
+  -moz-transition: all 300ms ease-in;
+  -o-transition: all 300ms ease-in;
+  -ms-transition: all 300ms ease-in;
+  transition: all 300ms ease-in;
+  opacity: 1;
+  -ms-filter: none;
+  filter: none;
+}
+form .msg-placeholder .fade-out {
+  opacity: 0;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
+  filter: alpha(opacity=0);
+}
+form .msg-placeholder p.msg {
+  color: #535353;
+}
+form .msg-placeholder p.error {
+  color: #c82c3c;
+}
+form .msg-placeholder p.success {
+  color: #43b20d;
+}
+form .msg-placeholder p.sending {
+  color: #cdcdcd;
+}
+input ~ .error {
+  z-index: -1;
+}
+input:-webkit-autofill ~ .error {
+  pointer-events: none;
+  z-index: inherit;
+}
+.buttons {
+  margin-top: 20px;
+  margin-bottom: 20px;
+}
+.buttons.right {
+  text-align: right;
+}
+.buttons .submit {
+  display: inline-block;
+  float: right;
+}
+input[type=checkbox] {
+  -webkit-appearance: none;
+  width: 20px;
+  height: 20px;
+  line-height: 1em;
+  vertical-align: middle;
+  margin: 0px 1px 3px;
+  background-image: url("/core/ui-form-elements.svg");
+}
+input[type=radio] {
+  background-position: -20px 0;
+}
+input[type=radio]:checked {
+  background-position: 0 0;
+}
+input[type=checkbox] {
+  background-position: -60px 0;
+}
+input[type=checkbox]:checked {
+  background-position: -40px 0;
+}
+form a.cancel {
+  color: #cdcdcd;
+  text-transform: uppercase;
+  height: 36px;
+  line-height: 36px;
+  font-size: 12px;
+  display: inline-block;
+  padding: 0 10px;
+  margin: 0 10px;
+}
+form a.cancel:active {
+  margin-top: 1px;
+}
+form a.cancel:hover {
+  color: #a4a4a4;
+}
+form .inputs-inline input {
+  width: auto;
+  margin-left: 10px;
+}
+form .inputs-inline input:first-child {
+  margin-left: 0;
+}
+#overlay {
+  background: rgba(255,255,255,0.95);
+}
+#dialog .title {
+  width: 100%;
+  font-weight: bold;
+  text-shadow: 0 1px 0 #fff;
+}
+#dialog .content {
+  position: relative;
+  background: #fff;
+  -webkit-border-radius: 5px;
+  border-radius: 5px;
+  text-align: left;
+  padding: 0;
+}
+#dialog .content p {
+  padding: 15px;
+}
+#dialog.modal {
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+#dialog.file {
+  -webkit-border-radius: 0;
+  border-radius: 0;
+  min-width: 0;
+  max-width: none;
+}
+#dialog.file .title {
+  position: absolute;
+  top: -30px;
+  left: 0;
+  background: transparent;
+  padding: 0;
+}
+#dialog.file .content {
+  -webkit-border-radius: 0;
+  border-radius: 0;
+  line-height: 0;
+}
+#dialog.file img {
+  max-height: 500px;
+}
+#dialog .close {
+  width: 25px;
+  height: 25px;
+  line-height: 27px;
+  -webkit-border-radius: 25px;
+  border-radius: 25px;
+  top: auto;
+  position: absolute;
+  bottom: -60px;
+  left: 50%;
+  display: block;
+  color: #fff;
+  background: #cbcbcb;
+  font-weight: bold;
+  font-size: 18px;
+  text-align: center;
+  opacity: 0.9;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=90);
+  filter: alpha(opacity=90);
+  margin-left: -40px;
+}
+#dialog .close:hover {
+  color: #fff;
+  opacity: 0.75;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=75);
+  filter: alpha(opacity=75);
+}
+#dialog .close:active {
+  opacity: 1;
+  -ms-filter: none;
+  filter: none;
+}
+#dialog .close em {
+  display: block;
+  color: #cbcbcb;
+  position: absolute;
+  top: 0;
+  right: -45px;
+  font-style: normal;
+  font-weight: normal;
+}
+#notifications {
+  z-index: 1000;
+}
+#notifications li.notification {
+  padding-left: 50px;
+  border-top: 1px solid #fff;
+  -webkit-box-shadow: 0 0 0 1px #d2d2d2;
+  box-shadow: 0 0 0 1px #d2d2d2;
+  -webkit-border-radius: 5px;
+  border-radius: 5px;
+  font-size: 13px;
+  background: rgba(255,255,255,0.35) url("/core/icons/Location_Marker_32.png") 10px 50% no-repeat;
+}
+#notifications li.notification:hover {
+  -webkit-box-shadow: 0 0 0 1px #bdbdbd;
+  box-shadow: 0 0 0 1px #bdbdbd;
+  background: rgba(255,255,255,0.5) url("/core/icons/Location_Marker_32.png") 10px 50% no-repeat;
+}
+#notifications li.notification .content {
+  border-left: 1px solid #dbdbdb;
+  -webkit-box-shadow: -1px 0 0 #fff;
+  box-shadow: -1px 0 0 #fff;
+  text-align: left;
+  padding: 10px 20px;
+  color: #535353;
+}
+#notifications li.notification .title {
+  font-size: 13px;
+  color: #1f7dca;
+}
+#notifications li.notification .close {
+  opacity: 0.5;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
+  filter: alpha(opacity=50);
+}
+#notifications li.notification .close:hover {
+  opacity: 0.75;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=75);
+  filter: alpha(opacity=75);
+}
+#notifications li.progress-notification {
+  padding-left: 0;
+  background-image: none;
+}
+#notifications li.progress-notification .content {
+  border-left: 0;
+  padding-top: 20px;
+  padding-bottom: 20px;
+  padding-left: 60px;
+}
+#notifications li.progress-notification .progress-notification-canvas {
+  position: absolute;
+  top: 50%;
+  left: 10px;
+  margin-top: -20px;
+}
+#notifications li.progress-notification ul {
+  margin: 0;
+  padding: 0;
+}
+.pie {
+  border-width: 1px;
+}
+#bogo {
+  background-color: #a1cdc6;
+  margin-top: -94px;
+  height: 100%;
+}
+#bogo .top {
+  background-color: #a1cdc6;
+  margin-bottom: 240px;
+}
+#bogo .top h1 {
+  padding: 160px 0 80px 0;
+  font-size: 36px;
+  color: #7bb9b1;
+  text-shadow: 0 1px 0 rgba(255,255,255,0.5);
+}
+#bogo .top .logo {
+  background: url("/bogo/logo.png");
+  -webkit-background-size: 272px 90px;
+  -moz-background-size: 272px 90px;
+  background-size: 272px 90px;
+  margin: 50px auto;
+  display: block;
+  height: 90px;
+  width: 272px;
+}
+#bogo .mid {
+  background-color: #956c8c;
+  padding: 60px 200px 200px 200px;
+  display: block;
+}
+#bogo .mid ul>li {
+  margin: auto;
+  width: 60%;
+  color: #edf1dd;
+  font-size: 14px;
+  text-align: left;
+  font-weight: 400;
+  text-transform: uppercase;
+  letter-spacing: 2px;
+  list-style-type: none;
+  padding-top: 20px;
+}
+#bogo .mid ul>li p {
+  text-transform: none;
+  letter-spacing: 1px;
+  margin-bottom: 80px;
+  padding: 0 30px;
+  font-family: georgia;
+  font-style: oblique;
+}
+#bogo .mid ul>li .alts {
+  background: url("/bogo/alternates.png");
+  -webkit-background-size: 228px 315px;
+  -moz-background-size: 228px 315px;
+  background-size: 228px 315px;
+  height: 315px;
+  width: 228px;
+  margin: 30px 0;
+}
+#bogo .mid ul>li .marker {
+  background: url("/bogo/marker.png");
+  -webkit-background-size: 169px 81px;
+  -moz-background-size: 169px 81px;
+  background-size: 169px 81px;
+  height: 81px;
+  width: 169px;
+  margin: 30px 0;
+}
+#bogo .mid ul>li .colors {
+  clear: left;
+  margin-top: 30px;
+  display: block;
+}
+#bogo .mid ul>li .colors .sample {
+  height: 40px;
+  width: 40px;
+  margin-right: 10px;
+  float: left;
+  background-color: #ff0;
+}
+#bogo .mid ul>li #one {
+  background-color: #f2a973;
+}
+#bogo .mid ul>li #two {
+  background-color: #f0594c;
+}
+#bogo .mid ul>li #three {
+  background-color: #910335;
+}
+#bogo .mid ul>li #four {
+  background-color: #109d9d;
+}
+#bogo .mid ul>li #five {
+  background-color: #2a233d;
+}
+#bogo .mid ul>li #six {
+  background-color: #edf1dc;
+}
+ at media only screen and (-webkit-min-device-pixel-ratio: 2) {
+  .hentai .top .logo {
+    background-image: url("/bogo/logo at 2x.png");
+  }
+  .hentai .mid ul>li .alts {
+    background-image: url("/bogo/alternates at 2x.png");
+  }
+  .hentai .mid ul>li .marker {
+    background-image: url("/bogo/marker at 2x.png");
+  }
+}
+#top {
+  height: 45px;
+  position: fixed;
+  width: 100%;
+  z-index: 1000;
+}
+#content {
+  padding-top: 70px;
+  z-index: 5;
+  position: relative;
+  -webkit-transition: -webkit-transform 300ms ease-in-out, opacity 300ms ease-in-out;
+  -moz-transition: -webkit-transform 300ms ease-in-out, opacity 300ms ease-in-out;
+  -o-transition: -webkit-transform 300ms ease-in-out, opacity 300ms ease-in-out;
+  -ms-transition: -webkit-transform 300ms ease-in-out, opacity 300ms ease-in-out;
+  transition: -webkit-transform 300ms ease-in-out, opacity 300ms ease-in-out;
+}
+.transition {
+  -webkit-transform: translateY(50px);
+  -moz-transform: translateY(50px);
+  -o-transform: translateY(50px);
+  -ms-transform: translateY(50px);
+  transform: translateY(50px);
+  opacity: 0;
+  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
+  filter: alpha(opacity=0);
+}
diff --git a/benchmark/small.css b/benchmark/small.css
new file mode 100644
index 0000000..acce09f
--- /dev/null
+++ b/benchmark/small.css
@@ -0,0 +1,229 @@
+
+#dialog {
+  position: fixed;
+  left: 50%;
+  top: 150px;
+  max-width: 600px;
+  min-width: 250px;
+  border: 1px solid #eee;
+  background: white;
+  z-index: 1000;
+}
+
+#dialog .content {
+  padding: 15px 20px;
+}
+
+#dialog h1 {
+  margin: 0 0 5px 0;
+  font-size: 16px;
+  font-weight: normal;
+}
+
+#dialog p {
+  margin: 0;
+  padding: 0;
+  font-size: .9em;
+}
+
+/* close */
+
+#dialog .close {
+  position: absolute;
+  top: 3px;
+  right: 10px;
+  text-decoration: none;
+  color: #888;
+  font-size: 16px;
+  font-weight: bold;
+  display: none;
+}
+
+#dialog .close em {
+  display: none;
+}
+
+#dialog.closable .close {
+  display: block;
+}
+
+#dialog .close:hover {
+  color: black;
+}
+
+#dialog .close:active {
+  margin-top: 1px;
+}
+
+/* slide */
+
+#dialog.slide {
+  -webkit-transition: opacity 300ms, top 300ms;
+  -moz-transition: opacity 300ms, top 300ms;
+}
+
+#dialog.slide.hide {
+  opacity: 0;
+  top: -500px;
+}
+
+/* fade */
+
+#dialog.fade {
+  -webkit-transition: opacity 300ms;
+  -moz-transition: opacity 300ms;
+}
+
+#dialog.fade.hide {
+  opacity: 0;
+}
+
+/* scale */
+
+#dialog.scale {
+  -webkit-transition: -webkit-transform 300ms;
+  -moz-transition: -moz-transform 300ms;
+  -webkit-transform: scale(1);
+  -moz-transform: scale(1);
+}
+
+#dialog.scale.hide {
+  -webkit-transform: scale(0);
+  -moz-transform: scale(0);
+}
+#overlay {
+  position: fixed;
+  top: 0;
+  left: 0;
+  opacity: 1;
+  width: 100%;
+  height: 100%;
+  background: rgba(0,0,0,.75);
+  transition: opacity 300ms;
+  z-index: 500;
+}
+
+#overlay.hide {
+  pointer-events: none;
+  opacity: 0;
+}
+
+#notifications {
+  position: fixed;
+  top: 10px;
+  right: 15px;
+}
+
+#notifications li {
+  margin-bottom: 5px;
+  list-style: none;
+}
+
+.notification {
+  position: relative;
+  max-width: 600px;
+  min-width: 250px;
+  border: 1px solid #eee;
+  background: white;
+  z-index: 100;
+}
+
+.notification .content {
+  padding: 15px 20px;
+}
+
+.notification .title {
+  margin: 0 0 5px 0;
+  font-size: 16px;
+  font-weight: normal;
+}
+
+.notification p {
+  margin: 0;
+  padding: 0;
+  font-size: .9em;
+}
+
+.notification .close {
+  position: absolute;
+  top: 5px;
+  right: 10px;
+  text-decoration: none;
+  color: #888;
+  display: none;
+}
+
+.notification.closable .close {
+  display: block;
+}
+
+.notification .close:hover {
+  color: black;
+}
+
+.notification .close:active {
+  margin-top: 1px;
+}
+
+/* close */
+
+.notification .close {
+  position: absolute;
+  top: 3px;
+  right: 10px;
+  text-decoration: none;
+  color: #888;
+  font-size: 16px;
+  font-weight: bold;
+  display: none;
+}
+
+/* slide */
+
+.notification.slide {
+  -webkit-transition: opacity 300ms, top 300ms;
+  -moz-transition: opacity 300ms, top 300ms;
+}
+
+.notification.slide.hide {
+  opacity: 0;
+  top: -500px;
+}
+
+/* fade */
+
+.notification.fade {
+  -webkit-transition: opacity 300ms;
+  -moz-transition: opacity 300ms;
+}
+
+.notification.fade.hide {
+  opacity: 0;
+}
+
+/* scale */
+
+.notification.scale {
+  -webkit-transition: -webkit-transform 300ms;
+  -moz-transition: -moz-transform 300ms;
+  -webkit-transform: scale(1);
+  -moz-transform: scale(1);
+}
+
+.notification.scale.hide {
+  -webkit-transform: scale(0);
+  -moz-transform: scale(0);
+}
+.touch {
+  position: absolute;
+  z-index: 1000000;
+  display: block;
+  width: 50px;
+  height: 50px;
+  margin-top: -25px;
+  margin-left: -25px;
+  background: #a0a0a0;
+  border: 1px solid #d9d9d9;
+  opacity: .45;
+  -webkit-border-radius: 50px;
+}
\ No newline at end of file
diff --git a/component.json b/component.json
new file mode 100644
index 0000000..efeb52b
--- /dev/null
+++ b/component.json
@@ -0,0 +1,8 @@
+{
+  "name": "css-parse",
+  "repo": "visionmedia/css-parse",
+  "version": "1.7.0",
+  "description": "CSS parser",
+  "keywords": ["css", "parser", "stylesheet"],
+  "scripts": ["index.js"]
+}
diff --git a/examples/dialog.css b/examples/dialog.css
new file mode 100644
index 0000000..df74183
--- /dev/null
+++ b/examples/dialog.css
@@ -0,0 +1,92 @@
+#dialog {
+  position: fixed;
+  left: 50%;
+  top: 150px;
+  max-width: 600px;
+  min-width: 250px;
+  border: 1px solid #eee;
+  background: white;
+  z-index: 1000;
+}
+
+#dialog .content {
+  padding: 15px 20px;
+}
+
+#dialog h1 {
+  margin: 0 0 5px 0;
+  font-size: 16px;
+  font-weight: normal;
+}
+
+#dialog p {
+  margin: 0;
+  padding: 0;
+  font-size: .9em;
+}
+
+#dialog.modal {
+  box-shadow: 0 1px 8px 0 black;
+}
+
+/* close */
+
+#dialog .close {
+  position: absolute;
+  top: 3px;
+  right: 10px;
+  text-decoration: none;
+  color: #888;
+  font-size: 16px;
+  font-weight: bold;
+  display: none;
+}
+
+#dialog.closable .close {
+  display: block;
+}
+
+#dialog .close:hover {
+  color: black;
+}
+
+#dialog .close:active {
+  margin-top: 1px;
+}
+
+/* slide */
+
+#dialog.slide {
+  -webkit-transition: opacity 300ms, top 300ms;
+  -moz-transition: opacity 300ms, top 300ms;
+}
+
+#dialog.slide.hide {
+  opacity: 0;
+  top: -500px;
+}
+
+/* fade */
+
+#dialog.fade {
+  -webkit-transition: opacity 300ms;
+  -moz-transition: opacity 300ms;
+}
+
+#dialog.fade.hide {
+  opacity: 0;
+}
+
+/* scale */
+
+#dialog.scale {
+  -webkit-transition: -webkit-transform 300ms;
+  -moz-transition: -moz-transform 300ms;
+  -webkit-transform: scale(1);
+  -moz-transform: scale(1);
+}
+
+#dialog.scale.hide {
+  -webkit-transform: scale(0);
+  -moz-transform: scale(0);
+}
\ No newline at end of file
diff --git a/examples/dialog.js b/examples/dialog.js
new file mode 100644
index 0000000..f115a16
--- /dev/null
+++ b/examples/dialog.js
@@ -0,0 +1,11 @@
+
+/**
+ * Module dependencies.
+ */
+
+var parse = require('..')
+  , fs = require('fs')
+  , read = fs.readFileSync
+  , css = read('examples/dialog.css', 'utf8');
+
+console.log(JSON.stringify(parse(css), null, 2));
\ No newline at end of file
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..3e20093
--- /dev/null
+++ b/index.js
@@ -0,0 +1,494 @@
+
+module.exports = function(css, options){
+  options = options || {};
+
+  /**
+   * Positional.
+   */
+
+  var lineno = 1;
+  var column = 1;
+
+  /**
+   * Update lineno and column based on `str`.
+   */
+
+  function updatePosition(str) {
+    var lines = str.match(/\n/g);
+    if (lines) lineno += lines.length;
+    var i = str.lastIndexOf('\n');
+    column = ~i ? str.length - i : column + str.length;
+  }
+
+  /**
+   * Mark position and patch `node.position`.
+   */
+
+  function position() {
+    var start = { line: lineno, column: column };
+    if (!options.position) return positionNoop;
+
+    return function(node){
+      node.position = {
+        start: start,
+        end: { line: lineno, column: column },
+        source: options.source
+      };
+
+      whitespace();
+      return node;
+    }
+  }
+
+  /**
+   * Return `node`.
+   */
+
+  function positionNoop(node) {
+    whitespace();
+    return node;
+  }
+
+  /**
+   * Error `msg`.
+   */
+
+  function error(msg) {
+    var err = new Error(msg + ' near line ' + lineno + ':' + column);
+    err.filename = options.source;
+    err.line = lineno;
+    err.column = column;
+    err.source = css;
+    throw err;
+  }
+
+  /**
+   * Parse stylesheet.
+   */
+
+  function stylesheet() {
+    return {
+      type: 'stylesheet',
+      stylesheet: {
+        rules: rules()
+      }
+    };
+  }
+
+  /**
+   * Opening brace.
+   */
+
+  function open() {
+    return match(/^{\s*/);
+  }
+
+  /**
+   * Closing brace.
+   */
+
+  function close() {
+    return match(/^}/);
+  }
+
+  /**
+   * Parse ruleset.
+   */
+
+  function rules() {
+    var node;
+    var rules = [];
+    whitespace();
+    comments(rules);
+    while (css.charAt(0) != '}' && (node = atrule() || rule())) {
+      rules.push(node);
+      comments(rules);
+    }
+    return rules;
+  }
+
+  /**
+   * Match `re` and return captures.
+   */
+
+  function match(re) {
+    var m = re.exec(css);
+    if (!m) return;
+    var str = m[0];
+    updatePosition(str);
+    css = css.slice(str.length);
+    return m;
+  }
+
+  /**
+   * Parse whitespace.
+   */
+
+  function whitespace() {
+    match(/^\s*/);
+  }
+
+  /**
+   * Parse comments;
+   */
+
+  function comments(rules) {
+    var c;
+    rules = rules || [];
+    while (c = comment()) rules.push(c);
+    return rules;
+  }
+
+  /**
+   * Parse comment.
+   */
+
+  function comment() {
+    var pos = position();
+    if ('/' != css.charAt(0) || '*' != css.charAt(1)) return;
+
+    var i = 2;
+    while (null != css.charAt(i) && ('*' != css.charAt(i) || '/' != css.charAt(i + 1))) ++i;
+    i += 2;
+
+    var str = css.slice(2, i - 2);
+    column += 2;
+    updatePosition(str);
+    css = css.slice(i);
+    column += 2;
+
+    return pos({
+      type: 'comment',
+      comment: str
+    });
+  }
+
+  /**
+   * Parse selector.
+   */
+
+  function selector() {
+    var m = match(/^([^{]+)/);
+    if (!m) return;
+    return trim(m[0]).split(/\s*,\s*/);
+  }
+
+  /**
+   * Parse declaration.
+   */
+
+  function declaration() {
+    var pos = position();
+
+    // prop
+    var prop = match(/^(\*?[-#\/\*\w]+(\[[0-9a-z_-]+\])?)\s*/);
+    if (!prop) return;
+    prop = trim(prop[0]);
+
+    // :
+    if (!match(/^:\s*/)) return error("property missing ':'");
+
+    // val
+    var val = match(/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^\)]*?\)|[^};])+)/);
+    if (!val) return error('property missing value');
+
+    var ret = pos({
+      type: 'declaration',
+      property: prop,
+      value: trim(val[0])
+    });
+
+    // ;
+    match(/^[;\s]*/);
+
+    return ret;
+  }
+
+  /**
+   * Parse declarations.
+   */
+
+  function declarations() {
+    var decls = [];
+
+    if (!open()) return error("missing '{'");
+    comments(decls);
+
+    // declarations
+    var decl;
+    while (decl = declaration()) {
+      decls.push(decl);
+      comments(decls);
+    }
+
+    if (!close()) return error("missing '}'");
+    return decls;
+  }
+
+  /**
+   * Parse keyframe.
+   */
+
+  function keyframe() {
+    var m;
+    var vals = [];
+    var pos = position();
+
+    while (m = match(/^((\d+\.\d+|\.\d+|\d+)%?|[a-z]+)\s*/)) {
+      vals.push(m[1]);
+      match(/^,\s*/);
+    }
+
+    if (!vals.length) return;
+
+    return pos({
+      type: 'keyframe',
+      values: vals,
+      declarations: declarations()
+    });
+  }
+
+  /**
+   * Parse keyframes.
+   */
+
+  function atkeyframes() {
+    var pos = position();
+    var m = match(/^@([-\w]+)?keyframes */);
+
+    if (!m) return;
+    var vendor = m[1];
+
+    // identifier
+    var m = match(/^([-\w]+)\s*/);
+    if (!m) return error("@keyframes missing name");
+    var name = m[1];
+
+    if (!open()) return error("@keyframes missing '{'");
+
+    var frame;
+    var frames = comments();
+    while (frame = keyframe()) {
+      frames.push(frame);
+      frames = frames.concat(comments());
+    }
+
+    if (!close()) return error("@keyframes missing '}'");
+
+    return pos({
+      type: 'keyframes',
+      name: name,
+      vendor: vendor,
+      keyframes: frames
+    });
+  }
+
+  /**
+   * Parse supports.
+   */
+
+  function atsupports() {
+    var pos = position();
+    var m = match(/^@supports *([^{]+)/);
+
+    if (!m) return;
+    var supports = trim(m[1]);
+
+    if (!open()) return error("@supports missing '{'");
+
+    var style = comments().concat(rules());
+
+    if (!close()) return error("@supports missing '}'");
+
+    return pos({
+      type: 'supports',
+      supports: supports,
+      rules: style
+    });
+  }
+
+  /**
+   * Parse host.
+   */
+
+  function athost() {
+    var pos = position();
+    var m = match(/^@host */);
+
+    if (!m) return;
+
+    if (!open()) return error("@host missing '{'");
+
+    var style = comments().concat(rules());
+
+    if (!close()) return error("@host missing '}'");
+
+    return pos({
+      type: 'host',
+      rules: style
+    });
+  }
+
+  /**
+   * Parse media.
+   */
+
+  function atmedia() {
+    var pos = position();
+    var m = match(/^@media *([^{]+)/);
+
+    if (!m) return;
+    var media = trim(m[1]);
+
+    if (!open()) return error("@media missing '{'");
+
+    var style = comments().concat(rules());
+
+    if (!close()) return error("@media missing '}'");
+
+    return pos({
+      type: 'media',
+      media: media,
+      rules: style
+    });
+  }
+
+  /**
+   * Parse paged media.
+   */
+
+  function atpage() {
+    var pos = position();
+    var m = match(/^@page */);
+    if (!m) return;
+
+    var sel = selector() || [];
+
+    if (!open()) return error("@page missing '{'");
+    var decls = comments();
+
+    // declarations
+    var decl;
+    while (decl = declaration()) {
+      decls.push(decl);
+      decls = decls.concat(comments());
+    }
+
+    if (!close()) return error("@page missing '}'");
+
+    return pos({
+      type: 'page',
+      selectors: sel,
+      declarations: decls
+    });
+  }
+
+  /**
+   * Parse document.
+   */
+
+  function atdocument() {
+    var pos = position();
+    var m = match(/^@([-\w]+)?document *([^{]+)/);
+    if (!m) return;
+
+    var vendor = trim(m[1]);
+    var doc = trim(m[2]);
+
+    if (!open()) return error("@document missing '{'");
+
+    var style = comments().concat(rules());
+
+    if (!close()) return error("@document missing '}'");
+
+    return pos({
+      type: 'document',
+      document: doc,
+      vendor: vendor,
+      rules: style
+    });
+  }
+
+  /**
+   * Parse import
+   */
+
+  function atimport() {
+    return _atrule('import');
+  }
+
+  /**
+   * Parse charset
+   */
+
+  function atcharset() {
+    return _atrule('charset');
+  }
+
+  /**
+   * Parse namespace
+   */
+
+  function atnamespace() {
+    return _atrule('namespace')
+  }
+
+  /**
+   * Parse non-block at-rules
+   */
+
+  function _atrule(name) {
+    var pos = position();
+    var m = match(new RegExp('^@' + name + ' *([^;\\n]+);'));
+    if (!m) return;
+    var ret = { type: name };
+    ret[name] = trim(m[1]);
+    return pos(ret);
+  }
+
+  /**
+   * Parse at rule.
+   */
+
+  function atrule() {
+    if (css[0] != '@') return;
+
+    return atkeyframes()
+      || atmedia()
+      || atsupports()
+      || atimport()
+      || atcharset()
+      || atnamespace()
+      || atdocument()
+      || atpage()
+      || athost();
+  }
+
+  /**
+   * Parse rule.
+   */
+
+  function rule() {
+    var pos = position();
+    var sel = selector();
+
+    if (!sel) return;
+    comments();
+
+    return pos({
+      type: 'rule',
+      selectors: sel,
+      declarations: declarations()
+    });
+  }
+
+  return stylesheet();
+};
+
+/**
+ * Trim `str`.
+ */
+
+function trim(str) {
+  return str ? str.replace(/^\s+|\s+$/g, '') : '';
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..3acca2f
--- /dev/null
+++ b/package.json
@@ -0,0 +1,29 @@
+{
+  "name": "css-parse",
+  "version": "1.7.0",
+  "description": "CSS parser",
+  "keywords": [
+    "css",
+    "parser",
+    "stylesheet"
+  ],
+  "author": "TJ Holowaychuk <tj at vision-media.ca>",
+  "license": "MIT",
+  "devDependencies": {
+    "mocha": "*",
+    "should": "*",
+    "matcha": "~0.4.0",
+    "bytes": "~0.2.1"
+  },
+  "main": "index",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/visionmedia/css-parse.git"
+  },
+  "scripts": {
+    "test": "make test"
+  },
+  "files": [
+    "index.js"
+  ]
+}
diff --git a/test/cases/charset.css b/test/cases/charset.css
new file mode 100644
index 0000000..035601c
--- /dev/null
+++ b/test/cases/charset.css
@@ -0,0 +1,2 @@
+ at charset "UTF-8";       /* Set the encoding of the style sheet to Unicode UTF-8*/
+ at charset 'iso-8859-15'; /* Set the encoding of the style sheet to Latin-9 (Western European languages, with euro sign) */
diff --git a/test/cases/charset.json b/test/cases/charset.json
new file mode 100644
index 0000000..7f8eafa
--- /dev/null
+++ b/test/cases/charset.json
@@ -0,0 +1,67 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "charset",
+        "charset": "\"UTF-8\"",
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 1,
+            "column": 18
+          },
+          "source": "charset.css"
+        }
+      },
+      {
+        "type": "comment",
+        "comment": " Set the encoding of the style sheet to Unicode UTF-8",
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 25
+          },
+          "end": {
+            "line": 1,
+            "column": 82
+          },
+          "source": "charset.css"
+        }
+      },
+      {
+        "type": "charset",
+        "charset": "'iso-8859-15'",
+        "position": {
+          "start": {
+            "line": 2,
+            "column": 1
+          },
+          "end": {
+            "line": 2,
+            "column": 24
+          },
+          "source": "charset.css"
+        }
+      },
+      {
+        "type": "comment",
+        "comment": " Set the encoding of the style sheet to Latin-9 (Western European languages, with euro sign) ",
+        "position": {
+          "start": {
+            "line": 2,
+            "column": 25
+          },
+          "end": {
+            "line": 2,
+            "column": 122
+          },
+          "source": "charset.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/colon-space.css b/test/cases/colon-space.css
new file mode 100644
index 0000000..21354be
--- /dev/null
+++ b/test/cases/colon-space.css
@@ -0,0 +1,4 @@
+a {
+    margin  : auto;
+    padding : 0;
+}
\ No newline at end of file
diff --git a/test/cases/colon-space.json b/test/cases/colon-space.json
new file mode 100644
index 0000000..607ad36
--- /dev/null
+++ b/test/cases/colon-space.json
@@ -0,0 +1,58 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "rule",
+        "selectors": [
+          "a"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "margin",
+            "value": "auto",
+            "position": {
+              "start": {
+                "line": 2,
+                "column": 5
+              },
+              "end": {
+                "line": 2,
+                "column": 19
+              },
+              "source": "colon-space.css"
+            }
+          },
+          {
+            "type": "declaration",
+            "property": "padding",
+            "value": "0",
+            "position": {
+              "start": {
+                "line": 3,
+                "column": 5
+              },
+              "end": {
+                "line": 3,
+                "column": 16
+              },
+              "source": "colon-space.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 4,
+            "column": 2
+          },
+          "source": "colon-space.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/comment.css b/test/cases/comment.css
new file mode 100644
index 0000000..6fadbbb
--- /dev/null
+++ b/test/cases/comment.css
@@ -0,0 +1,10 @@
+/* 1 */
+
+body { /* 2 */
+  /* 3 */
+  /**/foo: 'bar';
+  /* 4 */
+} /* 5 */
+
+/* 6 */
+
diff --git a/test/cases/comment.json b/test/cases/comment.json
new file mode 100644
index 0000000..ba281b6
--- /dev/null
+++ b/test/cases/comment.json
@@ -0,0 +1,147 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "comment",
+        "comment": " 1 ",
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 1,
+            "column": 8
+          },
+          "source": "comment.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "body"
+        ],
+        "declarations": [
+          {
+            "type": "comment",
+            "comment": " 2 ",
+            "position": {
+              "start": {
+                "line": 3,
+                "column": 8
+              },
+              "end": {
+                "line": 3,
+                "column": 15
+              },
+              "source": "comment.css"
+            }
+          },
+          {
+            "type": "comment",
+            "comment": " 3 ",
+            "position": {
+              "start": {
+                "line": 4,
+                "column": 3
+              },
+              "end": {
+                "line": 4,
+                "column": 10
+              },
+              "source": "comment.css"
+            }
+          },
+          {
+            "type": "comment",
+            "comment": "",
+            "position": {
+              "start": {
+                "line": 5,
+                "column": 3
+              },
+              "end": {
+                "line": 5,
+                "column": 7
+              },
+              "source": "comment.css"
+            }
+          },
+          {
+            "type": "declaration",
+            "property": "foo",
+            "value": "'bar'",
+            "position": {
+              "start": {
+                "line": 5,
+                "column": 7
+              },
+              "end": {
+                "line": 5,
+                "column": 17
+              },
+              "source": "comment.css"
+            }
+          },
+          {
+            "type": "comment",
+            "comment": " 4 ",
+            "position": {
+              "start": {
+                "line": 6,
+                "column": 3
+              },
+              "end": {
+                "line": 6,
+                "column": 10
+              },
+              "source": "comment.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 3,
+            "column": 1
+          },
+          "end": {
+            "line": 7,
+            "column": 2
+          },
+          "source": "comment.css"
+        }
+      },
+      {
+        "type": "comment",
+        "comment": " 5 ",
+        "position": {
+          "start": {
+            "line": 7,
+            "column": 3
+          },
+          "end": {
+            "line": 7,
+            "column": 10
+          },
+          "source": "comment.css"
+        }
+      },
+      {
+        "type": "comment",
+        "comment": " 6 ",
+        "position": {
+          "start": {
+            "line": 9,
+            "column": 1
+          },
+          "end": {
+            "line": 9,
+            "column": 8
+          },
+          "source": "comment.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/comment.url.css b/test/cases/comment.url.css
new file mode 100644
index 0000000..6788a85
--- /dev/null
+++ b/test/cases/comment.url.css
@@ -0,0 +1,7 @@
+/* http://foo.com/bar/baz.html */
+/**/
+
+foo { /*/*/
+  /* something */
+  bar: baz; /* http://foo.com/bar/baz.html */
+}
diff --git a/test/cases/comment.url.json b/test/cases/comment.url.json
new file mode 100644
index 0000000..eb00189
--- /dev/null
+++ b/test/cases/comment.url.json
@@ -0,0 +1,117 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "comment",
+        "comment": " http://foo.com/bar/baz.html ",
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 1,
+            "column": 34
+          },
+          "source": "comment.url.css"
+        }
+      },
+      {
+        "type": "comment",
+        "comment": "",
+        "position": {
+          "start": {
+            "line": 2,
+            "column": 1
+          },
+          "end": {
+            "line": 2,
+            "column": 5
+          },
+          "source": "comment.url.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "foo"
+        ],
+        "declarations": [
+          {
+            "type": "comment",
+            "comment": "/",
+            "position": {
+              "start": {
+                "line": 4,
+                "column": 7
+              },
+              "end": {
+                "line": 4,
+                "column": 12
+              },
+              "source": "comment.url.css"
+            }
+          },
+          {
+            "type": "comment",
+            "comment": " something ",
+            "position": {
+              "start": {
+                "line": 5,
+                "column": 3
+              },
+              "end": {
+                "line": 5,
+                "column": 18
+              },
+              "source": "comment.url.css"
+            }
+          },
+          {
+            "type": "declaration",
+            "property": "bar",
+            "value": "baz",
+            "position": {
+              "start": {
+                "line": 6,
+                "column": 3
+              },
+              "end": {
+                "line": 6,
+                "column": 11
+              },
+              "source": "comment.url.css"
+            }
+          },
+          {
+            "type": "comment",
+            "comment": " http://foo.com/bar/baz.html ",
+            "position": {
+              "start": {
+                "line": 6,
+                "column": 13
+              },
+              "end": {
+                "line": 6,
+                "column": 46
+              },
+              "source": "comment.url.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 4,
+            "column": 1
+          },
+          "end": {
+            "line": 7,
+            "column": 2
+          },
+          "source": "comment.url.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/document.css b/test/cases/document.css
new file mode 100644
index 0000000..8c2cd86
--- /dev/null
+++ b/test/cases/document.css
@@ -0,0 +1,7 @@
+ at -moz-document url-prefix() {
+  /* ui above */
+  .ui-select .ui-btn select {
+    /* ui inside */
+    opacity:.0001
+  }
+}
diff --git a/test/cases/document.json b/test/cases/document.json
new file mode 100644
index 0000000..916e0dc
--- /dev/null
+++ b/test/cases/document.json
@@ -0,0 +1,90 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "document",
+        "document": "url-prefix()",
+        "vendor": "-moz-",
+        "rules": [
+          {
+            "type": "comment",
+            "comment": " ui above ",
+            "position": {
+              "start": {
+                "line": 2,
+                "column": 3
+              },
+              "end": {
+                "line": 2,
+                "column": 17
+              },
+              "source": "document.css"
+            }
+          },
+          {
+            "type": "rule",
+            "selectors": [
+              ".ui-select .ui-btn select"
+            ],
+            "declarations": [
+              {
+                "type": "comment",
+                "comment": " ui inside ",
+                "position": {
+                  "start": {
+                    "line": 4,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 4,
+                    "column": 20
+                  },
+                  "source": "document.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "opacity",
+                "value": ".0001",
+                "position": {
+                  "start": {
+                    "line": 5,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 6,
+                    "column": 3
+                  },
+                  "source": "document.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 3,
+                "column": 3
+              },
+              "end": {
+                "line": 6,
+                "column": 4
+              },
+              "source": "document.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 7,
+            "column": 2
+          },
+          "source": "document.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/empty.css b/test/cases/empty.css
new file mode 100644
index 0000000..e69de29
diff --git a/test/cases/empty.json b/test/cases/empty.json
new file mode 100644
index 0000000..9a68693
--- /dev/null
+++ b/test/cases/empty.json
@@ -0,0 +1,6 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": []
+  }
+}
\ No newline at end of file
diff --git a/test/cases/escapes.css b/test/cases/escapes.css
new file mode 100644
index 0000000..b4271ad
--- /dev/null
+++ b/test/cases/escapes.css
@@ -0,0 +1,54 @@
+/* tests compressed for easy testing */
+/* http://mathiasbynens.be/notes/css-escapes */
+/* will match elements with class=":`(" */
+.\3A \`\({}
+/* will match elements with class="1a2b3c" */
+.\31 a2b3c{}
+/* will match the element with id="#fake-id" */
+#\#fake-id{}
+/* will match the element with id="---" */
+#\---{}
+/* will match the element with id="-a-b-c-" */
+#-a-b-c-{}
+/* will match the element with id="©" */
+#©{}
+/* More tests from http://mathiasbynens.be/demo/html5-id */
+html{font:1.2em/1.6 Arial;}
+code{font-family:Consolas;}
+li code{background:rgba(255, 255, 255, .5);padding:.3em;}
+li{background:orange;}
+#♥{background:lime;}
+#©{background:lime;}
+#“‘’”{background:lime;}
+#☺☃{background:lime;}
+#⌘⌥{background:lime;}
+#𝄞♪♩♫♬{background:lime;}
+#\?{background:lime;}
+#\@{background:lime;}
+#\.{background:lime;}
+#\3A \){background:lime;}
+#\3A \`\({background:lime;}
+#\31 23{background:lime;}
+#\31 a2b3c{background:lime;}
+#\<p\>{background:lime;}
+#\<\>\<\<\<\>\>\<\>{background:lime;}
+#\+\+\+\+\+\+\+\+\+\+\[\>\+\+\+\+\+\+\+\>\+\+\+\+\+\+\+\+\+\+\>\+\+\+\>\+\<\<\<\<\-\]\>\+\+\.\>\+\.\+\+\+\+\+\+\+\.\.\+\+\+\.\>\+\+\.\<\<\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\.\>\.\+\+\+\.\-\-\-\-\-\-\.\-\-\-\-\-\-\-\-\.\>\+\.\>\.{background:lime;}
+#\#{background:lime;}
+#\#\#{background:lime;}
+#\#\.\#\.\#{background:lime;}
+#\_{background:lime;}
+#\.fake\-class{background:lime;}
+#foo\.bar{background:lime;}
+#\3A hover{background:lime;}
+#\3A hover\3A focus\3A active{background:lime;}
+#\[attr\=value\]{background:lime;}
+#f\/o\/o{background:lime;}
+#f\\o\\o{background:lime;}
+#f\*o\*o{background:lime;}
+#f\!o\!o{background:lime;}
+#f\'o\'o{background:lime;}
+#f\~o\~o{background:lime;}
+#f\+o\+o{background:lime;}
+
+/* css-parse does not yet pass this test */
+/*#\{\}{background:lime;}*/
diff --git a/test/cases/escapes.json b/test/cases/escapes.json
new file mode 100644
index 0000000..8b99960
--- /dev/null
+++ b/test/cases/escapes.json
@@ -0,0 +1,1556 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "comment",
+        "comment": " tests compressed for easy testing ",
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 1,
+            "column": 40
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "comment",
+        "comment": " http://mathiasbynens.be/notes/css-escapes ",
+        "position": {
+          "start": {
+            "line": 2,
+            "column": 1
+          },
+          "end": {
+            "line": 2,
+            "column": 48
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "comment",
+        "comment": " will match elements with class=\":`(\" ",
+        "position": {
+          "start": {
+            "line": 3,
+            "column": 1
+          },
+          "end": {
+            "line": 3,
+            "column": 43
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          ".\\3A \\`\\("
+        ],
+        "declarations": [],
+        "position": {
+          "start": {
+            "line": 4,
+            "column": 1
+          },
+          "end": {
+            "line": 4,
+            "column": 12
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "comment",
+        "comment": " will match elements with class=\"1a2b3c\" ",
+        "position": {
+          "start": {
+            "line": 5,
+            "column": 1
+          },
+          "end": {
+            "line": 5,
+            "column": 46
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          ".\\31 a2b3c"
+        ],
+        "declarations": [],
+        "position": {
+          "start": {
+            "line": 6,
+            "column": 1
+          },
+          "end": {
+            "line": 6,
+            "column": 13
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "comment",
+        "comment": " will match the element with id=\"#fake-id\" ",
+        "position": {
+          "start": {
+            "line": 7,
+            "column": 1
+          },
+          "end": {
+            "line": 7,
+            "column": 48
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\#fake-id"
+        ],
+        "declarations": [],
+        "position": {
+          "start": {
+            "line": 8,
+            "column": 1
+          },
+          "end": {
+            "line": 8,
+            "column": 13
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "comment",
+        "comment": " will match the element with id=\"---\" ",
+        "position": {
+          "start": {
+            "line": 9,
+            "column": 1
+          },
+          "end": {
+            "line": 9,
+            "column": 43
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\---"
+        ],
+        "declarations": [],
+        "position": {
+          "start": {
+            "line": 10,
+            "column": 1
+          },
+          "end": {
+            "line": 10,
+            "column": 8
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "comment",
+        "comment": " will match the element with id=\"-a-b-c-\" ",
+        "position": {
+          "start": {
+            "line": 11,
+            "column": 1
+          },
+          "end": {
+            "line": 11,
+            "column": 47
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#-a-b-c-"
+        ],
+        "declarations": [],
+        "position": {
+          "start": {
+            "line": 12,
+            "column": 1
+          },
+          "end": {
+            "line": 12,
+            "column": 11
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "comment",
+        "comment": " will match the element with id=\"©\" ",
+        "position": {
+          "start": {
+            "line": 13,
+            "column": 1
+          },
+          "end": {
+            "line": 13,
+            "column": 41
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#©"
+        ],
+        "declarations": [],
+        "position": {
+          "start": {
+            "line": 14,
+            "column": 1
+          },
+          "end": {
+            "line": 14,
+            "column": 5
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "comment",
+        "comment": " More tests from http://mathiasbynens.be/demo/html5-id ",
+        "position": {
+          "start": {
+            "line": 15,
+            "column": 1
+          },
+          "end": {
+            "line": 15,
+            "column": 60
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "html"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "font",
+            "value": "1.2em/1.6 Arial",
+            "position": {
+              "start": {
+                "line": 16,
+                "column": 6
+              },
+              "end": {
+                "line": 16,
+                "column": 26
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 16,
+            "column": 1
+          },
+          "end": {
+            "line": 16,
+            "column": 28
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "code"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "font-family",
+            "value": "Consolas",
+            "position": {
+              "start": {
+                "line": 17,
+                "column": 6
+              },
+              "end": {
+                "line": 17,
+                "column": 26
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 17,
+            "column": 1
+          },
+          "end": {
+            "line": 17,
+            "column": 28
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "li code"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "rgba(255, 255, 255, .5)",
+            "position": {
+              "start": {
+                "line": 18,
+                "column": 9
+              },
+              "end": {
+                "line": 18,
+                "column": 43
+              },
+              "source": "escapes.css"
+            }
+          },
+          {
+            "type": "declaration",
+            "property": "padding",
+            "value": ".3em",
+            "position": {
+              "start": {
+                "line": 18,
+                "column": 44
+              },
+              "end": {
+                "line": 18,
+                "column": 56
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 18,
+            "column": 1
+          },
+          "end": {
+            "line": 18,
+            "column": 58
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "li"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "orange",
+            "position": {
+              "start": {
+                "line": 19,
+                "column": 4
+              },
+              "end": {
+                "line": 19,
+                "column": 21
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 19,
+            "column": 1
+          },
+          "end": {
+            "line": 19,
+            "column": 23
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#♥"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 20,
+                "column": 4
+              },
+              "end": {
+                "line": 20,
+                "column": 19
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 20,
+            "column": 1
+          },
+          "end": {
+            "line": 20,
+            "column": 21
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#©"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 21,
+                "column": 4
+              },
+              "end": {
+                "line": 21,
+                "column": 19
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 21,
+            "column": 1
+          },
+          "end": {
+            "line": 21,
+            "column": 21
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#“‘’”"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 22,
+                "column": 7
+              },
+              "end": {
+                "line": 22,
+                "column": 22
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 22,
+            "column": 1
+          },
+          "end": {
+            "line": 22,
+            "column": 24
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#☺☃"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 23,
+                "column": 5
+              },
+              "end": {
+                "line": 23,
+                "column": 20
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 23,
+            "column": 1
+          },
+          "end": {
+            "line": 23,
+            "column": 22
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#⌘⌥"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 24,
+                "column": 5
+              },
+              "end": {
+                "line": 24,
+                "column": 20
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 24,
+            "column": 1
+          },
+          "end": {
+            "line": 24,
+            "column": 22
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#𝄞♪♩♫♬"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 25,
+                "column": 9
+              },
+              "end": {
+                "line": 25,
+                "column": 24
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 25,
+            "column": 1
+          },
+          "end": {
+            "line": 25,
+            "column": 26
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\?"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 26,
+                "column": 5
+              },
+              "end": {
+                "line": 26,
+                "column": 20
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 26,
+            "column": 1
+          },
+          "end": {
+            "line": 26,
+            "column": 22
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\@"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 27,
+                "column": 5
+              },
+              "end": {
+                "line": 27,
+                "column": 20
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 27,
+            "column": 1
+          },
+          "end": {
+            "line": 27,
+            "column": 22
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\."
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 28,
+                "column": 5
+              },
+              "end": {
+                "line": 28,
+                "column": 20
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 28,
+            "column": 1
+          },
+          "end": {
+            "line": 28,
+            "column": 22
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\3A \\)"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 29,
+                "column": 9
+              },
+              "end": {
+                "line": 29,
+                "column": 24
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 29,
+            "column": 1
+          },
+          "end": {
+            "line": 29,
+            "column": 26
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\3A \\`\\("
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 30,
+                "column": 11
+              },
+              "end": {
+                "line": 30,
+                "column": 26
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 30,
+            "column": 1
+          },
+          "end": {
+            "line": 30,
+            "column": 28
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\31 23"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 31,
+                "column": 9
+              },
+              "end": {
+                "line": 31,
+                "column": 24
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 31,
+            "column": 1
+          },
+          "end": {
+            "line": 31,
+            "column": 26
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\31 a2b3c"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 32,
+                "column": 12
+              },
+              "end": {
+                "line": 32,
+                "column": 27
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 32,
+            "column": 1
+          },
+          "end": {
+            "line": 32,
+            "column": 29
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\<p\\>"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 33,
+                "column": 8
+              },
+              "end": {
+                "line": 33,
+                "column": 23
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 33,
+            "column": 1
+          },
+          "end": {
+            "line": 33,
+            "column": 25
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\<\\>\\<\\<\\<\\>\\>\\<\\>"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 34,
+                "column": 21
+              },
+              "end": {
+                "line": 34,
+                "column": 36
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 34,
+            "column": 1
+          },
+          "end": {
+            "line": 34,
+            "column": 38
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\[\\>\\+\\+\\+\\+\\+\\+\\+\\>\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\>\\+\\+\\+\\>\\+\\<\\<\\<\\<\\-\\]\\>\\+\\+\\.\\>\\+\\.\\+\\+\\+\\+\\+\\+\\+\\.\\.\\+\\+\\+\\.\\>\\+\\+\\.\\<\\<\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\.\\>\\.\\+\\+\\+\\.\\-\\-\\-\\-\\-\\-\\.\\-\\-\\-\\-\\-\\-\\-\\-\\.\\>\\+\\.\\>\\."
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 35,
+                "column": 225
+              },
+              "end": {
+                "line": 35,
+                "column": 240
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 35,
+            "column": 1
+          },
+          "end": {
+            "line": 35,
+            "column": 242
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\#"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 36,
+                "column": 5
+              },
+              "end": {
+                "line": 36,
+                "column": 20
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 36,
+            "column": 1
+          },
+          "end": {
+            "line": 36,
+            "column": 22
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\#\\#"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 37,
+                "column": 7
+              },
+              "end": {
+                "line": 37,
+                "column": 22
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 37,
+            "column": 1
+          },
+          "end": {
+            "line": 37,
+            "column": 24
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\#\\.\\#\\.\\#"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 38,
+                "column": 13
+              },
+              "end": {
+                "line": 38,
+                "column": 28
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 38,
+            "column": 1
+          },
+          "end": {
+            "line": 38,
+            "column": 30
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\_"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 39,
+                "column": 5
+              },
+              "end": {
+                "line": 39,
+                "column": 20
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 39,
+            "column": 1
+          },
+          "end": {
+            "line": 39,
+            "column": 22
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\.fake\\-class"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 40,
+                "column": 16
+              },
+              "end": {
+                "line": 40,
+                "column": 31
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 40,
+            "column": 1
+          },
+          "end": {
+            "line": 40,
+            "column": 33
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#foo\\.bar"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 41,
+                "column": 11
+              },
+              "end": {
+                "line": 41,
+                "column": 26
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 41,
+            "column": 1
+          },
+          "end": {
+            "line": 41,
+            "column": 28
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\3A hover"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 42,
+                "column": 12
+              },
+              "end": {
+                "line": 42,
+                "column": 27
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 42,
+            "column": 1
+          },
+          "end": {
+            "line": 42,
+            "column": 29
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\3A hover\\3A focus\\3A active"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 43,
+                "column": 31
+              },
+              "end": {
+                "line": 43,
+                "column": 46
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 43,
+            "column": 1
+          },
+          "end": {
+            "line": 43,
+            "column": 48
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#\\[attr\\=value\\]"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 44,
+                "column": 18
+              },
+              "end": {
+                "line": 44,
+                "column": 33
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 44,
+            "column": 1
+          },
+          "end": {
+            "line": 44,
+            "column": 35
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#f\\/o\\/o"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 45,
+                "column": 10
+              },
+              "end": {
+                "line": 45,
+                "column": 25
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 45,
+            "column": 1
+          },
+          "end": {
+            "line": 45,
+            "column": 27
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#f\\\\o\\\\o"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 46,
+                "column": 10
+              },
+              "end": {
+                "line": 46,
+                "column": 25
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 46,
+            "column": 1
+          },
+          "end": {
+            "line": 46,
+            "column": 27
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#f\\*o\\*o"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 47,
+                "column": 10
+              },
+              "end": {
+                "line": 47,
+                "column": 25
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 47,
+            "column": 1
+          },
+          "end": {
+            "line": 47,
+            "column": 27
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#f\\!o\\!o"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 48,
+                "column": 10
+              },
+              "end": {
+                "line": 48,
+                "column": 25
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 48,
+            "column": 1
+          },
+          "end": {
+            "line": 48,
+            "column": 27
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#f\\'o\\'o"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 49,
+                "column": 10
+              },
+              "end": {
+                "line": 49,
+                "column": 25
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 49,
+            "column": 1
+          },
+          "end": {
+            "line": 49,
+            "column": 27
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#f\\~o\\~o"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 50,
+                "column": 10
+              },
+              "end": {
+                "line": 50,
+                "column": 25
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 50,
+            "column": 1
+          },
+          "end": {
+            "line": 50,
+            "column": 27
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "#f\\+o\\+o"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "lime",
+            "position": {
+              "start": {
+                "line": 51,
+                "column": 10
+              },
+              "end": {
+                "line": 51,
+                "column": 25
+              },
+              "source": "escapes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 51,
+            "column": 1
+          },
+          "end": {
+            "line": 51,
+            "column": 27
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "comment",
+        "comment": " css-parse does not yet pass this test ",
+        "position": {
+          "start": {
+            "line": 53,
+            "column": 1
+          },
+          "end": {
+            "line": 53,
+            "column": 44
+          },
+          "source": "escapes.css"
+        }
+      },
+      {
+        "type": "comment",
+        "comment": "#\\{\\}{background:lime;}",
+        "position": {
+          "start": {
+            "line": 54,
+            "column": 1
+          },
+          "end": {
+            "line": 54,
+            "column": 28
+          },
+          "source": "escapes.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/host.css b/test/cases/host.css
new file mode 100644
index 0000000..567a9d3
--- /dev/null
+++ b/test/cases/host.css
@@ -0,0 +1,5 @@
+ at host {
+  :scope {
+    display: block;
+  }
+}
\ No newline at end of file
diff --git a/test/cases/host.json b/test/cases/host.json
new file mode 100644
index 0000000..4967920
--- /dev/null
+++ b/test/cases/host.json
@@ -0,0 +1,58 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "host",
+        "rules": [
+          {
+            "type": "rule",
+            "selectors": [
+              ":scope"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "display",
+                "value": "block",
+                "position": {
+                  "start": {
+                    "line": 3,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 3,
+                    "column": 19
+                  },
+                  "source": "host.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 2,
+                "column": 3
+              },
+              "end": {
+                "line": 4,
+                "column": 4
+              },
+              "source": "host.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 5,
+            "column": 2
+          },
+          "source": "host.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/import.css b/test/cases/import.css
new file mode 100644
index 0000000..3d9ad35
--- /dev/null
+++ b/test/cases/import.css
@@ -0,0 +1,6 @@
+
+ at import url("fineprint.css") print;
+ at import url("bluish.css") projection, tv;
+ at import 'custom.css';
+ at import "common.css" screen, projection;
+ at import url('landscape.css') screen and (orientation:landscape);
diff --git a/test/cases/import.json b/test/cases/import.json
new file mode 100644
index 0000000..ce1f2ac
--- /dev/null
+++ b/test/cases/import.json
@@ -0,0 +1,82 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "import",
+        "import": "url(\"fineprint.css\") print",
+        "position": {
+          "start": {
+            "line": 2,
+            "column": 1
+          },
+          "end": {
+            "line": 2,
+            "column": 36
+          },
+          "source": "import.css"
+        }
+      },
+      {
+        "type": "import",
+        "import": "url(\"bluish.css\") projection, tv",
+        "position": {
+          "start": {
+            "line": 3,
+            "column": 1
+          },
+          "end": {
+            "line": 3,
+            "column": 42
+          },
+          "source": "import.css"
+        }
+      },
+      {
+        "type": "import",
+        "import": "'custom.css'",
+        "position": {
+          "start": {
+            "line": 4,
+            "column": 1
+          },
+          "end": {
+            "line": 4,
+            "column": 22
+          },
+          "source": "import.css"
+        }
+      },
+      {
+        "type": "import",
+        "import": "\"common.css\" screen, projection",
+        "position": {
+          "start": {
+            "line": 5,
+            "column": 1
+          },
+          "end": {
+            "line": 5,
+            "column": 41
+          },
+          "source": "import.css"
+        }
+      },
+      {
+        "type": "import",
+        "import": "url('landscape.css') screen and (orientation:landscape)",
+        "position": {
+          "start": {
+            "line": 6,
+            "column": 1
+          },
+          "end": {
+            "line": 6,
+            "column": 65
+          },
+          "source": "import.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/import.messed.css b/test/cases/import.messed.css
new file mode 100644
index 0000000..6184cf6
--- /dev/null
+++ b/test/cases/import.messed.css
@@ -0,0 +1,7 @@
+
+   @import url("fineprint.css") print;
+  @import url("bluish.css") projection, tv;
+      @import 'custom.css';
+  @import "common.css" screen, projection  ;
+
+  @import url('landscape.css') screen and (orientation:landscape);
diff --git a/test/cases/import.messed.json b/test/cases/import.messed.json
new file mode 100644
index 0000000..78139d7
--- /dev/null
+++ b/test/cases/import.messed.json
@@ -0,0 +1,82 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "import",
+        "import": "url(\"fineprint.css\") print",
+        "position": {
+          "start": {
+            "line": 2,
+            "column": 4
+          },
+          "end": {
+            "line": 2,
+            "column": 39
+          },
+          "source": "import.messed.css"
+        }
+      },
+      {
+        "type": "import",
+        "import": "url(\"bluish.css\") projection, tv",
+        "position": {
+          "start": {
+            "line": 3,
+            "column": 3
+          },
+          "end": {
+            "line": 3,
+            "column": 44
+          },
+          "source": "import.messed.css"
+        }
+      },
+      {
+        "type": "import",
+        "import": "'custom.css'",
+        "position": {
+          "start": {
+            "line": 4,
+            "column": 7
+          },
+          "end": {
+            "line": 4,
+            "column": 28
+          },
+          "source": "import.messed.css"
+        }
+      },
+      {
+        "type": "import",
+        "import": "\"common.css\" screen, projection",
+        "position": {
+          "start": {
+            "line": 5,
+            "column": 3
+          },
+          "end": {
+            "line": 5,
+            "column": 45
+          },
+          "source": "import.messed.css"
+        }
+      },
+      {
+        "type": "import",
+        "import": "url('landscape.css') screen and (orientation:landscape)",
+        "position": {
+          "start": {
+            "line": 7,
+            "column": 3
+          },
+          "end": {
+            "line": 7,
+            "column": 67
+          },
+          "source": "import.messed.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/invalid.css b/test/cases/invalid.css
new file mode 100644
index 0000000..cdd7a0f
--- /dev/null
+++ b/test/cases/invalid.css
@@ -0,0 +1,3 @@
+{
+  
+  asdfasdfasdfasd
\ No newline at end of file
diff --git a/test/cases/invalid.json b/test/cases/invalid.json
new file mode 100644
index 0000000..9a68693
--- /dev/null
+++ b/test/cases/invalid.json
@@ -0,0 +1,6 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": []
+  }
+}
\ No newline at end of file
diff --git a/test/cases/keyframes.advanced.css b/test/cases/keyframes.advanced.css
new file mode 100644
index 0000000..c509a11
--- /dev/null
+++ b/test/cases/keyframes.advanced.css
@@ -0,0 +1,13 @@
+ at keyframes advanced {
+  top {
+    opacity[sqrt]: 0;
+  }
+
+  100 {
+    opacity: 0.5;
+  }
+
+  bottom {
+    opacity: 1;
+  }
+}
diff --git a/test/cases/keyframes.advanced.json b/test/cases/keyframes.advanced.json
new file mode 100644
index 0000000..e1a2f46
--- /dev/null
+++ b/test/cases/keyframes.advanced.json
@@ -0,0 +1,129 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "keyframes",
+        "name": "advanced",
+        "keyframes": [
+          {
+            "type": "keyframe",
+            "values": [
+              "top"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "opacity[sqrt]",
+                "value": "0",
+                "position": {
+                  "start": {
+                    "line": 3,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 3,
+                    "column": 21
+                  },
+                  "source": "keyframes.advanced.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 2,
+                "column": 3
+              },
+              "end": {
+                "line": 4,
+                "column": 4
+              },
+              "source": "keyframes.advanced.css"
+            }
+          },
+          {
+            "type": "keyframe",
+            "values": [
+              "100"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "opacity",
+                "value": "0.5",
+                "position": {
+                  "start": {
+                    "line": 7,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 7,
+                    "column": 17
+                  },
+                  "source": "keyframes.advanced.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 6,
+                "column": 3
+              },
+              "end": {
+                "line": 8,
+                "column": 4
+              },
+              "source": "keyframes.advanced.css"
+            }
+          },
+          {
+            "type": "keyframe",
+            "values": [
+              "bottom"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "opacity",
+                "value": "1",
+                "position": {
+                  "start": {
+                    "line": 11,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 11,
+                    "column": 15
+                  },
+                  "source": "keyframes.advanced.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 10,
+                "column": 3
+              },
+              "end": {
+                "line": 12,
+                "column": 4
+              },
+              "source": "keyframes.advanced.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 13,
+            "column": 2
+          },
+          "source": "keyframes.advanced.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/keyframes.complex.css b/test/cases/keyframes.complex.css
new file mode 100644
index 0000000..79eb689
--- /dev/null
+++ b/test/cases/keyframes.complex.css
@@ -0,0 +1,8 @@
+ at keyframes foo {
+  0% { top: 0; left: 0 }
+  30.50% { top: 50px }
+  .68% ,
+  72%
+      , 85% { left: 50px }
+  100% { top: 100px; left: 100% }
+}
\ No newline at end of file
diff --git a/test/cases/keyframes.complex.json b/test/cases/keyframes.complex.json
new file mode 100644
index 0000000..379c421
--- /dev/null
+++ b/test/cases/keyframes.complex.json
@@ -0,0 +1,198 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "keyframes",
+        "name": "foo",
+        "keyframes": [
+          {
+            "type": "keyframe",
+            "values": [
+              "0%"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "top",
+                "value": "0",
+                "position": {
+                  "start": {
+                    "line": 2,
+                    "column": 8
+                  },
+                  "end": {
+                    "line": 2,
+                    "column": 14
+                  },
+                  "source": "keyframes.complex.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "left",
+                "value": "0",
+                "position": {
+                  "start": {
+                    "line": 2,
+                    "column": 16
+                  },
+                  "end": {
+                    "line": 2,
+                    "column": 24
+                  },
+                  "source": "keyframes.complex.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 2,
+                "column": 3
+              },
+              "end": {
+                "line": 2,
+                "column": 25
+              },
+              "source": "keyframes.complex.css"
+            }
+          },
+          {
+            "type": "keyframe",
+            "values": [
+              "30.50%"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "top",
+                "value": "50px",
+                "position": {
+                  "start": {
+                    "line": 3,
+                    "column": 12
+                  },
+                  "end": {
+                    "line": 3,
+                    "column": 22
+                  },
+                  "source": "keyframes.complex.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 3,
+                "column": 3
+              },
+              "end": {
+                "line": 3,
+                "column": 23
+              },
+              "source": "keyframes.complex.css"
+            }
+          },
+          {
+            "type": "keyframe",
+            "values": [
+              ".68%",
+              "72%",
+              "85%"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "left",
+                "value": "50px",
+                "position": {
+                  "start": {
+                    "line": 6,
+                    "column": 15
+                  },
+                  "end": {
+                    "line": 6,
+                    "column": 26
+                  },
+                  "source": "keyframes.complex.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 4,
+                "column": 3
+              },
+              "end": {
+                "line": 6,
+                "column": 27
+              },
+              "source": "keyframes.complex.css"
+            }
+          },
+          {
+            "type": "keyframe",
+            "values": [
+              "100%"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "top",
+                "value": "100px",
+                "position": {
+                  "start": {
+                    "line": 7,
+                    "column": 10
+                  },
+                  "end": {
+                    "line": 7,
+                    "column": 20
+                  },
+                  "source": "keyframes.complex.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "left",
+                "value": "100%",
+                "position": {
+                  "start": {
+                    "line": 7,
+                    "column": 22
+                  },
+                  "end": {
+                    "line": 7,
+                    "column": 33
+                  },
+                  "source": "keyframes.complex.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 7,
+                "column": 3
+              },
+              "end": {
+                "line": 7,
+                "column": 34
+              },
+              "source": "keyframes.complex.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 8,
+            "column": 2
+          },
+          "source": "keyframes.complex.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/keyframes.css b/test/cases/keyframes.css
new file mode 100644
index 0000000..24f19ff
--- /dev/null
+++ b/test/cases/keyframes.css
@@ -0,0 +1,13 @@
+ at keyframes fade {
+  /* from above */
+  from {
+    /* from inside */
+    opacity: 0;
+  }
+
+  /* to above */
+  to {
+    /* to inside */
+    opacity: 1;
+  }
+}
\ No newline at end of file
diff --git a/test/cases/keyframes.json b/test/cases/keyframes.json
new file mode 100644
index 0000000..0ef0637
--- /dev/null
+++ b/test/cases/keyframes.json
@@ -0,0 +1,154 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "keyframes",
+        "name": "fade",
+        "keyframes": [
+          {
+            "type": "comment",
+            "comment": " from above ",
+            "position": {
+              "start": {
+                "line": 2,
+                "column": 3
+              },
+              "end": {
+                "line": 2,
+                "column": 19
+              },
+              "source": "keyframes.css"
+            }
+          },
+          {
+            "type": "keyframe",
+            "values": [
+              "from"
+            ],
+            "declarations": [
+              {
+                "type": "comment",
+                "comment": " from inside ",
+                "position": {
+                  "start": {
+                    "line": 4,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 4,
+                    "column": 22
+                  },
+                  "source": "keyframes.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "opacity",
+                "value": "0",
+                "position": {
+                  "start": {
+                    "line": 5,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 5,
+                    "column": 15
+                  },
+                  "source": "keyframes.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 3,
+                "column": 3
+              },
+              "end": {
+                "line": 6,
+                "column": 4
+              },
+              "source": "keyframes.css"
+            }
+          },
+          {
+            "type": "comment",
+            "comment": " to above ",
+            "position": {
+              "start": {
+                "line": 8,
+                "column": 3
+              },
+              "end": {
+                "line": 8,
+                "column": 17
+              },
+              "source": "keyframes.css"
+            }
+          },
+          {
+            "type": "keyframe",
+            "values": [
+              "to"
+            ],
+            "declarations": [
+              {
+                "type": "comment",
+                "comment": " to inside ",
+                "position": {
+                  "start": {
+                    "line": 10,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 10,
+                    "column": 20
+                  },
+                  "source": "keyframes.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "opacity",
+                "value": "1",
+                "position": {
+                  "start": {
+                    "line": 11,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 11,
+                    "column": 15
+                  },
+                  "source": "keyframes.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 9,
+                "column": 3
+              },
+              "end": {
+                "line": 12,
+                "column": 4
+              },
+              "source": "keyframes.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 13,
+            "column": 2
+          },
+          "source": "keyframes.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/keyframes.messed.css b/test/cases/keyframes.messed.css
new file mode 100644
index 0000000..32f0be9
--- /dev/null
+++ b/test/cases/keyframes.messed.css
@@ -0,0 +1,6 @@
+ at keyframes fade {from
+  {opacity: 0;
+     }
+to
+  {
+     opacity: 1;}}
\ No newline at end of file
diff --git a/test/cases/keyframes.messed.json b/test/cases/keyframes.messed.json
new file mode 100644
index 0000000..9c92591
--- /dev/null
+++ b/test/cases/keyframes.messed.json
@@ -0,0 +1,94 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "keyframes",
+        "name": "fade",
+        "keyframes": [
+          {
+            "type": "keyframe",
+            "values": [
+              "from"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "opacity",
+                "value": "0",
+                "position": {
+                  "start": {
+                    "line": 2,
+                    "column": 4
+                  },
+                  "end": {
+                    "line": 2,
+                    "column": 14
+                  },
+                  "source": "keyframes.messed.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 1,
+                "column": 18
+              },
+              "end": {
+                "line": 3,
+                "column": 7
+              },
+              "source": "keyframes.messed.css"
+            }
+          },
+          {
+            "type": "keyframe",
+            "values": [
+              "to"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "opacity",
+                "value": "1",
+                "position": {
+                  "start": {
+                    "line": 6,
+                    "column": 6
+                  },
+                  "end": {
+                    "line": 6,
+                    "column": 16
+                  },
+                  "source": "keyframes.messed.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 4,
+                "column": 1
+              },
+              "end": {
+                "line": 6,
+                "column": 18
+              },
+              "source": "keyframes.messed.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 6,
+            "column": 19
+          },
+          "source": "keyframes.messed.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/keyframes.vendor.css b/test/cases/keyframes.vendor.css
new file mode 100644
index 0000000..54f15e1
--- /dev/null
+++ b/test/cases/keyframes.vendor.css
@@ -0,0 +1,4 @@
+ at -webkit-keyframes fade {
+  from { opacity: 0 }
+  to { opacity: 1 }
+}
\ No newline at end of file
diff --git a/test/cases/keyframes.vendor.json b/test/cases/keyframes.vendor.json
new file mode 100644
index 0000000..02def17
--- /dev/null
+++ b/test/cases/keyframes.vendor.json
@@ -0,0 +1,95 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "keyframes",
+        "name": "fade",
+        "vendor": "-webkit-",
+        "keyframes": [
+          {
+            "type": "keyframe",
+            "values": [
+              "from"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "opacity",
+                "value": "0",
+                "position": {
+                  "start": {
+                    "line": 2,
+                    "column": 10
+                  },
+                  "end": {
+                    "line": 2,
+                    "column": 21
+                  },
+                  "source": "keyframes.vendor.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 2,
+                "column": 3
+              },
+              "end": {
+                "line": 2,
+                "column": 22
+              },
+              "source": "keyframes.vendor.css"
+            }
+          },
+          {
+            "type": "keyframe",
+            "values": [
+              "to"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "opacity",
+                "value": "1",
+                "position": {
+                  "start": {
+                    "line": 3,
+                    "column": 8
+                  },
+                  "end": {
+                    "line": 3,
+                    "column": 19
+                  },
+                  "source": "keyframes.vendor.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 3,
+                "column": 3
+              },
+              "end": {
+                "line": 3,
+                "column": 20
+              },
+              "source": "keyframes.vendor.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 4,
+            "column": 2
+          },
+          "source": "keyframes.vendor.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/media.css b/test/cases/media.css
new file mode 100644
index 0000000..b9dc81e
--- /dev/null
+++ b/test/cases/media.css
@@ -0,0 +1,26 @@
+ at media screen, projection {
+  /* html above */
+  html {
+    /* html inside */
+    background: #fffef0;
+    color: #300;
+  }
+
+  /* body above */
+  body {
+    /* body inside */
+    max-width: 35em;
+    margin: 0 auto;
+  }
+}
+
+ at media print {
+  html {
+    background: #fff;
+    color: #000;
+  }
+  body {
+    padding: 1in;
+    border: 0.5pt solid #666;
+  }
+}
\ No newline at end of file
diff --git a/test/cases/media.json b/test/cases/media.json
new file mode 100644
index 0000000..8dabf65
--- /dev/null
+++ b/test/cases/media.json
@@ -0,0 +1,305 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "media",
+        "media": "screen, projection",
+        "rules": [
+          {
+            "type": "comment",
+            "comment": " html above ",
+            "position": {
+              "start": {
+                "line": 2,
+                "column": 3
+              },
+              "end": {
+                "line": 2,
+                "column": 19
+              },
+              "source": "media.css"
+            }
+          },
+          {
+            "type": "rule",
+            "selectors": [
+              "html"
+            ],
+            "declarations": [
+              {
+                "type": "comment",
+                "comment": " html inside ",
+                "position": {
+                  "start": {
+                    "line": 4,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 4,
+                    "column": 22
+                  },
+                  "source": "media.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "background",
+                "value": "#fffef0",
+                "position": {
+                  "start": {
+                    "line": 5,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 5,
+                    "column": 24
+                  },
+                  "source": "media.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "color",
+                "value": "#300",
+                "position": {
+                  "start": {
+                    "line": 6,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 6,
+                    "column": 16
+                  },
+                  "source": "media.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 3,
+                "column": 3
+              },
+              "end": {
+                "line": 7,
+                "column": 4
+              },
+              "source": "media.css"
+            }
+          },
+          {
+            "type": "comment",
+            "comment": " body above ",
+            "position": {
+              "start": {
+                "line": 9,
+                "column": 3
+              },
+              "end": {
+                "line": 9,
+                "column": 19
+              },
+              "source": "media.css"
+            }
+          },
+          {
+            "type": "rule",
+            "selectors": [
+              "body"
+            ],
+            "declarations": [
+              {
+                "type": "comment",
+                "comment": " body inside ",
+                "position": {
+                  "start": {
+                    "line": 11,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 11,
+                    "column": 22
+                  },
+                  "source": "media.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "max-width",
+                "value": "35em",
+                "position": {
+                  "start": {
+                    "line": 12,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 12,
+                    "column": 20
+                  },
+                  "source": "media.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "margin",
+                "value": "0 auto",
+                "position": {
+                  "start": {
+                    "line": 13,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 13,
+                    "column": 19
+                  },
+                  "source": "media.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 10,
+                "column": 3
+              },
+              "end": {
+                "line": 14,
+                "column": 4
+              },
+              "source": "media.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 15,
+            "column": 2
+          },
+          "source": "media.css"
+        }
+      },
+      {
+        "type": "media",
+        "media": "print",
+        "rules": [
+          {
+            "type": "rule",
+            "selectors": [
+              "html"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "background",
+                "value": "#fff",
+                "position": {
+                  "start": {
+                    "line": 19,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 19,
+                    "column": 21
+                  },
+                  "source": "media.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "color",
+                "value": "#000",
+                "position": {
+                  "start": {
+                    "line": 20,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 20,
+                    "column": 16
+                  },
+                  "source": "media.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 18,
+                "column": 3
+              },
+              "end": {
+                "line": 21,
+                "column": 4
+              },
+              "source": "media.css"
+            }
+          },
+          {
+            "type": "rule",
+            "selectors": [
+              "body"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "padding",
+                "value": "1in",
+                "position": {
+                  "start": {
+                    "line": 23,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 23,
+                    "column": 17
+                  },
+                  "source": "media.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "border",
+                "value": "0.5pt solid #666",
+                "position": {
+                  "start": {
+                    "line": 24,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 24,
+                    "column": 29
+                  },
+                  "source": "media.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 22,
+                "column": 3
+              },
+              "end": {
+                "line": 25,
+                "column": 4
+              },
+              "source": "media.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 17,
+            "column": 1
+          },
+          "end": {
+            "line": 26,
+            "column": 2
+          },
+          "source": "media.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/media.messed.css b/test/cases/media.messed.css
new file mode 100644
index 0000000..9b678f9
--- /dev/null
+++ b/test/cases/media.messed.css
@@ -0,0 +1,27 @@
+ at media screen, projection{ html
+  
+  {
+background: #fffef0;
+    color:#300;
+  }
+  body
+
+{
+    max-width: 35em;
+    margin: 0 auto;
+
+
+}
+  }
+
+ at media print
+{
+              html {
+              background: #fff;
+              color: #000;
+              }
+              body {
+              padding: 1in;
+              border: 0.5pt solid #666;
+              }
+}
\ No newline at end of file
diff --git a/test/cases/media.messed.json b/test/cases/media.messed.json
new file mode 100644
index 0000000..42757a6
--- /dev/null
+++ b/test/cases/media.messed.json
@@ -0,0 +1,245 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "media",
+        "media": "screen, projection",
+        "rules": [
+          {
+            "type": "rule",
+            "selectors": [
+              "html"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "background",
+                "value": "#fffef0",
+                "position": {
+                  "start": {
+                    "line": 4,
+                    "column": 1
+                  },
+                  "end": {
+                    "line": 4,
+                    "column": 20
+                  },
+                  "source": "media.messed.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "color",
+                "value": "#300",
+                "position": {
+                  "start": {
+                    "line": 5,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 5,
+                    "column": 15
+                  },
+                  "source": "media.messed.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 1,
+                "column": 28
+              },
+              "end": {
+                "line": 6,
+                "column": 4
+              },
+              "source": "media.messed.css"
+            }
+          },
+          {
+            "type": "rule",
+            "selectors": [
+              "body"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "max-width",
+                "value": "35em",
+                "position": {
+                  "start": {
+                    "line": 10,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 10,
+                    "column": 20
+                  },
+                  "source": "media.messed.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "margin",
+                "value": "0 auto",
+                "position": {
+                  "start": {
+                    "line": 11,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 11,
+                    "column": 19
+                  },
+                  "source": "media.messed.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 7,
+                "column": 3
+              },
+              "end": {
+                "line": 14,
+                "column": 2
+              },
+              "source": "media.messed.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 15,
+            "column": 4
+          },
+          "source": "media.messed.css"
+        }
+      },
+      {
+        "type": "media",
+        "media": "print",
+        "rules": [
+          {
+            "type": "rule",
+            "selectors": [
+              "html"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "background",
+                "value": "#fff",
+                "position": {
+                  "start": {
+                    "line": 20,
+                    "column": 15
+                  },
+                  "end": {
+                    "line": 20,
+                    "column": 31
+                  },
+                  "source": "media.messed.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "color",
+                "value": "#000",
+                "position": {
+                  "start": {
+                    "line": 21,
+                    "column": 15
+                  },
+                  "end": {
+                    "line": 21,
+                    "column": 26
+                  },
+                  "source": "media.messed.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 19,
+                "column": 15
+              },
+              "end": {
+                "line": 22,
+                "column": 16
+              },
+              "source": "media.messed.css"
+            }
+          },
+          {
+            "type": "rule",
+            "selectors": [
+              "body"
+            ],
+            "declarations": [
+              {
+                "type": "declaration",
+                "property": "padding",
+                "value": "1in",
+                "position": {
+                  "start": {
+                    "line": 24,
+                    "column": 15
+                  },
+                  "end": {
+                    "line": 24,
+                    "column": 27
+                  },
+                  "source": "media.messed.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "border",
+                "value": "0.5pt solid #666",
+                "position": {
+                  "start": {
+                    "line": 25,
+                    "column": 15
+                  },
+                  "end": {
+                    "line": 25,
+                    "column": 39
+                  },
+                  "source": "media.messed.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 23,
+                "column": 15
+              },
+              "end": {
+                "line": 26,
+                "column": 16
+              },
+              "source": "media.messed.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 17,
+            "column": 1
+          },
+          "end": {
+            "line": 27,
+            "column": 2
+          },
+          "source": "media.messed.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/messed-up.css b/test/cases/messed-up.css
new file mode 100644
index 0000000..96fcc4e
--- /dev/null
+++ b/test/cases/messed-up.css
@@ -0,0 +1,15 @@
+body { foo
+  :
+  'bar' }
+
+   body{foo:bar;bar:baz}
+   body
+   {
+     foo
+     :
+     bar
+     ;
+     bar
+     :
+     baz
+     }
\ No newline at end of file
diff --git a/test/cases/messed-up.json b/test/cases/messed-up.json
new file mode 100644
index 0000000..6fa5739
--- /dev/null
+++ b/test/cases/messed-up.json
@@ -0,0 +1,144 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "rule",
+        "selectors": [
+          "body"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "foo",
+            "value": "'bar'",
+            "position": {
+              "start": {
+                "line": 1,
+                "column": 8
+              },
+              "end": {
+                "line": 3,
+                "column": 9
+              },
+              "source": "messed-up.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 3,
+            "column": 10
+          },
+          "source": "messed-up.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "body"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "foo",
+            "value": "bar",
+            "position": {
+              "start": {
+                "line": 5,
+                "column": 9
+              },
+              "end": {
+                "line": 5,
+                "column": 16
+              },
+              "source": "messed-up.css"
+            }
+          },
+          {
+            "type": "declaration",
+            "property": "bar",
+            "value": "baz",
+            "position": {
+              "start": {
+                "line": 5,
+                "column": 17
+              },
+              "end": {
+                "line": 5,
+                "column": 24
+              },
+              "source": "messed-up.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 5,
+            "column": 4
+          },
+          "end": {
+            "line": 5,
+            "column": 25
+          },
+          "source": "messed-up.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "body"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "foo",
+            "value": "bar",
+            "position": {
+              "start": {
+                "line": 8,
+                "column": 6
+              },
+              "end": {
+                "line": 11,
+                "column": 6
+              },
+              "source": "messed-up.css"
+            }
+          },
+          {
+            "type": "declaration",
+            "property": "bar",
+            "value": "baz",
+            "position": {
+              "start": {
+                "line": 12,
+                "column": 6
+              },
+              "end": {
+                "line": 15,
+                "column": 6
+              },
+              "source": "messed-up.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 6,
+            "column": 4
+          },
+          "end": {
+            "line": 15,
+            "column": 7
+          },
+          "source": "messed-up.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/namespace.css b/test/cases/namespace.css
new file mode 100644
index 0000000..6982d5e
--- /dev/null
+++ b/test/cases/namespace.css
@@ -0,0 +1,2 @@
+ at namespace "http://www.w3.org/1999/xhtml";
+ at namespace svg "http://www.w3.org/2000/svg";
\ No newline at end of file
diff --git a/test/cases/namespace.json b/test/cases/namespace.json
new file mode 100644
index 0000000..f6f4a12
--- /dev/null
+++ b/test/cases/namespace.json
@@ -0,0 +1,37 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "namespace",
+        "namespace": "\"http://www.w3.org/1999/xhtml\"",
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 1,
+            "column": 43
+          },
+          "source": "namespace.css"
+        }
+      },
+      {
+        "type": "namespace",
+        "namespace": "svg \"http://www.w3.org/2000/svg\"",
+        "position": {
+          "start": {
+            "line": 2,
+            "column": 1
+          },
+          "end": {
+            "line": 2,
+            "column": 45
+          },
+          "source": "namespace.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/no-semi.css b/test/cases/no-semi.css
new file mode 100644
index 0000000..652cdf2
--- /dev/null
+++ b/test/cases/no-semi.css
@@ -0,0 +1,5 @@
+
+tobi loki jane {
+  are: 'all';
+  the-species: called "ferrets"
+}
diff --git a/test/cases/no-semi.json b/test/cases/no-semi.json
new file mode 100644
index 0000000..5d313ea
--- /dev/null
+++ b/test/cases/no-semi.json
@@ -0,0 +1,58 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "rule",
+        "selectors": [
+          "tobi loki jane"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "are",
+            "value": "'all'",
+            "position": {
+              "start": {
+                "line": 3,
+                "column": 3
+              },
+              "end": {
+                "line": 3,
+                "column": 13
+              },
+              "source": "no-semi.css"
+            }
+          },
+          {
+            "type": "declaration",
+            "property": "the-species",
+            "value": "called \"ferrets\"",
+            "position": {
+              "start": {
+                "line": 4,
+                "column": 3
+              },
+              "end": {
+                "line": 5,
+                "column": 1
+              },
+              "source": "no-semi.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 2,
+            "column": 1
+          },
+          "end": {
+            "line": 5,
+            "column": 2
+          },
+          "source": "no-semi.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/paged-media.css b/test/cases/paged-media.css
new file mode 100644
index 0000000..8e9338e
--- /dev/null
+++ b/test/cases/paged-media.css
@@ -0,0 +1,9 @@
+/* toc above */
+ at page toc, index:blank {
+  /* toc inside */
+  color: green;
+}
+
+ at page {
+  font-size: 16pt;
+}
diff --git a/test/cases/paged-media.json b/test/cases/paged-media.json
new file mode 100644
index 0000000..77effee
--- /dev/null
+++ b/test/cases/paged-media.json
@@ -0,0 +1,106 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "comment",
+        "comment": " toc above ",
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 1,
+            "column": 16
+          },
+          "source": "paged-media.css"
+        }
+      },
+      {
+        "type": "page",
+        "selectors": [
+          "toc",
+          "index:blank"
+        ],
+        "declarations": [
+          {
+            "type": "comment",
+            "comment": " toc inside ",
+            "position": {
+              "start": {
+                "line": 3,
+                "column": 3
+              },
+              "end": {
+                "line": 3,
+                "column": 19
+              },
+              "source": "paged-media.css"
+            }
+          },
+          {
+            "type": "declaration",
+            "property": "color",
+            "value": "green",
+            "position": {
+              "start": {
+                "line": 4,
+                "column": 3
+              },
+              "end": {
+                "line": 4,
+                "column": 15
+              },
+              "source": "paged-media.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 2,
+            "column": 1
+          },
+          "end": {
+            "line": 5,
+            "column": 2
+          },
+          "source": "paged-media.css"
+        }
+      },
+      {
+        "type": "page",
+        "selectors": [],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "font-size",
+            "value": "16pt",
+            "position": {
+              "start": {
+                "line": 8,
+                "column": 3
+              },
+              "end": {
+                "line": 8,
+                "column": 18
+              },
+              "source": "paged-media.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 7,
+            "column": 1
+          },
+          "end": {
+            "line": 9,
+            "column": 2
+          },
+          "source": "paged-media.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/props.css b/test/cases/props.css
new file mode 100644
index 0000000..6549151
--- /dev/null
+++ b/test/cases/props.css
@@ -0,0 +1,6 @@
+
+tobi loki jane {
+  are: 'all';
+  the-species: called "ferrets";
+  *even: 'ie crap';
+}
diff --git a/test/cases/props.json b/test/cases/props.json
new file mode 100644
index 0000000..a0fcaab
--- /dev/null
+++ b/test/cases/props.json
@@ -0,0 +1,74 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "rule",
+        "selectors": [
+          "tobi loki jane"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "are",
+            "value": "'all'",
+            "position": {
+              "start": {
+                "line": 3,
+                "column": 3
+              },
+              "end": {
+                "line": 3,
+                "column": 13
+              },
+              "source": "props.css"
+            }
+          },
+          {
+            "type": "declaration",
+            "property": "the-species",
+            "value": "called \"ferrets\"",
+            "position": {
+              "start": {
+                "line": 4,
+                "column": 3
+              },
+              "end": {
+                "line": 4,
+                "column": 32
+              },
+              "source": "props.css"
+            }
+          },
+          {
+            "type": "declaration",
+            "property": "*even",
+            "value": "'ie crap'",
+            "position": {
+              "start": {
+                "line": 5,
+                "column": 3
+              },
+              "end": {
+                "line": 5,
+                "column": 19
+              },
+              "source": "props.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 2,
+            "column": 1
+          },
+          "end": {
+            "line": 6,
+            "column": 2
+          },
+          "source": "props.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/quoted.css b/test/cases/quoted.css
new file mode 100644
index 0000000..373340e
--- /dev/null
+++ b/test/cases/quoted.css
@@ -0,0 +1,3 @@
+body {
+  background: url('some;stuff;here') 50% 50% no-repeat;
+}
\ No newline at end of file
diff --git a/test/cases/quoted.json b/test/cases/quoted.json
new file mode 100644
index 0000000..7092353
--- /dev/null
+++ b/test/cases/quoted.json
@@ -0,0 +1,42 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "rule",
+        "selectors": [
+          "body"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "background",
+            "value": "url('some;stuff;here') 50% 50% no-repeat",
+            "position": {
+              "start": {
+                "line": 2,
+                "column": 3
+              },
+              "end": {
+                "line": 2,
+                "column": 55
+              },
+              "source": "quoted.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 3,
+            "column": 2
+          },
+          "source": "quoted.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/rule.css b/test/cases/rule.css
new file mode 100644
index 0000000..84f5ffd
--- /dev/null
+++ b/test/cases/rule.css
@@ -0,0 +1,3 @@
+foo {
+  bar: 'baz';
+}
\ No newline at end of file
diff --git a/test/cases/rule.json b/test/cases/rule.json
new file mode 100644
index 0000000..0af5c6f
--- /dev/null
+++ b/test/cases/rule.json
@@ -0,0 +1,42 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "rule",
+        "selectors": [
+          "foo"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "bar",
+            "value": "'baz'",
+            "position": {
+              "start": {
+                "line": 2,
+                "column": 3
+              },
+              "end": {
+                "line": 2,
+                "column": 13
+              },
+              "source": "rule.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 3,
+            "column": 2
+          },
+          "source": "rule.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/rules.css b/test/cases/rules.css
new file mode 100644
index 0000000..329002e
--- /dev/null
+++ b/test/cases/rules.css
@@ -0,0 +1,6 @@
+tobi {
+  name: 'tobi';
+}
+loki {
+  name: 'loki';
+}
\ No newline at end of file
diff --git a/test/cases/rules.json b/test/cases/rules.json
new file mode 100644
index 0000000..9fda096
--- /dev/null
+++ b/test/cases/rules.json
@@ -0,0 +1,77 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "rule",
+        "selectors": [
+          "tobi"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "name",
+            "value": "'tobi'",
+            "position": {
+              "start": {
+                "line": 2,
+                "column": 3
+              },
+              "end": {
+                "line": 2,
+                "column": 15
+              },
+              "source": "rules.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 3,
+            "column": 2
+          },
+          "source": "rules.css"
+        }
+      },
+      {
+        "type": "rule",
+        "selectors": [
+          "loki"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "name",
+            "value": "'loki'",
+            "position": {
+              "start": {
+                "line": 5,
+                "column": 3
+              },
+              "end": {
+                "line": 5,
+                "column": 15
+              },
+              "source": "rules.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 4,
+            "column": 1
+          },
+          "end": {
+            "line": 6,
+            "column": 2
+          },
+          "source": "rules.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/supports.css b/test/cases/supports.css
new file mode 100644
index 0000000..4ca696a
--- /dev/null
+++ b/test/cases/supports.css
@@ -0,0 +1,8 @@
+ at supports (display: flex) or (display: box) {
+  /* flex above */
+  .flex {
+    /* flex inside */
+    display: box;
+    display: flex;
+  }
+}
\ No newline at end of file
diff --git a/test/cases/supports.json b/test/cases/supports.json
new file mode 100644
index 0000000..065a7ce
--- /dev/null
+++ b/test/cases/supports.json
@@ -0,0 +1,105 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "supports",
+        "supports": "(display: flex) or (display: box)",
+        "rules": [
+          {
+            "type": "comment",
+            "comment": " flex above ",
+            "position": {
+              "start": {
+                "line": 2,
+                "column": 3
+              },
+              "end": {
+                "line": 2,
+                "column": 19
+              },
+              "source": "supports.css"
+            }
+          },
+          {
+            "type": "rule",
+            "selectors": [
+              ".flex"
+            ],
+            "declarations": [
+              {
+                "type": "comment",
+                "comment": " flex inside ",
+                "position": {
+                  "start": {
+                    "line": 4,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 4,
+                    "column": 22
+                  },
+                  "source": "supports.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "display",
+                "value": "box",
+                "position": {
+                  "start": {
+                    "line": 5,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 5,
+                    "column": 17
+                  },
+                  "source": "supports.css"
+                }
+              },
+              {
+                "type": "declaration",
+                "property": "display",
+                "value": "flex",
+                "position": {
+                  "start": {
+                    "line": 6,
+                    "column": 5
+                  },
+                  "end": {
+                    "line": 6,
+                    "column": 18
+                  },
+                  "source": "supports.css"
+                }
+              }
+            ],
+            "position": {
+              "start": {
+                "line": 3,
+                "column": 3
+              },
+              "end": {
+                "line": 7,
+                "column": 4
+              },
+              "source": "supports.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 8,
+            "column": 2
+          },
+          "source": "supports.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/cases/wtf.css b/test/cases/wtf.css
new file mode 100644
index 0000000..3305c18
--- /dev/null
+++ b/test/cases/wtf.css
@@ -0,0 +1,5 @@
+.wtf {
+  *overflow-x: hidden;
+  //max-height: 110px;
+  #height: 18px;
+}
\ No newline at end of file
diff --git a/test/cases/wtf.json b/test/cases/wtf.json
new file mode 100644
index 0000000..df6233d
--- /dev/null
+++ b/test/cases/wtf.json
@@ -0,0 +1,74 @@
+{
+  "type": "stylesheet",
+  "stylesheet": {
+    "rules": [
+      {
+        "type": "rule",
+        "selectors": [
+          ".wtf"
+        ],
+        "declarations": [
+          {
+            "type": "declaration",
+            "property": "*overflow-x",
+            "value": "hidden",
+            "position": {
+              "start": {
+                "line": 2,
+                "column": 3
+              },
+              "end": {
+                "line": 2,
+                "column": 22
+              },
+              "source": "wtf.css"
+            }
+          },
+          {
+            "type": "declaration",
+            "property": "//max-height",
+            "value": "110px",
+            "position": {
+              "start": {
+                "line": 3,
+                "column": 3
+              },
+              "end": {
+                "line": 3,
+                "column": 22
+              },
+              "source": "wtf.css"
+            }
+          },
+          {
+            "type": "declaration",
+            "property": "#height",
+            "value": "18px",
+            "position": {
+              "start": {
+                "line": 4,
+                "column": 3
+              },
+              "end": {
+                "line": 4,
+                "column": 16
+              },
+              "source": "wtf.css"
+            }
+          }
+        ],
+        "position": {
+          "start": {
+            "line": 1,
+            "column": 1
+          },
+          "end": {
+            "line": 5,
+            "column": 2
+          },
+          "source": "wtf.css"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/css-parse.js b/test/css-parse.js
new file mode 100644
index 0000000..87497c5
--- /dev/null
+++ b/test/css-parse.js
@@ -0,0 +1,24 @@
+
+/**
+ * Module dependencies.
+ */
+
+var parse = require('..')
+  , fs = require('fs')
+  , path = require('path')
+  , read = fs.readFileSync
+  , readdir = fs.readdirSync;
+
+describe('parse(str)', function(){
+  readdir('test/cases').forEach(function(file){
+    if (~file.indexOf('json')) return;
+    file = path.basename(file, '.css');
+    it('should parse ' + file, function(){
+      var css = read(path.join('test', 'cases', file + '.css'), 'utf8');
+      var json = read(path.join('test', 'cases', file + '.json'), 'utf8');
+      var ret = parse(css, { position: true, source: file + '.css' });
+      ret = JSON.stringify(ret, null, 2);
+      ret.should.equal(json);
+    })
+  });
+})

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-css-parse.git



More information about the Pkg-javascript-commits mailing list